khalul Temat założony przez niniejszego użytkownika |
Zadanie z lekcji nr 18. wydobywane liczby pseudolosowe ciagle takie same. » 2020-06-29 17:01:17 ::rand nie losuje nowych liczb. Zbiór który wyświetla jest stały. Czy to mankament ::rand/srand? Próbuję robić zadania po kolei i moje pytanie pojawia się bo chcę upewnić się,że wina nie leży po stronie złego kodu, np mój srand jest w złym miejscu. Próbowałem różnych konfiguracji. Szukałem na forum. Używam code blocks na win 10. #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int losowanie_liczby( int ile_liczb, int od_kad ) { int liczba =(::rand() % ile_liczb ) + od_kad; return(::rand() % ile_liczb ) + od_kad; }
int main() { srand( time( NULL ) ); int tablica[ 15 ]; int licznik = 0; int ile_liczb; int od_kad; do { tablica[ licznik ] = losowanie_liczby( 7, 4 ); licznik++; cout << "to nie wyglada dobrze: " << licznik << " to: \t" << tablica[ licznik ] << endl; } while( licznik < 15 ); return 0; }
|
|
nanoant20 |
» 2020-06-29 20:04:20 int losowanie_liczby( int ile_liczb, int od_kad ) { int liczba =( rand() % ile_liczb ) + od_kad; return liczba; }
do { tablica[ licznik ] = losowanie_liczby( 7, 4 ); cout << licznik + 1 << "\t" << tablica[ licznik ] << endl; licznik++; } while( licznik < 15 );
|
|
khalul Temat założony przez niniejszego użytkownika |
liczby nadal stoją w miejscu. » 2020-06-29 21:43:25 Dziękuję za to że poświęciłeś swój czas żeby poprawić moj kod. Po zastosowaniu zmian wynik dalej wychodzi jak w temacie. Liczby się nie zmieniają. To jest sedno tego posta. Z góry dziękuję za odpowiedź na temat. |
|
jankowalski25 |
» 2020-06-29 22:11:03 Sprawdź, czy wartość time( NULL ) jest przy dwóch uruchomieniach taka sama. Jeśli jest, to zobacz, czy jak dasz rebuild, to czy ta wartość się zmieni. |
|
khalul Temat założony przez niniejszego użytkownika |
» 2020-06-29 23:42:39 Mam nadzieje, że dobrze zrozumiałem, wypisałem cout << time(NULL) << robiłem rebuild i wyswietlałem kilka razy, za każdym razem ta wartość się zmienia, natomiast liczby losowane rand pozostają takie same. |
|
nanoant20 |
» 2020-06-30 08:36:54 Utwórz nowy projekt, wstaw poniższy listing i sprawdź wyniki Jeżeli nie ma żadnych zmian w wynikach to napisz którą wersję code::blocks'a używasz, czy z wbudowanym kompilatorem, czy dołączyłeś inny kompilator #include <iostream> #include <ctime> #include <cstdlib>
using namespace std;
int losowanie_liczby( int ile_liczb, int od_kad ) { int liczba =( rand() % ile_liczb ) + od_kad; return liczba; }
int main() { std::srand( std::time( 0 ) ); const int max_tab_size = 3; int tablica[ max_tab_size ]; int counter = 0, sum = 0; char ready; bool loop = true; while( loop ) { cout << "\nLosowac liczby? \'y\' lub \'Y\', inny znak konczy program: "; cin >> ready; if( ready == 'Y' || ready == 'y' ) { loop = true; do { tablica[ counter ] = losowanie_liczby( 7, 4 ); cout << "tablica[" << counter << "] " << tablica[ counter ] << endl; sum = sum + tablica[ counter ]; counter++; } while( counter < max_tab_size ); cout << endl; cout << "Suma wszystkich liczb wynosi := " << sum << endl; counter = 0; sum = 0; } else if( ready != 'Y' || ready != 'y' ) { loop = false; break; } } cout << endl; cout << "Koniec programu. Bye!" << endl; getchar(); return 0; }
|
|
khalul Temat założony przez niniejszego użytkownika |
» 2020-06-30 12:46:21 Dziękuję nanoant20 za poświęcony czas i pomoc. Ustalenie stałej dla rozmiaru tablicy sprawiło, że liczby się zmieniają, i nie jak w moim przypadku, zamiast jednej, na każdy element tablicy losuje się kilka liczb(bo taki problem też występował). Pozdrawiam serdecznie. Dzisiaj zamknę temat.
|
|
khalul Temat założony przez niniejszego użytkownika |
mój poprawiony kod » 2020-06-30 13:24:19 Tu mój poprawiony kod który działa. Jak wyżej ustalona z góry statyczna dla tablicy. Dzięki! #include <iostream> #include <ctime> #include <cstdlib> using namespace std;
int draw( int many, int start ) { int number; number =( rand() % many ) + start; return number; }
int main() { srand( time( NULL ) ); static int board_size = 15; int counter = 0, sum = 0; int board[ board_size ]; do { board[ board_size ] = draw( 7, 4 ); cout << "[ " << counter << " ] \t" << board[ board_size ] << endl; counter++; sum = sum + board[ board_size ]; } while( counter < board_size ); cout << "Wyswietl sume elementow tablicy: \t" << sum; return 0; } . |
|
« 1 » |