Losowanie dopóki nie wylosuje się żadna liczba C++


(Ollo98) #1

Siemka chciałem napisać krótką funkcje która:

 

  1. Losuje liczbę od 1 do 2.

  2. Jeżeli dana liczba to 1 to robi się kolejne losowanie dopóki liczba będzie różna od 1. :slight_smile:

    - Jeżeli dana liczba to 2 to koniec.

 

To jest mój kod który nie działa. :slight_smile:

int losowa;
losowa=rand()%2+1;

if(losowa==1)
{
  while(losowa!=1)
   { 
   losowa=rand()%2+1;
   }
}

Próbowałem wiele sposobów ale nie działało, może zły algorytm ? Nie wiem, z góry dziękuję za pomoc. :slight_smile:

 

 


(Drobok) #2

Twoje pętla wyklucza się z if, więc jeśli if jest 1 to pętla jest 1, a że chcesz różne to kończysz pętlę

A jeśli pętla jest 2, to pomijasz pętlę bo jest wewnątrz if

 

PS if nie jest potrzebny skoro sprawdzasz warunek na początku pętli.


(Pablo_Wawa) #3

Prostszy kod:

int losowa;

do {
  losowa=rand()%2+1;
} while(losowa==1);

Przed działaniem na liczbach pseudolosowych warto zainicjować tzw. zarodek w celu zwiększenie losowości:

srand(time(NULL));

(enedil) #4

 

“Zwiększenie losowości”, to mało powiedziane.

Bez tego, funkcja rand(), podczas danego wykonania programu, zawsze zwróci tę samą wartość, ergo program albo zadziała za pierwszym obrotem pętli, albo nigdy się nie skończy.


(Pablo_Wawa) #5

@enedil: chyba nie. Chodzi o to, że nie zainicjowany (losowo - np. czasem bieżącym) generator liczb pseudolosowych wygeneruje za każdym uruchomieniem ten sam ciąg liczb, a nie że to będą te same liczby.