Rozdział 21, zadanie 2
Ostatnio zmodyfikowano 2017-02-16 23:08
Janusz2 Temat założony przez niniejszego użytkownika |
Rozdział 21, zadanie 2 » 2017-02-16 20:41:59 Z pozoru program działa jak należy. Jednak gdy próbuję wprowadzić cyfrę 8 jako drugą lub trzecią program zwraca mi informację, że liczba już była wprowadzona. Cyfrę 0 mogę wprowadzić jedynie jako pierwszą lub ostatnią. #include <iostream> #include <cstdlib> #include <ctime>
bool sprawdzamA( int kandydat, int wpisana[], int x ) { int z = 0; if( x <= 0 ) return true; do { if( kandydat == wpisana[ z ] ) return false; z++; } while( z < 10 ); return true; }
int wpisuje( int wpisana[], int x ) { int kandydat; std::cout << "Wpisz " << x + 1 << " liczbe" << std::endl; do { std::cin >> kandydat; if( sprawdzamA( kandydat, wpisana, x ) != true ) std::cout << "Kazda liczba musi byc inna" << std::endl; } while( sprawdzamA( kandydat, wpisana, x ) != true ); return kandydat; }
int losuje( int wpisana[] ) { return wpisana[ rand() % 10 ]; }
bool sprawdzamB( int los, int wylosowana[], int y ) { int w = 0; if( y <= 0 ) return true; do { if( los == wylosowana[ w ] ) return false; w++; } while( w < 8 ); return true; }
void wypisuje( int wylosowana[] ) { int x = 0; do { std::cout << wylosowana[ x ] << ","; x++; } while( x < 8 ); } int main() { srand( time( NULL ) ); int wylosowana[ 8 ]; int wpisana[ 10 ]; int x = 0; int y = 0; int los; do { wpisana[ x ] = wpisuje( wpisana, x ); x++; } while( x < 10 ); do { los = losuje( wpisana ); if( sprawdzamB( los, wylosowana, y ) == true ) { wylosowana[ y ] = los; y++; } } while( y < 8 ); wypisuje( wylosowana ); return 0; } |
|
mateczek |
» 2017-02-16 22:01:30 przekombinowałeś trochę bool sprawdzam( int los, int wylosowana[], int y ) { for( int i = 0; i < y; i++ ) if( los == wylosowana[ i ] ) return true; return false; }
int wpisuje( int wpisana[], int x ) { int kandydat; std::cout << "Wpisz " << x + 1 << " liczbe" << std::endl; cin >> kandydat; while( sprawdzam( kandydat, wpisana, x ) ) { std::cout << "Kazda liczba musi byc inna" << std::endl; std::cin >> kandydat; } return kandydat; }
int losuje( int wpisana[] ) { return wpisana[ rand() % 10 ]; }
void wypisuje( int wylosowana[] ) { int x = 0; do { std::cout << wylosowana[ x ] << ","; x++; } while( x < 8 ); } int main() { srand( time( NULL ) ); int wylosowana[ 8 ]; int wpisana[ 10 ]; int x = 0; int y = 0; int los; do { wpisana[ x ] = wpisuje( wpisana, x ); x++; } while( x < 10 ); do { los = losuje( wpisana ); if( !sprawdzam( los, wylosowana, y ) ) { wylosowana[ y ] = los; y++; } } while( y < 8 ); wypisuje( wylosowana ); return 0; } |
|
Janusz2 Temat założony przez niniejszego użytkownika |
» 2017-02-16 23:08:46 Dzięki za odpowiedź, Twój zapis jest dużo prostszy, nie ma w nim problemu zer i ósemek. Dzięki niemu poznałem nowe działanie niektórych elementów. Po wnikliwej analizie wystarczyło zmienić "10" na "x" w 17 wersie i wszystko śmiga ;) |
|
« 1 » |