Skocz do zawartości
ania1210

Tablice w c++ (generator liczb Lotto)

Rekomendowane odpowiedzi

Czy ktoś mógłby pomóc mi w jak najprostszy sposób wytłumaczyć jak zrobić, aby losowane liczby się nie powtarzały? Wiem, że trzeba to zrobić za pomocą tablic, ale kompletnie nie wiem jak się za to zabrać.

 

//program Lotto

#include <iostream>

#include <time.h>

#include <stdlib.h>

#include <windows.h>

 

using namespace std;

main ()

{

 

int liczba, i;

 

char odp;

do

{

cout<<"Program losuje 6 liczb w przedziale od 1 do 49 "<<endl;

cout<<"Twoje wylosowane liczby to: "<<endl;

srand(time(NULL));

 

for ( i=1; i<=6; i++ )

{

liczba=(rand()%49) +1;

Sleep(1000);

cout<<liczba<<endl;

}

 

cout<< "------------------------" <<endl;

cout<< "Czy zakonczyc? t/n" <<endl;

cin>>odp;

}

while (odp=='n');

return 0;

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Najprościej? Sprawdzaj czy już wylosowałeś taką liczbę.

A użycie do tego tablic zalatuje pamięciowym śmieciarstwem. uint64_t w zupełności wystarczy.

Edytowane przez barneyPL

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zrobiłam tak, ale muszę mieć gdzieś błąd bo losowane liczby nie są z przedziału od 1 do 49 :mad:

//program Lotto

#include <iostream>

#include <time.h>

#include <stdlib.h>

#include <windows.h>

 

using namespace std;

main ()

{

 

int liczba, i, liczby[6];

bool wystapil[6] = {false};

 

char odp;

do

{

cout<<"Program losuje 6 liczb w przedziale od 1 do 49 "<<endl;

cout<<"Twoje wylosowane liczby to: "<<endl;

srand(time(NULL));

 

for ( i=1; i<=6; i++ )

{

liczba=(rand()%49) +1;

 

liczby=liczba;

} while(wystapil[liczba] == true);

wystapil[liczba] = true;

 

 

for (int i = 0; i<=6; i++)

cout << liczby <<endl;

cout << endl;

 

cout<< "------------------------" <<endl;

cout<< "Czy zakonczyc? t/n" <<endl;

cin>>odp;

}

while (odp=='n');

return 0;

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  1. Zacznij w końcu umieszczać kod w znacznikach code. Zaznaczasz wklejony w post kod i klikasz znaczek <> na górze edytora.
  2. Sprawdź w które miejsca w tablicy wstawiasz wylosowane liczby, a z których je odczytujesz.
  3. Co się stanie, jeśli wylosujesz, przykładowo, liczbę 17? W jaki sposób będzie sprawdzone, czy ta liczba była już wylosowana? Czy sprawdzenie się uda?

Zacznij od tego, później kolejne kroki.

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Przed wylosowaniem pierwszej liczby tworzysz tablicę. (Może mieć dynamicznie przydzielaną wielkość)

 

Pierwszą liczbę normalnie losujesz i od razu wstawiasz do tablicy.

 

Dla drugiej i każdej następnej wykorzystujesz taki algorytm.

 

1)Losujesz liczbę

2)Za pomocą pętli sprawdzasz, czy w tablicy nie ma już takiej samej (równej wylosowanej) liczby

3)Jeżeli była już ta sama liczba to przechodzisz do punktu nr 1 w tym algorytmie

4)Jeżeli nie było już takiej samej liczby to wstawiasz wylosowaną do tablicy

 

Ogólnie to musisz zastosować 2 pętle albo 1 pętlę i intrukcję skoku goto.

 

Jeżeli losujesz liczby z jakiegoś konkretnego przedziału to możesz utworzyć tablicę pomocniczą dwuwymiarową (macierz)

W pierwszym wierszu dostępne do losowania liczby, w liczby opisujące występowanie.

Tutaj algorytm będzie taki.

 

1)Losujesz liczbę

2)Za pomocą pętli sprawdzasz, czy w pole w tablicy o współrzędnych [liczba][1] ma wartość 0

3)Jeżeli ma wartość 0 to powiększasz wartość o 1 i dodajesz liczbę do tablicy wyjściowej

4)Jeżeli ma wartość różną od 0 to wracasz do punktu nr 1 w tym algorytmie.

 

 

Ogólnie to można zrobić na kilka, jeżeli nie kilkanaście sposobów. - Z tablicą pomocniczą lub bez niej.

 

uwaga Tablice w C/C++ są indeksowane od 0.

 

W tym drugim algorytmie to np. lewe górne pole to współrzędne [0][0]

 

Edit: Samo losowanie można zrobić pobierając czas systemowy jako ziarno ciągu pseudolosowaego i brać liczby z tego ciągu. Tak najprościej.

Edytowane przez Pecet256

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...