leo1377 Temat założony przez niniejszego użytkownika |
problem z zadaniem z losowanie bez powtórzeń » 2014-09-17 19:35:34 Witam, nie mogę doszukac się błędu w moim kodzie , ale czego bym nie wpisał to jako wylosowane liczby wypiuje mi 0 albo 1. Poniżej załączam kod programu, może ktoś się czegoś dopatrzy. #include<iostream> #include<ctime> #include<cstdlib> using namespace std;
void wczytywanie_liczb( int tablica[], int ile ) { cout << "podaj " <<( ile + 1 ) << " liczbe : "; bool b; do { cin >> tablica[ ile ]; b =( cin.good() & !cin.fail() ); if( b == 0 ) cout << "porazka, sprobuj jeszcze raz" << endl; cin.clear(); cin.sync(); } while( !b ); return; }
void wypisywani_liczb( int tablica[], int ile ) { int a = 0; do { cout <<( a + 1 ) << " liczba to " << tablica[ a ] << endl; a++; } while( a != ile ); return; }
bool czy_byla( int tablica[], int ile, int wylosowana ) { if( ile == 0 ) return false; int a = 0; do { if( tablica[ a ] == wylosowana ) return true; else a++; } while( a != ile ); return false; }
int main() { cout << "podaj 3 liczby a ja wylosuje 2 z nich" << endl; int tablica[ 3 ]; int ile = 0; do { wczytywanie_liczb( tablica, ile ); ile++; } while( ile != 2 ); srand( time( NULL ) ); int wylosowane_liczby[ 2 ]; ile = 0; int a; do { a =( rand() % 3 ); if( !( czy_byla( wylosowane_liczby, ile, a ) ) ); { wylosowane_liczby[ ile ] = a; ile++; } } while( ile != 2 ); wypisywani_liczb( wylosowane_liczby, ile ); return 0; }
Pozdrawiam i z góry dzięki za pomoc |
|
Jacob99 |
» 2014-09-17 19:40:32 b =( cin.good() & !cin.fail() ); |
pojedyńczy ampersand & to operator iloczynu bitowego. Powinno być &&. |
|
michal11 |
» 2014-09-17 19:40:54 Wstaw kod w znaczniki. Dlaczego używasz while zamiast for ? |
|
leo1377 Temat założony przez niniejszego użytkownika |
» 2014-09-20 11:59:28 jeszcze nie znam tej funkcji |
|
damon150196 |
» 2014-09-21 14:29:20 moim zdaniem można użyć tego, przepraszam za pisownie i jakieś błędy nie kompilowałem tego struct LICZBY { int lic; bool czy_uzyta; }
LICZBY liczba[ 10 ] = { { 1, false }, { 2, false }, { 3, false }, { 4, false }, { 5, false }, { 6, false }, { 7, false }, { 8, false }, { 9, false }, { 10, false }, }
... srand( static_cast < unsigned int >( time( NULL ) ) );
int los; int wylosowane[ 5 ];
for( int i = 0; i < 5; i++ ) { los = rand() % 10 + 1; while( liczba[ los ].czy_uzyta == true ) { los = rand() % 10 + 1; } liczba[ los ].czy_uzyta = true; wylosowane[ i ] = liczba[ los ].lic; }
|
|
pekfos |
» 2014-09-21 14:54:36 b =( cin.good() & !cin.fail() );
| pojedyńczy ampersand & to operator iloczynu bitowego. Powinno być &&. |
Użyty operator nie robi tu różnicy. Te połączenie w obu przypadkach działa tak samo i tak samo nie ma sensu. moim zdaniem można użyć tego
|
To nie ma większego sensu, a kod jest błędny. I nie można użyć - piszesz nie na temat.. ale czego bym nie wpisał to jako wylosowane liczby wypiuje mi 0 albo 1. |
Bo wypisujesz wylosowane indeksy, a nie elementy spod tych indeksów. |
|
« 1 » |