Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

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é?

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ť
"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ť
"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.

Zobrazené 3 správy z 3.