[C++] Mały problem z generatorem liczb losowych

0

Witam !
Mam następujący problem... stworzyłem program który symuluje rzut kostką. Możemy podać w programie ile razy chcemy rzucić kostką do gry. Jak wiadomo kostka ma wartości od 1 do 6. Problem pojawia się gdy zamierzam rzucić więcej niż 6 razy kostką - zwiesza się. Proszę o pomoc w znalezieniu problemu w moim programie. Z Góry dzięki za pomoc !

Kod programu :

#include <iostream> 
#include <ctime>


using namespace std; 

 
const int MaxLiczba = 6;

int main() 
{ 
    int unsigned IloscLiczb;  
    srand(static_cast<int>(time(NULL))); 
    cout<<"Ile razy rzucic kostka : ";
    cin >>IloscLiczb;
    unsigned Liczby[IloscLiczb]; 
    for (int i = 0; i < IloscLiczb;) 
           {
                 Liczby[i] = rand() % MaxLiczba+1; 
                 bool PowtarzaSie = false; 
                 for(int j = 0; j < i; ++j) 
                 {
                         if(Liczby[j] == Liczby[i]) 
                         {
                                 PowtarzaSie = true; 
                                 break; 
                         }
                 } 
                 if(!PowtarzaSie) ++i; 
           } 
           for(int i = 0; i < IloscLiczb; ++i) 
           cout << '\t' << Liczby[i];
           cout << '\n'; 
             int max = Liczby[0];
          
    for(int i = 0; i < IloscLiczb; ++i)
    if(Liczby[i] > max)
    max = Liczby[i];
    cout << "Najwieksza wartosc to: " << max << endl;
    system("pause"); 
    return 0; 
}
 
0

Żartujesz teraz? Twój algorytm losuje tylko UNIKALNE liczby (bo sprawdzasz czy już czasem dana liczba nie była wylosowana). Masz na kostce 6 możliwych wyników. Logiczne że jeśli będziesz chciał wylosować 7 różnych (!) liczb z 6 możliwych to sie zawiesi.

0

a pomożesz w zmianie tego algorytmu aby liczby losowane mogły się powtórzyć ?
dzięki za znalezienie błędu . Jestem początkujący w C++

0

dzięki twojej podpowiedzi wpadłem na rozwiązanie ale chciałbym jeszcze trochę usprawnić ten kod żeby był mniej skomplikowany.


#include <iostream> 
#include <ctime>


using namespace std; 

 
const int MaxLiczba = 6;

int main() 
{ 
    int unsigned IloscLiczb; 
    int Ile; 
    srand(static_cast<int>(time(NULL))); 
    cout<<"Ile razy rzucic kostka : ";
    IloscLiczb=6;
    cin >>Ile;
    unsigned Liczby[Ile]; 
    for (int i = 0; i < IloscLiczb;) 
           {
                 Liczby[i] = rand() % MaxLiczba+1; 
                 bool PowtarzaSie = false; 
                 for(int j = 0; j < i; ++j) 
                 {
                         if(Liczby[j] == Liczby[i]) 
                         {
                                 PowtarzaSie = true; 
                                 break; 
                         }
                 } 
                 if(!PowtarzaSie) ++i; 
           } 
           for(int i = 0; i < IloscLiczb; ++i) 
           cout << '\t' << Liczby[i];
           cout << '\n'; 
             int max = Liczby[0];
          
    for(int i = 0; i < IloscLiczb; ++i)
    if(Liczby[i] > max)
    max = Liczby[i];
    cout << "Najwyzszy wynik oczek :  " << max << endl;
    system("pause"); 
    return 0; 
} 
0
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

const int MaxLiczba = 6;
int main()
{
    int IloscLiczb;
    srand(static_cast<int>(time(NULL)));
    cout<<"Ile razy rzucic kostka : ";
    cin >>IloscLiczb;
    int* liczby = new int[IloscLiczb];
    for (int i = 0; i < IloscLiczb;i++)
    {
        liczby[i] = rand() % MaxLiczba+1;
        cout << liczby[i]<<" ";
    }
    cout << '\n';
    int max = liczby[0];
    for(int i = 0; i < IloscLiczb; ++i)
        if(liczby[i] > max)
            max = liczby[i];
    cout << "Najwieksza wartosc to: " << max << endl;
    delete[] liczby;
    return 0;
}
0

Jednak nie działa tak jak należy ale twój kod wygląda świetnie ! Zaraz sprawdzę i biorę się za dalszą robotę ! Dzięki Wielkie !

0

tak to jest jak się zrzyna kod i nie wie za co on odpowiada. Gdybyś napisał to sam, a nie tępo kopiował nie zadawałbyś takich pytań (a mówią, że głupich pytań nie ma).

0

staram się pojąć cały ten kod ale nie oszukujmy się ... sam bym nie napisał funkcji losowania więc wspieram się internetem lecz nie jest to bezmyślne kopiowanie... staram się zrozumieć .... próbowałbym sam ale skąd na to czas jak terminy gonią :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1