IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 26. diel - Generovanie náhodných čísel v PHP

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
iviorfeus
Člen
Avatar
iviorfeus:29.4.2022 7:47

Mohl bych se zeptat, jak napsat kód pro vytvoření x jednotlivých náhodných čísel, které nebudou navzájem stejné?

 
Odpovedať
29.4.2022 7:47
Avatar
DarkCoder
Člen
Avatar
Odpovedá na iviorfeus
DarkCoder:29.4.2022 13:43

Vytvoříš si pole o velikosti počtu možných hodnot v platném rozsahu, vygeneruješ náhodné číslo v tomto rozsahu, přečteš hodnotu na indexu odpovídající vygenerovanému náhodnému číslu. Tato hodnota udává první náhodné číslo. Následně vezmeš poslední prvek pole a zapíšeš jej na index ze kterého si bral poslední hodnotu. Následně generuješ náhodné číslo v rozsahu o 1 menší nežli v předchozím kroku. Tímto způsobem v x krocích získáš x náhodných čísel, které se zaručeně nebudou opakovat.

Odpovedať
29.4.2022 13:43
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá na iviorfeus
DarkCoder:30.4.2022 3:41

Následující funkci lze použít pro vygenerování unikátních celých čísel o počtu count v rozsahu <left, right>. V případě, že nelze vypsat unikátní hodnoty, nedojde k žádnému výpisu. Princip funkčnosti viz. příspěvek výše. Kód psán v C..

void getUniqueRnd(int left, int right, unsigned count) {
        unsigned range = right - left + 1;
        if (count > range) return;

        int* vals = (int*)malloc(range * sizeof(int));
        if (!vals) exit(1);

        for (unsigned i = 0; i < range; i++) vals[i] = left + i;

        for (unsigned i = 0; i < count; i++) {
                int rnd = rand() % range; // (rand() % ((range - 1) - 0 + 1)) + 0;
                printf("%d ", vals[rnd]);
                vals[rnd] = vals[range - 1];
                range--;
        }

        free(vals);
}
Odpovedať
30.4.2022 3:41
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!