Rozdział 18 - Generowanie liczb pseudolosowych
Ostatnio zmodyfikowano 2017-05-29 19:47
Tinker Temat założony przez niniejszego użytkownika |
Rozdział 18 - Generowanie liczb pseudolosowych » 2017-05-29 18:48:58 Moim zadaniem jest napisać program, który wylosuje 999 liczb całkowitych z zakresu od 4 do 10 włącznie, wypisze te wartości na ekran, po czym zsumuje je i wynik wypisze na ekran. Program ma wykorzystywać tablicę, która zostanie najpierw wypełniona liczbami losowymi z określonego przedziału, a następnie wynik zostanie obliczony na podstawie zawartości całej tablicy. Nie miałem problemów z napisaniem funkcji generującej liczby losowe czy z zsumowaniem elementów tablicy. Problem pojawia się przy przypisaniu liczby losowej do każdego elementu. Wydaje mi się, że poprawnie zastosowałem pętle do...while , ale program przypisuje zupełnie inne liczby, niż te z zakresu od 4 do 10. Nie wiem dlaczego tak się dzieje. Czy ktoś miałby chęci do nakierowania mnie na właściwy tor? Tutaj kod: #include <iostream> #include <ctime> #include <cstdlib> using namespace std;
int liczbyLosowe() { srand( time( NULL ) ); return( rand() % 7 ) + 4; }
int main() { int liczba[ 999 ]; int licznik = 0; do { liczba[ licznik ] = liczbyLosowe(); licznik++; cout << liczba[ licznik ] << endl; } while( licznik < 999 ); int suma = 0; licznik = 0; do { suma = suma + liczba[ licznik ]; licznik++; } while( licznik < 999 ); cout << suma; }
|
|
Luq |
» 2017-05-29 19:29:02 Wypisuj te liczby przed inkrementacją licznika |
|
Kinexity |
» 2017-05-29 19:29:53 Nigdy nie pobieraj czasu do funkcji srand() zbyt często - pamiętaj(!) komputer liczy czas z dokładnością do 1 ms, ale procesor działa parę milionów razy szybciej niż zegar. I gdy wiesz ile razy będzie się wykonywała pętla, to lepiej użyj for niż do while. #include <iostream> #include <ctime> #include <cstdlib> using namespace std;
int liczbyLosowe() { return( rand() % 7 ) + 4; }
int main() { int suma = 0; int liczba[ 999 ]; srand( time( NULL ) ); for( int i = 0; i < 999; i++ ) { cout <<( liczba[ i ] = liczbyLosowe() ) << endl; suma += liczba[ i ]; } cout << suma; system( "pause" ); }
|
|
Tinker Temat założony przez niniejszego użytkownika |
» 2017-05-29 19:47:38 Użyłem do...while dlatego, że na obecnym poziomie kursu "nie poznałem" innych rodzajów pętli. Szczerze mówiąc świtało mi coś, że może mój program pobiera liczby losowe zbyt często, ale nie wpadłem na to proste rozwiązanie. Dzięki za pomoc! Temat zamykam. Wklejam poprawny kod: #include <iostream> #include <ctime> #include <cstdlib> #include <windows.h> using namespace std;
int liczbyLosowe() { return( rand() % 7 ) + 4; }
int main() { int liczba[ 999 ]; int licznik = 0; srand( time( NULL ) ); do { liczba[ licznik ] = liczbyLosowe(); cout << liczba[ licznik ] << endl; licznik++; } while( licznik < 999 ); int suma = 0; licznik = 0; do { suma = suma + liczba[ licznik ]; licznik++; } while( licznik < 999 ); cout << suma; }
|
|
« 1 » |