nika.blog.matfyz.sk

Veronika Dropčová
veronika.dropcova(at)gmail.com

05 – Aritmetický výraz

Ako ste zistili minulú hodinu, máme hneď niekoľko operátorov, pričom zatiaľ sme používali +, -, *, mod a div. Čo ešte ale neviete, je poradie, v akom sú operácie využívajúce tieto operátory vykonávané, ak ich máme v jednom výraze viac.

 

Tak napríklad výraz:

 

6 + 7 mod 3 – 2

 

Čo myslíte? Aký bude výsledok? Bude to -1? Alebo to bude 0? Alebo to bude 5?

 

Správna odpoveď je 5. Pascal sa totiž pri vyhodnocovaní takýchto výrazov riadi nemennými pravidlami, podľa ktorých majú operátory mod div prednosť pred pluskom a mínuskom. A tiež – podobne ako v matike – aj operátor * (krát) má prednosť pred pluskom a mínuskom.

 

Čo sa ale deje, keď mám v jednom riadku vedľa seba div, * alebo mod? Teda napríklad takýto výraz:

 

3 * 7 mod 8 div 4

 

?

 

Vyhodnotia sa postupne. Najskôr sa teda vyráta 3 * 7, čo je 21. To sa „vymoduje“ 8, čiže výsledok bude 5. A to sa následne „vydivuje 4“, takže výsledok bude 1.

 

Niekedy sa však môže stať, že máme výraz, ktorý obsahuje aj pluská, aj mínuská, aj krát, aj mod, aj div (v ľubovoľnom počte) a potrebujeme zaistiť, aby sa operácie + (alebo -) vyhodnotili skôr, ako sa vyhodnotí * (alebo mod alebo div). Napríklad vo výraze:

 

6 + 3 mod 4 – 1

 

chceme, aby sa najskôr vyhodnotilo 6 + 3, potom 4 – 1 a až výsledky týchto operácií nech prejdú operáciou modulo (teda nech sa to ráta ako 9 mod 3). Ako to zaistiť?

 

Jednoducho! Ako v matike! Použijeme zátvorky. Výraz teda prepíšeme do tvaru:

 

(6 + 3) mod (4 – 1).

 

Takže zhrnutie: najskôr sa vyhodnocujú zátvorky, potom sa vyhodnocuje *, mod, div (ak ich je viac, vyhodnocujú sa zľava doprava) a ako posledné sa vyhodnocuje + a -.

 

V Pascale však máme pripravené aj nejaké špeci funkcie (neľakať sa tohto slovíčka!), ktoré za nás riešia niektoré matické „veci“. Momentálne sú pre nás celkom zaujímavé tieto dve:

 

– abs(číslo) – je to funkcia, ktorá vyráta absolútnu hodnotu čísla, ktoré napíšeme do zátvoriek. Tak napríklad abs(5) = 5, abs(-5) = 5, ale aj abs(10-8) = abs(8-10) = 2. Teda ráta to absolútnu hodnotu nielen čísel v zátvorkách, ale aj výsledkov výrazov, ktoré tam napíšeme.

sqr(číslo) – je to funkcia, ktorá vyráta druhú mocninu čísla, ktoré napíšeme do zátvoriek. Tak napríklad sqr(5)= 25, sqr(-5) = 25, ale aj sqr(10-8) = sqr(8-10) = 4.

 

Úloha 1

Prepíšte do pascalovského zápisu tieto výrazy:

  1. (x-100)2+(y-150)2
  2. (a+b)+|a-b|
  3. (((x+1)2+1)2+1)2
  4. ((x+1)2+(y+1)2)2+5

 

To, čo si prečítate v nasledujúcich riadkoch, je jeden z najdôležitejších základných princípov, ktoré v programovaní (v akomkoľvek jazyku) používame. Tak teda – predstavte si, že máte spraviť počítadlo kliknutí myškou na tlačidlo. Kliknem na tlačidlo prvýkrát, vypíše sa mi číslo „1“. Potom kliknem druhýkrát, vypíše sa číslo „2“. … Kliknem dvestotridsiatykrát, vypíše sa mi číslo „230“. Jasné, čo chceme?

 

