NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 26 - Generování náhodných čísel v PHP

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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é?

 
Odpovědět
29.4.2022 7:47
Avatar
DarkCoder
Člen
Avatar
Odpovídá 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.

Odpovědět
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
Odpovídá 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);
}
Odpovědět
30.4.2022 3:41
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.