Avatar uživatele
bery123

Co vykoná následující algoritmus – program?

cislo = 0
vysledek = 1
opakuj pokud platí (cislo <= 12)
zacatek cyklu
cislo = cislo + 2
vysledek = vysledek + cislo
konec cyklu
vypis na obrazovku (vysledek)

Odpověď je: Vypíše na obrazovku hodnotu 57.
Dokázal by mi prosím někdo vysvětlit, proč je výsledkem zrovna číslo 57?

Děkuji.

Zajímavá 0 před 215 dny Sledovat Nahlásit



Nejlepší odpověď
Avatar uživatele
aliendrone

Je očividné, že program vykonal o jednu iteraci více, tedy 43+14=57. Čekní co jsi DOOPRAVDY v programu napsal. ☺

0 Nominace Nahlásit

Další odpovědi
Avatar uživatele
Alesh

Teď jsem so přepsal do VBA a výsledek je opravdu 57.

Sub Scitani()

Dim cislo As Integer: cislo = 0
Dim vysledek As Integer: vysledek = 1

Do While cislo <= 12
cislo = cislo + 2
vysledek = vysledek + cislo
Loop

ActiveCell = vysledek

End Sub

Popíšu ti co to dělá:
po spuštění programu se vytvoří dvě proměnné: cislo = 0 a vysledek = 1
Pak tam je cyklus, který běží, dokud cislo bude menší nebo rovno 12, každým průchodem cyklu se cislo zvětší o 2 a přičte se k vysledku, čili při jednotlivých průchodech dojde k tomuto:

  1. cislo = 0->2, vysledek = 1->3
  2. cislo = 2->4, vyledek = 3->7
  3. cislo = 4->6, vysledek = 7->13
  4. cislo = 6->8, vysledek = 13->21
  5. cislo = 8->10, vysledek = 21->31
  6. cislo = 10->12, vysledek = 31->43 (po 6. průchodu se cislo dostane na 12 a vysledek na 43)
  7. cislo = 12->14, vysledek = 43->57 (na začátku cyklu, je cislo ještě 12, proto tento průchod ještě proběhne, během něj se cislo zvýší na 14 a vysledek na 57, další průchod už zastaví podmínka). Je to jasné?

0 Nominace Nahlásit


Avatar uživatele
ChatGPT

Algoritmus vytváří součet všech sudých čísel od 2 do 12 (včetně). Jednotlivé iterace vypadají následovně:

  1. itace: cislo = 0 + 2 = 2, vysledek = 1 + 2 = 3
  2. itace: cislo = 2 + 2 = 4, vysledek = 3 + 4 = 7
  3. itace: cislo = 4 + 2 = 6, vysledek = 7 + 6 = 13
  4. itace: cislo = 6 + 2 = 8, vysledek = 13 + 8 = 21
  5. itace: cislo = 8 + 2 = 10, vysledek = 21 + 10 = 31
  6. itace: cislo = 10 + 2 = 12, vysledek = 31 + 12 = 43

V této fázi se cyklus ukončí, protože příští iterace by v „cislo“ uložila hodnotu 14, což je víc než 12. Výslednou hodnotu algoritmus vypíše na obrazovku, tedy číslo 43.

Nicméně když jsem kontrola podle tvých instrukcí, dostal jsem se na hodnotu 43, nejde o hodnotu 57 jako ty. Je možné, že se někde vyskytla chyba nebo byl zadán jiný úkol.

0 Nominace Nahlásit

Avatar uživatele
Dochy

Máš tam poněkud neobvyklou posloupnost instrukcí. Obvykle se inkrement provádí až po dokončení těla cyklu, ty jej provádíš v těle, tzn. po kontrole podmínky, ale před dalšími výpočty v těle cyklu.
Není to špatně, ale jako programátor musíš vědět co a jak děláš a pak si můžeš dovolit nestandardní obraty.

0 Nominace Nahlásit


Diskuze k otázce

U otázky nebylo diskutováno.

Nový příspěvek