[Zad. 21] Nieprawidłowe działanie programu losującego bez powtórzeń.
Ostatnio zmodyfikowano 2015-12-06 08:24
Raziel95 Temat założony przez niniejszego użytkownika |
[Zad. 21] Nieprawidłowe działanie programu losującego bez powtórzeń. » 2015-12-06 00:36:48 Witam. Mam problem z losowaniem liczb bez powtórzeń. Szukałem odpowiedzi w innych tematach dotyczących tego zadania. Niestety nie znalazłem w nich odpowiedzi. Proszę więc o pomoc. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
void podaj_liczby( int liczba[], int i ) { do { int cyfra; cin >> liczba[ i ]; i++; } while( i < 10 ); }
bool czy_byla( int x, int t[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( t[ i ] == x ) { return true; } i++; } while( i < ile ); return false; }
void wylosuj( int t[], int i ) { do { int losuj = rand() % 10 + 1; if( czy_byla( losuj, t, i ) == false ) { cout << t[ losuj ] << ", "; i++; } } while( i < 8 ); }
int main() { srand( time( NULL ) ); int tab[ 10 ]; int wylosowanych = 0; podaj_liczby( tab, 0 ); wylosuj( tab, wylosowanych ); system( "PAUSE" ); return 0; }
|
|
carlosmay |
» 2015-12-06 01:42:17 podaj_liczby( tab, 0 ); kiepski pomysł, void podaj_liczby( int liczba[], int i ) { do { int cyfra; cin >> liczba[ i ]; i++; } while( i < 10 ); }
traci na czytelności. Lepiej przekazać cały rozmiar i do niego porównywać licznik pętli. z tym, że nie przechowujesz wylosowanych liczb, tylko losowanie porównujesz do tablicy, z której losujesz. Utwórz drugą tablicę na to co wylosujesz i to z nią porównuj każdą kolejną wylosowaną. Jeśli nie ma w tablicy to dopisz. |
|
Raziel95 Temat założony przez niniejszego użytkownika |
» 2015-12-06 02:41:15 Chyba mi się udało ;) Jeszcze jakbyś mógł obejrzeć ;) #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
void podaj_liczby( int liczba[], int i ) { do { cin >> liczba[ i ]; i++; } while( i < 10 ); }
bool czy_byla( int x[], int l, int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( x[ i ] == l ) return true; i++; } while( i < ile ); return false; }
void wylosuj( int t[], int i, int t2[] ) { int licznik = 0; do { int liczba = rand() % 9 + 1; t2[ licznik ] = liczba; if( czy_byla( t2, liczba, i ) == false ) { cout << t[ liczba ] << ", "; i++; licznik++; } } while( i < 8 && licznik < 8 ); }
int main() { srand( time( NULL ) ); int tab[ 10 ]; int tab2[ 8 ]; int wylosowanych = 0; podaj_liczby( tab, 0 ); wylosuj( tab, wylosowanych, tab2 ); system( "PAUSE" ); return 0; }
P.S Czemu to jest kiepski pomysł? void podaj_liczby( int liczba[], int i ) { do { cin >> liczba[ i ]; i++; } while( i < 10 ); }
Próbowałem to zrobić tak jak mówiłeś jednak po wpisaniu cyfr nic się dalej nie działo. |
|
carlosmay |
» 2015-12-06 08:24:17 void podaj_liczby( int liczba[], int rozmiar ) { int i = 0; do { cin >> liczba[ i ]; i++; } while( i < rozmiar ); }
Jeśli działa poprawnie to OK. |
|
« 1 » |