Diskuze: Generování čísel z intervalu
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Celé to spočívá v rozdílu krajních mezí intervalu a posunu.
Funkce rand() vrací celé číslo v rozsahu 0 až RAND_MAX. (hodnota RAND_MAX je definována ve stdlib.h a bude mít hodnotu nejméně 32767. Tato informace je důležitá z důvodu rozsahu mezí, kterž bude použit ve výpočtu.
Pro eliminaci rozsahu jak správně tušíš použiješ operátor modulo (%). Výsledkem je pak hodnota v rozsahu 0 až N-1 kde N je hodnota na pravé straně od operátoru modulo.
Např. rand() % 50 bude hodnota v rozsahu 0 až 49.
Při výpočtu je dobré přičítat hodnotu v modulo části přičítat hodnotu jedna. To nám zahrne do rozsahu i to číslo kterým na které modulo používáme.
Např. rand() % (50 + 1) bude hodnota v rozsahu 0 až 50.
Rozdíl mezi minimální a maximální hodnotou která může nastat je konstantní. 0 bude minimální hodnota a rozdíl mezí intervalu bude maximální hodnota.
Např. pro interval <-5, 50> bude rand() % (50 - (-5) + 1) bude hodnota v rozsahu 0 až 55.
Nyní pomocí posunu určíme hodnotu v daném intervalu. Posun je dán levou mezí. Tuto hodnotu pak budeme k výsledku operace modulo přičítat, čímž se mění jak minimální tak maximální hodnota.
Např. (rand() % (50 - (-5) + 1)) + (-5) bude hodnota v rozsahu -5 až 50. A to je mez kterou požadujeme.
Obecně:
rn = (rand() % (r - l + 1)) + l;
kde rn je náhodné číslo v daném intervalu, r je mez uzavřená zprava, l je mez uzavřená zleva.
Získání náhodného čísla v intervalu ilustruje následující kód:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define COUNT 100
int main(void) {
int rn, l, r, i;
// nastavení seedu
srand((unsigned)time(NULL));
// nastavení mezí intervalu
l = -5;
r = 50;
// vypis 100 náhodných čísel v intervalu
for (i = 0; i < COUNT; i++) {
rn = (rand() % (r - l + 1)) + l;
printf("%d\n", rn);
}
return 0;
}
Tak aspoň označ jeho odpoveď ako riešenie tvojej otázky 
Zobrazeno 4 zpráv z 4.