Autorské riešenie
[stiahni]

V tejto úlohe potrebujeme pre vstupný zoznam čísel napr. [30 40 20 10 50 80 70 30]

  • vykresliť stĺpcový graf,
  • vypočítať súčet nepárnych čísel a súčet párnych čísel,
  • určiť, ktorý z týchto súčtov bol menší a o koľko.

Stĺpcový graf vykreslíme tak, že v cykle budeme vykresľovať stĺpiky striedavo červenou a modrou farbou s výškou určenou číslom v zozname.

Procedúra stĺpik na vykreslenie jedného stĺpika vyzerá nasledovne:

viem stlpik :vyska :sirka :farba
  pd
  nechFp :farba
  polygon [opakuj 2 [do :vyska vp 90 do :sirka vp 90]]
  ph
  vp 90 do 2*:sirka vl 90
koniec

Celý stĺpcový graf (pozri obrázok) vykreslíme pomocou cyklu prePrvky. Aby sme odlíšili nepárne a párne pozície, použijeme prkaz vetvenia ak2 a operáciu mod.

  prePrvky "i :z [
    ak2 mod pocitadlo 2=1
      [urobTu "farba "červená]
      [urobTu "farba "modrá]
    stlpik :i 20 :farba]

graf

Okrem kreslenia potrebujeme aj spočítavať čísla na párnych a nepárnych pozíciach. Použijeme na to premenné :prvy a :druhy, ktoré na začiatku vynulujeme. V cykle prePrvky okrem vykresľovania budeme aj vypočítavať tieto súčty.

Po vykreslení grafu a vypočítaní súčtov napokon porovnáme hodnoty :prvy a :druhy a určíme víťaza a tiež rozdiel časov medzi víťazom a porazeným hráčom.

Výsledná procedúra vyhodnoť vyzerá nasledovne:

viem vyhodnot :z
  zmaz
  ph
  nechPoz [-360 0]

  ;výpočet a vykreslenie
  urobTu "prvy 0
  urobTu "druhy 0
  prePrvky "i :z [
    ak2 mod pocitadlo 2=1
      [urobTu "prvy :prvy+:i   urobTu "farba "červená]
      [urobTu "druhy :druhy+:i  urobTu "farba "modrá]
    stlpik :i 20 :farba]

  ;výpis
  ak2 :prvy<:druhy
    [urobTu "vitaz "1.hráč]
    [ak2 :prvy>:druhy [urobTu "vitaz "2.hráč]
                      [urobTu "vitaz "nikto]]
  (píš "|čas prvého hráča| :prvy)
  (píš "|čas druhého hráča| :druhy)
  (píš "Zvíťazil :vitaz "o abs :prvy - :druhy "sekund)
koniec

Pri tejto úlohe sme chceli dosiahnúť, aby ste si precvičili prácu so zoznamami, prácu s lokálnymi premennými, operáciou mod (zvyšok po delení), prípadne abs (absolútna hodnota čísla), príkazmi opakovania (prePrvky, opakuj) a príkazmi vetvenia (ak2).

Vaše zaujímavé riešenia a najčastejšie chyby

Do riešenia úlohy sa pustili takmer všetky tímy a celkom úspešne. Tí, čo nepoznajú zoznamy, vyriešili úlohu pre 4, resp. 8 stromov. Dva tímy vyriešili úlohu pre ľubovoľný počet stromov, pričom v svojich riešenia použili zoznamy. Niektorí pre odlíšenie párnych a nepárnych pozícii stĺpčekov použili príkaz vetvenia ak2 a pomocnú premennú, ktorej hodnotu menili z 0 na 1 a z 1 na 0. Takýto prepínač sa dá realizovať aj pomocou výrazu 1-a, pričom na začiatku nastavíme hodnotu a=0. Niektorí šikovníci na kreslenie stĺpikov použili nastavenie hrúbky pera a príkazy dopredu a vzad. Potešila nás aj kultúra zápisov programov - používanie komentárov, odsadzovanie a písanie jednotlivých príkazov po jednom do každého riadku.