Losowanie liczb z zakresu 100-999

0

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;
0

teraz masz od 900 do 999

0

Ty tak poważnie? Losujesz coś i dodajesz do tego 900. Jak chcesz uzyskać coś mniejszego od 900?

0
Shalom napisał(a):

Ty tak poważnie? Losujesz coś i dodajesz do tego 900. Jak chcesz uzyskać coś mniejszego od 900?

liczby ujemne?

0

Poprawiam:

 int liczba = rand() % 900 + 100
2

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);

http://melpon.org/wandbox/permlink/OepqlTVVdduQdQOw

0

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;
} 
2

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.

2

Po pierwszym przepiegu pętli w funkcji Prawda (ciekawa nazwa swoją drogą) wychodzisz (zwracasz true)

2
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));
} 

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