Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Lekcja 2.21

Ostatnio zmodyfikowano 2016-08-15 13:25
Autor Wiadomość
CCbolt
Temat założony przez niniejszego użytkownika
Lekcja 2.21
» 2016-08-13 00:02:29
Po dłuższej przerwie wróciłem do pisania i utknąłem, program się wysypuje i nie pozwala wpisać więcej niż jedną liczbę.
Wzoruje się na 2 tematach, samemu nie umiem sklecić kodu ( nie ma jeszcze tego olśnienia )
http://cpp0x.pl/forum/temat/?id=23334
http://cpp0x.pl/forum/temat/?id=20248




C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

bool czyBylaWylosowana( int iLiczba, int tab[], int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tab[ i++ ] == iLiczba )
             return true;
       
    } while( i < ile );
   
    return false;
}


void podjaliczbe( int tab2[] )
{
    int i;
    int liczba;
    cout << "Podaj 3 liczby: " << endl;
    do
    {
        cout << "Liczba: ";
        cin >> liczba;
        tab2[ i++ ] = liczba;
    } while( i < 3 );
   
}

int losowanie()
{
    int liczba = rand() % 3;
    return liczba;
}
int main()
{
    srand( time( NULL ) );
    int tab2[ 3 ];
    int tab[ 2 ];
    int los;
    int i = 0;
    podjaliczbe( tab2 );
   
   
   
}
P-150779
Gibas11
» 2016-08-13 00:09:30
C/C++
void podjaliczbe( int tab2[] )
{
    int i; //i = ?
    int liczba;
    cout << "Podaj 3 liczby: " << endl;
    do
    {
        cout << "Liczba: ";
        cin >> liczba;
        tab2[ i++ ] = liczba; //Wykraczasz poza zakres
    } while( i < 3 );
   
}
P-150781
CCbolt
Temat założony przez niniejszego użytkownika
» 2016-08-13 00:37:50
Dzięki zapomniałem o zerowaniu.
P-150782
CCbolt
Temat założony przez niniejszego użytkownika
» 2016-08-13 10:32:36
Trochę się pogubiłem sypie mi błędem "error: invalid conversion from 'int*' to 'int' [-fpermissive]|"

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

bool czyBylaWylosowana( int iLiczba, int tab[], int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tab[ i++ ] == iLiczba )
             return true;
       
    } while( i < ile );
   
    return false;
}


void podjaliczbe( int tab2[] )
{
    int i = 0;
    int liczba = 0;
    cout << "Podaj 3 liczby: " << endl;
    do
    {
        cout << "Liczba: ";
        cin >> liczba;
        tab2[ i++ ] = liczba;
    } while( i < 3 );
   
}

int losowanie()
{
    int liczba = rand() % 3;
    return liczba;
}
int main()
{
    srand( time( NULL ) );
    int tab2[ 3 ];
    int tab[ 2 ];
    int los = 0;
    int i = 0;
    podjaliczbe( tab2 );
   
    i = 0;
    do
    {
        los = losowanie();
        if( czyBylaWylosowana( tab2, tab, los ) ) // tutaj jest błąd mieszam argument? Ale nie wiem jak to rozwiązać.
        {
            tab[ i++ ] = tab[ los ];
        }
    } while( i < 2 );
   
    return 0;
   
}
[ cpp ]
P-150788
Gibas11
» 2016-08-13 10:35:29
Chyba takie coś.
if( czyBylaWylosowana( tab2[ i ], tab, los ) )

//Edit: Jednak nie, masz za dużo błędów w main.
C/C++
int main()
{
    srand( time( NULL ) );
   
    int tab2[ 3 ]; //Liczby
    int tab[ 2 ] = { - 1, - 1 }; //Indeksy (domyślnie -1)
    int los = 0; //Losowa liczba
    podjaliczbe( tab2 );
   
    for( int i = 0; i < 2; i++ ) //Pętla wykonująca się 2 razy
    {
        do //Powtarzaj…
        {
            los = losowanie(); //Losowanie
        } while( czyBylaWylosowana( los, tab, 2 ) ); //…dopóki wylosowany indeks jest już w tablicy tablicy
       
        tab[ i ] = los; //Ustawienie i-tej komórki w tablicy indeksów na 'los'
        std::cout << tab2[ tab[ i ] ] << std::endl;
    }
   
    return 0;
   
}
Reszta kodu powinna być ok, bo teraz działa.
P-150789
CCbolt
Temat założony przez niniejszego użytkownika
» 2016-08-13 12:00:50
Wieczorem posiedzę przy tym, pętli for specjalnie jeszcze nie ruszam jeszcze niedługo zacznę, dzięki za odpowiedź.

//Edit
C/C++
int tab[ 2 ] = { - 1, - 1 }; //Indeksy (domyślnie -1)[/cpp]  Tego nie rozumiem, skąd i po co wartość -1.
P-150795
Gibas11
» 2016-08-13 13:02:06
Indeksy zawsze są większe lub równe zeru, dzięki -1 mam pewność że 0 w tablicy będzie wylosowanym indeksem a nie domyślną wartością komórki.
P-150797
CCbolt
Temat założony przez niniejszego użytkownika
» 2016-08-14 17:26:37
Dalej grzebie się w kodzie, próbowałem przerzucić kod na do while bez pętli for i mi nie idzie.
Możecie mi to poprawić i rozpisać co za co odpowiada, niby wiem ale jak widać błędy tworze i mieszam czasem argumenty.

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

bool czyBylaWylosowana( int iLiczba, int tab[], int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tab[ i++ ] == iLiczba )
             return true;
       
    } while( i < ile );
   
    return false;
}


void podjaliczbe( int tab2[] )
{
    int i = 0;
    int liczba = 0;
    cout << "Podaj 3 liczby: " << endl;
    do
    {
        cout << "Liczba: ";
        cin >> liczba;
        tab2[ i++ ] = liczba;
    } while( i < 3 );
   
}

int losowanie()
{
    int liczba = rand() % 3;
    return liczba;
}
int main()
{
    srand( time( NULL ) );
    int tab2[ 3 ];
    int tab[ 2 ] = { - 1, - 1 };
    int los = 0;
    int i = 0;
    podjaliczbe( tab2 );
   
    i = 0;
    do
    {
        los = losowanie();
        if( czyBylaWylosowana( los, tab2, 2 ) )
        {
            tab[ i++ ] = tab[ los ];
            cout << tab2[ tab[ i ] ] << endl;
           
        }
    } while( i < 2 );
   
   
    return 0;
   
}
P-150849
« 1 » 2 3 4
  Strona 1 z 4 Następna strona