Problem z srand'em c++

0

Witam,
mam problem z funkcją srand, która w moim skrypcie ma sprawić, by liczby nie powtarzały się przy kolejnym kompilowaniu. Funkcja ta działa, lecz spowalnia znacznie proces kompilowania. Nie wiem czy to wina źle napisanego skryptu czy źle użytej funkcji. Będę wdzięczna za rady.

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <ctime>
#include <cstdlib>


using namespace std;
int main()
{
    int a, kupon, tab[6], wybor;
cout<<"Lotto - chybil trafil (generowanie liczb za pomoca maszyny)"<<endl;
cout<<"Przedzial 1-49"<<endl;
    cout<<"Ilosc zakladow:"; cin>>a;
        system ("cls");

 for (int x=1; x<=a; x++)
    {
    for(int i=0; i<6; i++ )
    {
            srand(time(0));
    kupon = rand() % 49 + 1;
    int powtarzenieLiczb=0;
    for(int j=0; j<i; j++)
    if(tab[j]==kupon)
    powtarzenieLiczb=1;
    if(powtarzenieLiczb)
    i--;
    else
    tab[i] = kupon;

    }
    cout<<"Zaklad "<<x<<": ";
    for(int i=0; i<6; i++){
    cout<<tab[i]<<"  ";
    }
    cout<<endl;
}
  {

   cout<<"Wygrales?"<<endl;
    cout << "[1] Tak" << endl;
    cout << "[2] Nie" << endl;
    cin >> wybor;
}
                switch( wybor )
                {
            case 1:
			cout << "Gratulacje! Zglos sie po wygrana! "<<endl;
			break;
			case 2:
			cout << "Sprobuj jeszcze raz! Powodzenia!"<<endl;
			break;
 }

    return 0;
}
0

Spowalnia proces kompilowania?

2
nickichvj napisał(a):

Witam,

mam problem z funkcją srand, która w moim skrypcie ma sprawić, by liczby nie powtarzały się przy kolejnym kompilowaniu. Funkcja ta działa, lecz spowalnia znacznie proces kompilowania.

Skrypty się nie kompiluje.
srand(time(0)); - użyj raz na początku main'a (nie w pętli).
Użyty przez ciebie algorytm losowania 6/49 nie jest równomierny.
Najprościej wypełnij tablicę liczbami 1..49, odpal random_szuffle, użyj pierwsze 6 elementów.

0

@lion137: żle to nazwałam - jestem zielona w tym temacie, więc popełniam dużo błędów. Bez sranda wszystkie zakłady są od razu wypisywane, a z srandem po dłuższym czasie wypisuje jeden za drugim.

0

@_13th_Dragon: dzięki wielkie za pomoc, już działa tak jak należy ! Błędy wynikają z moich początków z pisaniem skryptów, ale co dzień uczę się czegoś nowego i dowiaduje się jak ich nie popełniać :)

1
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
	const int MaxValue=49;
	const int RndCount=6;
	srand(time(0));
	cout<<"Ile? ";
	int count;
	if(cin>>count)
	{
		int tb[MaxValue];
		for(int i=0;i<MaxValue;++i) tb[i]=i+1;
		for(int row=1;row<=count;++row,cout<<endl)
		{
			for(int k=0;k<RndCount;++k) swap(tb[k],tb[k+(rand()%(MaxValue-k))]);
			cout<<setw(2)<<row<<":";
			for(int k=0;k<RndCount;++k) cout<<' '<<setw(2)<<tb[k];
		}
	}
	return 0;
}

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