Fajn! Ako by sme to urobili? Budeme potrebovať premennú, ktorá si bude pamätať, ktoré kliknutie práve prebehlo. A hodnotu tej premennej vypíšeme. Nech sa teda tá naša premenná volá „kliknutie„. Každým kliknutím na tlačidlo sa má jej hodnota navýšiť o jeden, tak je? Tak! Ako to zapíšeme? Takto:

 

kliknutie := kliknutie +1;

 

Zvláštny zápis, ale nič komplikované na pochopenie:

 

kliknutie := kliknutie +1;

 

Priprav sa na zápis do premennej kliknutie (teda nájdi si v pamäti škatuľku s týmto menom). V tej škatuľke už niečo uložené je, je tam napríklad číslo 5.

Do tejto škatuľky zapíš novú hodnotu, ktorú získaš, keď spočítaš hodnotu premennej kliknutie (teda v princípe to, čo v tej škatuľke už bolo) a pripočítaj k tej hodnote 1. Teda idem spočítať číslo 5 a 1, a výsledok (teda číslo 6) zapíšem do premennej kliknutie. 

 

Koniec. Jednoduchý princíp, 30 sekúnd zamyslenia a už ste sa naučili jeden veľmi jednoduchý, ale zároveň nesmierne dôležitý algoritmus. Gratulujem!

 

Úloha 2

Zistíte, čo bude v premenných CisloSucet po vykonaní postupnosti priraďovacích príkazov:

 

begin
  Cislo := 736;
  Sucet := 0;
  Sucet := Sucet + Cislo mod 10; 
  Cislo := Cislo div 10;
  Sucet := Sucet + Cislo mod 10;
  Cislo := Cislo div 10;
  Sucet := Sucet + Cislo mod 10;
end;

 

Poznámka: všimnite si, že do premennej Sucet sme na začiatku priradili 0. Je to nesmierne dôležitý krok! Ak totiž premennú, s ktorej hodnotou budete hneď od začiatku robiť nejaké matematické operácie, nenastavíte na začiatku na nejakú hodnotu, Pascal jej nastaví hodnotu, aká sa jemu bude páčiť. Niekedy to bude 0, niekedy to však bude aj 3679356953 a pod.

 

A aby toho málo nebolo, ešte jeden pekný algoritmus. Občas sa totiž stáva, že potrebujete vymeniť hodnoty dvoch premenných. Napríklad máme premennú x=15  a premennú y=20. To, čo chceme, je napísať algoritmus, ktorý zabezpečí, že v premennej x bude hodnota 20 a v premennej  bude hodnota 15.

 

Ako na to?

 

Cez tzv. pomocnú premennú!

 

Nejde o žiadny nový typ premennej, slovíčko pomocná je tam len preto, aby bolo jasné, že premennú, ktorú si zadeklarujeme, nebudeme potrebovať na nič iné, iba na to, aby nám pomohla vymeniť hodnoty v premenných y.

 

Takže zadeklarujme si teda tieto tri premenné:

 

var x, y, z : integer;

 

pričom je naša pomocná premenná.

Do premenných priraďme začiatočné hodnoty:

 

begin

x := 15;

y := 20;

 

A teraz sa začne hra s pohárikmi vody: v jednom je 15cl, v druhom 20cl a tretí je prázdny. Ako vymením obsah tých dvoch? Pred tým, než si prečítate pokračovanie tohto algoritmu, skúste si to s tými pohárikmi a vodou. Je to jednoduché, určite na to prídete. No a potom si prečítajte tieto riadky:

 

z := x;  // do pomocnej premennej priradím to, čo bolo v x-ku, teda číslo 15. Momentálny stav je teda: x=15, y=20, z=15.

x := y;   //do premennej x priradím to, čo je v premennej y (čiže vlastne už „vymením“ prvú hodnotu). Momentálny stav je teda x=20, y=20, z=15.

y := z;   //no a už potrebujem iba do premennej y dostať to, čo bolo na začiatku v x-ku, a to sa momentálne schováva v z-ku. Takže momentálny stav je x=20, y=15, z=15.

 

Vymenené. Jeden rozdiel v porovnaní s pohárikmi s vodou tu ale je: všimnite si, že v premennej z ostala hodnota 15. To sa nám pri vode nemôže stať (nezískame vodu len tak, z ničoho… nie sme mágovia.) 🙂

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *