Pseudolosowe liczby, ale tylko 4 cyfrowe

0

Witam
Próbuję od wczoraj wymyślić jak "pseudolosować" liczby powiedzmy 4cyfrowe.

Coś kombinuję w ten sposób, żeby jakoś każdą z osobna dać w tablicę i po po prostu połączyć, ale jestem pewny, że jest jakiś prostszy sposób.

Jakby ktoś mi w tym pomógł to byłbym wdzięczny.

EDIT:
Dodam jeszcze, że nie satysfakcjonuje mnie (przedział od 1 do 9 +1000 ) :p bo zawsze początek będzie ten sam

2

A czy nie możesz po prostu skorzystać z wbudowanego w standardową bibliotekę funkcji losowania? I zwyczajnie wylosować liczby z zakresu 1000-9999, bo o ile kojarzę, to wszystkie 4-cyfrowe właśnie się zawierają w tym przedziale :P

4
#include <iostream>
#include <random>
int main()
{
    std::random_device rd; // obtain a random number from hardware
    std::mt19937 eng(rd()); // seed the generator
    std::uniform_int_distribution<> distr(25, 63); // define the range

    for(int n=0; n<40; ++n)
        std::cout << distr(eng) << ' '; // generate numbers
}
0

Jak widać, jestem początkujący :p

@carrato

Mógłbyś mi to rozpisać ; /

          srand(time(NULL));
          liczba = rand()%(????? :( ????);

@fasadin

" #error This file requires compiler and library support for the
ISO C++ 2011 standard. This support is currently experimental, and must be
enabled with the -std=c++11 or -std=gnu++11 compiler options.
#endif "

2

Funkcja rand() zwraca pseudolosową liczbę całkowitą z zakresu 0....RAND_MAX, gdzie maksimum to pewna stała zależna od kompilatora.
Nie możesz zmienić wartości RAND_MAX, ale górny zakres możesz łatwo ograniczyć używając operatora dzielenia modulo.

rand() % A --> 0, 1, 2,..., A-1

Żeby zmienić dolny zakres - wystarczy do wyniku dodać wartość początkową

B + rand() % A --> B, B+1, ..., A+B-1

Jeśli chcesz mieć liczby z zakresu od 1000 do 9999 włącznie, to podstawiasz do powyższego
B = 1000
A+B-1 = 9999 --> A=10000-B = 9000

Czyli efekt który chcesz uzyskać da Ci wyrażenie

1000 + rand() % 9000

To co napisałem to rozwiązanie tradycyjnie uczone na podstawach programowania, ale niekoniecznie dobre z punktu widzenia statystycznych właściwości tak uzyskanych wartości pseudolosowych... @fasadin podał lepsze rozwiązanie (jeśli możesz użyć C++11). Jeśli musisz pisać w C i chciałbyś wiedzieć dlaczego to rozwiązanie może być złe, to przeczytaj dokładnie dokumentację funkcji rand().

1

Dziękuję wam za szybką pomoc i zabieram się za przestudiowanie tego wszystkiego co napisaliście.

I dziękuję za wyrozumiałość dla zielonki.

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