Zadanie z lekcji nr 18. wydobywane liczby pseudolosowe ciagle takie same.
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Zadanie z lekcji nr 18. wydobywane liczby pseudolosowe ciagle takie same.

AutorWiadomość
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.




 
C/C++
#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;
}
P-177231
» 2020-06-29 20:04:20
C/C++
int losowanie_liczby( int ile_liczb, int od_kad )
{
    int liczba =( rand() % ile_liczb ) + od_kad;
    return liczba;
}

do
{
    //tablica[ licznik ] = rand() % 7 + 4;
    tablica[ licznik ] = losowanie_liczby( 7, 4 );
    cout << licznik + 1 << "\t" << tablica[ licznik ] << endl;
    licznik++;
} while( licznik < 15 );

P-177232
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.
P-177233
» 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.
P-177234
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.
P-177235
» 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
 
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib> //for std::srand

using namespace std;

int losowanie_liczby( int ile_liczb, int od_kad )
{
    int liczba =( rand() % ile_liczb ) + od_kad;
    return liczba;
}

int main()
{
    //Creation (draw) seed
    //srand(static_cast<unsigned>(time(0)));
    //srand( time( NULL ) );
    std::srand( std::time( 0 ) );
   
    //used variables
    const int max_tab_size = 3;
    int tablica[ max_tab_size ];
    int counter = 0, sum = 0;
    char ready;
    bool loop = true;
   
    while( loop )
    {
        //cout << "\ntime(NULL) := " << time(NULL) << endl; //for test, comment later
        cout << "\nLosowac liczby? \'y\' lub \'Y\', inny znak konczy program: ";
        cin >> ready;
        if( ready == 'Y' || ready == 'y' )
        {
            loop = true;
            do
            {
                //tablica[ licznik ] = rand() % 7 + 4;
                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;
           
            //reset variables
            counter = 0;
            sum = 0;
           
        }
        else if( ready != 'Y' || ready != 'y' )
        {
            loop = false;
            break; //optional
        }
    }
    cout << endl;
    cout << "Koniec programu. Bye!" << endl;
    getchar();
    return 0;
}
P-177239
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.
P-177241
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!


C/C++
#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;
}
.
P-177243
« 1 »
 Strona 1 z 1