pytalski Temat założony przez niniejszego użytkownika |
[C++] Wygenerowanie odpowiednich liczb losowych » 2014-12-27 22:27:10 Witam wszystkich :) Jestem początkującym w programowaniu i mam problem. Chcę wygenerować odpowiednie liczby losowe,niepodzielne przez 10. Niby mój kod działa, ale co jakiś czas pojawia się liczba minusowa(-858993460).Co jest nie tak? #include <iostream> #include <ctime> #include <stdlib.h> #include <conio.h> using namespace std; int main() { int a[ 200 ], d, g, z, u; cout << "Podaj ile elementow:" << endl; cin >> z; cout << "Podaj zakres generowanych wartosci <d,g>:"; cin >> d >> g; srand( time( 0 ) ); for( int i = 0; i < z; i++ ) { u = d + rand() %( g - d + 1 ); if( u % 10 != 0 ) a[ i ] = u; cout << i + 1 << "." << a[ i ] << endl; } _getch(); return 0; |
|
darko202 |
» 2014-12-27 22:42:39 problem jest w if( u % 10 != 0 ) a[ i ] = u; co jest w tablicy który pokazujesz jak if jest prawdą |
|
pytalski Temat założony przez niniejszego użytkownika |
» 2014-12-27 22:55:46 W tablicy jest liczba, której reszta jest z zakresu 1...9 (czyli jest niepodzielna przez 10). Więc nie wiem o co chodzi z tą ujemną liczbą :| |
|
lectre |
» 2014-12-27 23:02:42 Zastanów się co zrobi program jeśli wylosowana liczba jest podzielna przez 10. A w zasadzie czego nie zrobi. Nie przypisze odpowiedniej komórce tablicy wylosowanej liczby. Zmienne lokalne, który nie zostały zdefiniowane inaczej przechowują tak zwane "śmieci". Stąd ta dziwna liczba w wynikach. Może lepiej byłoby użyć pętli do while? do { } while( wylosowana % 10 == 0 )
|
|
pytalski Temat założony przez niniejszego użytkownika |
» 2014-12-27 23:27:33 @lectre Yhym, czyli tu był pies pogrzebany. Myślałem, że w przypadku gdy nie ma else a warunek jest fałszywy to następuje pomijanie zapisu. Co do do while to raczej nie. Zależy mi właśnie, aby tyle elementów ile użytkownik poda, tyle było niepodzielnych przez 10. Jak można to spełnić? |
|
darko202 |
» 2014-12-27 23:43:09 zwiększyłeś iterator i++ w for, a tego nie chcesz nie chcesz wyświetlać wtedy tablicy
pomyśl to co można zrobić ?
|
|
lectre |
» 2014-12-27 23:48:44 Myślałem, że w przypadku gdy nie ma else a warunek jest fałszywy to następuje pomijanie zapisu. Jeśli warunek jest nie jest spełniony to instrukcja (lub blok instrukcji ujęty w klamry) nie jest wykonywana. Tak też jest w twoim programie. Nie miałem na myśli abyś usunął pętlę for. Ona jest jak najbardziej w porządku. Miałem na myśli usprawnienie programu w ten sposób: for( int i = 0; i < z; i++ ) { do { u = d + rand() %( g - d + 1 ); a[ i ] = u; } while( u % 10 == 0 ); cout << i + 1 << "." << a[ i ] << endl; }
Jak działa taki zapis: Ano program losuje liczby dla każdej komórki, aż zdarzy mu się wylosować 10. Wtedy powtarza losowanie, ale nadal dla tej samej komórki także wszystkie elementy tablicy zostaną wylosowane. |
|
pytalski Temat założony przez niniejszego użytkownika |
» 2014-12-28 00:15:20 @lecture Wielkie dzięki :) Czy dobrze rozumiem, że w przypadku, gdy pierwsza wylosowana liczba będzie podzielna przez 10 to zostanie ona zapisana w tablicy?
@darko202 Nie wiem czy dobrze myślę, ale chodzi Ci, by lekko oszukać generowanie liczb i jako else do if zapisać np. i--? Tylko co by się wydarzyło, gdyby pierwsza liczba była podzielna przez 10 - wysypanie programu? |
|
« 1 » 2 |