Avatar
Člen
Člen
Avatar
Člen:

Zdravím ! Mám cyklus, ktorý generuje náhodné číslo a príčítava k nemu 993 pokiaľ nie je deliteľné 3-kou. Avšak to nefunguje. Vie niekto poradiť prečo to nefunguje?

Randomize;
        random_real := random(99);
        random_int := round(random_real);
        writeln(random_int);
        second := random_int + 73;
        while (second mod 3 = 0) do begin
        Randomize;
        random_real := random(99);
        random_int := round(random_real);
        writeln(random_int);
        second := random_int + 993;
        writeln(second);
        Randomize;
        end;

Ďakujem :)

Odpovědět 18.5.2015 16:26
...
Avatar
Michal Haňáček:

Tak si řádek po řádku projdi co jsi napsal.

1)Randomize inicializuje generátor náhodných čísel.
2)Do proměnné random_real (jejíž deklaraci nevidíme ...) si vygeneruješ číslo v rozsahu 0-99
3)random_int (zase nevidíme deklaraci ...) naplníš nesmyslným zaokrouhlováním celého čísla vráceného generováním v kroku 2.
4)vypíšeš obsah proměnné random_int
5)do proměnné second přidělíš random_int+73

teprve teď se dostáváš do cyklu, který se opakuje dokud je zbytek po dělení proměnné second nulový (tak že nemusí proběhnout ani jednou)

a v cyklu děláš násleující:
6-9)opět nesmyslně inicializuješ generátor a opakuješ kroky 1-4
10)do proměnné second přidělíš obsah proměnné random_int+993
11)vypíšeš obsah proměnné second
12)opět nesmyslně inicializuješ generátor
13)konec cyklu
Nahoru Odpovědět 18.5.2015 17:07
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Člen
Martin Dráb:

Co znamená, že "to nefunguje"?

Jinak není dobré volat Randomize takhle často. Obvykle stačí jednou na začátku programu nebo před generováním prvního čísla z náhodné sekvence. Pokud vím, Randomize odvvozuje seed z aktuálního data a času, nanejvýš však s přesností na mlisekundy, bych tipl. Tudíž dvě volání Randomize rychle za sebou nastavují stejný seed.

Také moc nerozumím tomu generování reálného čísla z intervalu 0-98. Random s jedním parametrem by měla přímo vracet číslo celé.

Nahoru Odpovědět  +1 18.5.2015 17:10
2 + 2 = 5 for extremely large values of 2
Avatar
Člen
Člen
Avatar
Odpovídá na Martin Dráb
Člen:

Tak na rovinu... Toto je kód od našeho učiteľa :D - problém je v tom, že program by mal generovať náhodné číslo a pričítavať k nemu 993 až pokiaľ nedostane číslo deliteľné 3kou, spravil som, aby vypisoval čísla na obrazovku, ale ich ani nevypisuje.

Nahoru Odpovědět 20.5.2015 10:44
...
Avatar
Odpovídá na Člen
Michal Haňáček:

Bez zdrojáku těžko soudit kde je chyba v tom "tvém", upraveném kódu. Ale nesouvisí to s tím co jsem psal už výše, že cyklus proběhnout vůbec nemusí? ...

Nahoru Odpovědět 20.5.2015 13:14
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Člen
Člen
Avatar
Odpovídá na Michal Haňáček
Člen:

Prebehnúť nemusí. Cyklus má prebehnúť vtedy, keď prvé vygenerované číslo + 993 je už delitelné 3mi. Keď nie tak cyklus generuje čísla dovtedy pokiaľ nie je nejaké deliteľne 3mi.

Nahoru Odpovědět 20.5.2015 14:12
...
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 6 zpráv z 6.