Rozdzial 21 Loowanie bez powtorzen
Ostatnio zmodyfikowano 2017-03-25 16:23
Chowan Temat założony przez niniejszego użytkownika |
Rozdzial 21 Loowanie bez powtorzen » 2017-03-25 15:18:14 Dlaczego wyrzuca mi dane z poza przedziału? #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int losowanie() { return( rand() % 10 ) + 1; } bool sprawdzanie( int liczba, int tablica[], int ile_liczb ) { if( ile_liczb <= 0 ) return false; int i = 0; while( i < ile_liczb ) { if( tablica[ i ] == liczba ) return false; i++; } return true; } int main() { srand( time( NULL ) ); int tablica[ 5 ]; for( int i = 0; i < 5; i++ ) { int a = losowanie(); if( sprawdzanie( a, tablica, i ) == true ) { tablica[ i ] = a; } } for( int i = 0; i < 5; i++ ) { cout << tablica[ i ] << endl; } return 0; } [ \c pp ] |
|
mateczek |
» 2017-03-25 15:42:15 po poprawkach #include <iostream> #include <ctime> using namespace std; int losowanie() { return( rand() % 10 ) + 1; } bool sprawdzanie( int liczba, int tablica[], int ile_liczb ) { for( int i = 0; i < ile_liczb; i++ ) { if( tablica[ i ] == liczba ) return false; } return true; } int main() { constexpr int rozmiar = 10; srand( time( NULL ) ); int tablica[ rozmiar ]; for( int i = 0; i < rozmiar; ) { int a = losowanie(); if( sprawdzanie( a, tablica, i ) == true ) { tablica[ i ] = a; i++; } } for( int i = 0; i < rozmiar; i++ ) { cout << tablica[ i ] << endl; } return 0; }
|
|
Chowan Temat założony przez niniejszego użytkownika |
» 2017-03-25 16:08:53 ta funkcja przekombinowana to z kursu bezpośrednio, ale dzięki bo ta Twoja dużo czytelniejsza. A mogę wiedzieć dlaczego zamieniłeś i<5 na i<rozmiar?? |
|
mateczek |
» 2017-03-25 16:23:56 A mogę wiedzieć dlaczego zamieniłeś i<5 na i<rozmiar?? |
Aby sprawdzić czy wylosuje dziesięć z dziesięciu. Chodziło mi o ostatnie losowanie, które musi wykonać się tyle razy aż w końcu trafi na ostatnią wolną cyfrę. Taki test. Wszystko po to by w jednym miejscu zmienić ilość losowanych liczb. ta funkcja przekombinowana to z kursu bezpośrednio
|
OK moje niedopatrzenie. bool sprawdzanie( int liczba, int tablica[], int ile_liczb ) { if( ile_liczb <= 0 ) return true; int i = 0; while( i < ile_liczb ) { if( tablica[ i ] == liczba ) return false; i++; } return true; } |
|
« 1 » |