Czy dobrze napisałem parametry przy funkcji rand(), chodzi o to by losowane liczby były z zakresu 100 - 999 włącznie
int liczba = rand() % 100 + 900;
Czy dobrze napisałem parametry przy funkcji rand(), chodzi o to by losowane liczby były z zakresu 100 - 999 włącznie
int liczba = rand() % 100 + 900;
teraz masz od 900 do 999
Ty tak poważnie? Losujesz coś i dodajesz do tego 900. Jak chcesz uzyskać coś mniejszego od 900?
Shalom napisał(a):
Ty tak poważnie? Losujesz coś i dodajesz do tego 900. Jak chcesz uzyskać coś mniejszego od 900?
liczby ujemne?
Poprawiam:
int liczba = rand() % 900 + 100
Nie używaj rand jeśli nie musisz: http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
Masz <random>
z std::uniform_int_distribution
:
mt19937 gen{random_device{}()};
uniform_int_distribution<> dis(100,999);
int val = dis(gen);
A jeszcze chciałem napisać taki program co losuje liczby od 100 do 999 włącznie i wypisze wszystkie 899 losowania bez powtórzeń, ale nie wiem czemu jak wypisze pierwszą liczbę to dalej nie wypisuje kod:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
bool Prawda(int liczba, int tab[], int ile);
int main()
{
int tablica[999];
srand(time(NULL));
for(int i = 0; i < 999;)
{
int liczba = rand() % 900 + 100;
if(Prawda(liczba,tablica,i) == false)
{
tablica[i] = liczba;
cout << liczba << endl;
i++;
}
}
system("pause");
}
bool Prawda(int liczba, int tab[], int ile)
{
for(int i = 0; i < ile; i++)
{
tab[i] == liczba;
return true;
}
return false;
}
A jeszcze chciałem napisać taki program co losuje liczby od 100 do 999 włącznie i wypisze wszystkie 899 losowania bez powtórzeń,
Wrzuć 900 liczb kolejno do kontenera, np std::vector
, potem std::shuffle
i gotowe.
Po pierwszym przepiegu pętli w funkcji Prawda (ciekawa nazwa swoją drogą) wychodzisz (zwracasz true)
bool Prawda(int liczba, int tab[], int ile)
{
for(int i = 0; i < ile; i++)
{
tab[i] == liczba;
return true;
}
return false;
}
Nie sprawdzasz warunku, tylko wykonujesz porównanie, po czym po prostu zwracasz true
. Poprawione:
bool Wystepuje(int liczba, int tab[], int ile)
{
for(int i = 0; i < ile; i++)
{
if(tab[i] == liczba)
return true;
}
return false;
}
Ale można to skrócić do: (pisane z pamięci, ale powinno być ok)
bool Wystepuje(int liczba, int tab[], int ile)
{
return any_of(tab, tab+ile, [=](int val) { return val == liczba; });
}
ewentualnie:
bool Wystepuje(int liczba, int tab[], int ile)
{
return any_of(tab, tab+ile, bind(equal_to<int>, liczba, placeholders::_1));
}