Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 18 - Generowanie liczb pseudolosowych

Ostatnio zmodyfikowano 2017-05-29 19:47
Autor Wiadomość
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:

C/C++
#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; //podgląd przypisanych liczb
    } while( licznik < 999 );
   
    int suma = 0;
    licznik = 0;
    do
    {
        suma = suma + liczba[ licznik ];
        licznik++;
       
       
    } while( licznik < 999 );
   
    cout << suma;
   
   
}
P-161729
Luq
» 2017-05-29 19:29:02
Wypisuj te liczby przed inkrementacją licznika
P-161734
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.

C/C++
#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; // tutaj taki mały trick - przypisanie zwraca wartość przypisywaną
        suma += liczba[ i ];
    }
    cout << suma;
    system( "pause" );
}
P-161735
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:
C/C++
#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; //podgląd przypisanych liczb
        licznik++;
       
    } while( licznik < 999 );
   
    int suma = 0;
    licznik = 0;
    do
    {
        suma = suma + liczba[ licznik ];
        licznik++;
       
       
    } while( licznik < 999 );
   
    cout << suma;
   
   
}
P-161738
« 1 »
  Strona 1 z 1