Rozdział 21 zadanie 2
Ostatnio zmodyfikowano 2018-03-13 23:38
Robinsoncruzoe Temat założony przez niniejszego użytkownika |
Rozdział 21 zadanie 2 » 2018-03-13 10:21:40 Przyznaje, że liczby losowe i losowe bez powtórzen to pierwszy temat z kursu który sprawia mi trudności właśnie próbuję napisać samodzielnie program do zadanka drugiego i na bierząco go kompiluje żeby sprawdzić czy wszystko idzie dobrze no i jest problem a wpatruje się w ten kod od godziny bez rezultatów i nie mam pojęcia czemu nie wychwytuje tego, że wpisuje drugi raz tą samo liczbę. Proszę o podpowiedź: #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
bool sprawdzaniewpisywania( int t[], int x ) { int i = 0; do { if( t[ i ] == x ) return false; i++; } while( i < 10 ); return true; }
void wpisywanie( int t[] ) { int i = 0, x; do { cout << "Podaj " << i + 1 << " liczbe." << endl; cin >> x; if( sprawdzaniewpisywania( t, x ) == true ); t[ i ] = x; i++; } while( i < 10 ); }
int main() { srand( time( NULL ) ); int tablica[ 10 ]; int wylosowame[ 8 ]; wpisywanie( tablica ); int i = 0; do { cout << tablica[ i ] << endl; i++; } while( i < 10 ); return 0; }
|
|
Monika90 |
» 2018-03-13 10:25:42 if( sprawdzaniewpisywania( t, x ) == true );
O jeden średnik za dużo. |
|
Robinsoncruzoe Temat założony przez niniejszego użytkownika |
średnik » 2018-03-13 10:28:42 Dziękuję Monika, jednak pomimo braku średnika nadal można wpisywać dwie takie same liczby. Co jeszcze może być nie tak? |
|
Monika90 |
» 2018-03-13 10:36:39 Raczej tak powinno być: if( sprawdzaniewpisywania( t, x ) == true ) { t[ i ] = x; i++; }
czyli zwiększasz i tylko wtedy gdy dopisałeś liczbę. |
|
Robinsoncruzoe Temat założony przez niniejszego użytkownika |
» 2018-03-13 11:03:10 Pomogło :) Dzięki wielkie za pomoc :)) EDIT taki, że brnę dalej no i stworzyłem dalszą część która ma losować liczby z tej 10 wyrazowej tablicy i zapisywać je do tej 8 wyrazowej narazie zrobiłem to bez funkcji która ma sprawdzać czy się nie powtarzają, ale niestety jest jakiś problem bo sobie kompiluje to i wypisuje na ekran co mi sie zapisało do tablicy z wylosowanymi i za każdym uruchomieniem programu zapisuje mi inną liczbę ale do każdej komórki taką samą. Ktoś wie czemu? #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
bool sprawdzaniewpisywania( int t[], int x ) { int i = 0; do { if( t[ i ] == x ) return false; i++; } while( i < 10 ); return true; }
void wpisywanie( int t[] ) { int i = 0, x; do { cout << "Podaj " << i + 1 << " liczbe." << endl; cin >> x; if( sprawdzaniewpisywania( t, x ) == true ) { t[ i ] = x; i++; } } while( i < 10 ); }
void losowanie( int w[], int t[], int x ) { int i = 0; x = rand() % 10; do { w[ i ] = t[ x ]; i++; } while( i < 8 ); }
int main() { srand( time( NULL ) ); int tablica[ 10 ]; int wylosowane[ 8 ]; int x; wpisywanie( tablica ); losowanie( wylosowane, tablica, x ); int i = 0; do { cout << tablica[ i ] << endl; i++; } while( i < 10 ); cout << endl << endl; i = 0; do { cout << wylosowane[ i ] << endl; i++; } while( i < 8 ); return 0; }
|
|
DieG |
» 2018-03-13 21:49:19 W funkcji losowanie() używasz funkcji rand() tylko raz przed wejściem do pętli, czyli w pętli wykorzystywany jest tylko ten wylosowany element tablicy. x = rand() % 10; do { w[ i ] = t[ x ]; i++; } while( i < 8 );
Podczas dalszej pracy nad przykładem zastanów się, czy któraś z już napisanych funkcji może okazać się pożyteczna w dalszej części programu. Często takie pytania oszczędzają pisania nadmiernej ilości kodu. |
|
Robinsoncruzoe Temat założony przez niniejszego użytkownika |
Dziękuję » 2018-03-13 23:38:35 Dzięki DieG za podpowiedź :) |
|
« 1 » |