P3 Podmienka

Podmienky

  1. Pri programovaní sa často dostávame do situácie, kedy programátor musí predvídať rôzne situácie a na základe nich upraviť správanie programu (program sa na základe splnenia nejakej podmienky bude vetviť). Na to slúži podmienka:
  • úplná (ak je splnená podmienka, potom vykonaj ..., ak nie je splnená, urob ...)
IF (podmienka) THEN {ak po splneni podmienky nasleduje viac prikazov, tak ich ohranicime do 
BEGIN ,,, END}
BEGIN príkaz1; príkaz2;
.. END {pozor, tu sa nedava bodkociarka} ELSE
BEGIN príkaz1n; príkaz2n
.. END;
  • neúplná (ak je splnená podmienka, potom vykonaj ...)
IF (podmienka) THEN 
BEGIN príkaz; .. END;

Ako môžu vyzerať podmienky?

    • IF (X=2) ... ak je x rovné číslu 2
    • IF (X<2) ...ak je x menšie ako 2
    • IF (X>2) ...ak je x väčšie ako 2
    • IF (X<=2) ...ak je x menšie, alebo rovné 2
    • IF (X>=2) ...ak je x väčšie, alebo rovné 2
    • IF (X<>2) ...ak je x rôzne od 2
    • IF (X<Y) AND (Y<Z) ...ak platia obidve podmienky súčasne
    • IF (X<Y) OR (Y<Z)... ak platí jedna aspoň jedna z podmienok
    • IF NOT (X=Y) ... ak neplatí podmienka

No a podmienka ešte raz prakticky:

Program Cisla;
 var a,b:integer;
begin
  writeln('zadaj 2 cisla');
  readln(a,b);
    if a>b then writeln(a,' > ',b);
    if a<b then writeln(a,' < ',b);   
    if a=b then writeln(a,' = ',b);
  readln;
end. 

Príkaz CASE je vlastne prepínač. Jednoducho vykoná ten príkaz, u ktorého je splnená rovnosť s hodnotou výrazu (hodnotou môže byť konštanta alebo interval hodnôt).
Ak nenájde zhodu, nevykoná nič (alebo vykoná príkaz za slovom ELSE, ak je uvedené).

case
   premenna of hodnota1: prikaz1;
   premenna of hodnota2: prikaz2;
   ---
else
   prikazX
;
end; {tento end sa vztahuje na case}

Ukážka na jednoduchom programe:

program znamkaSlovom;
var i:integer;
begin
     writeln('zadaj znamku ako cislicu a ja ti ju napisem slovom');
     readln(i);
     case i of
          1:writeln('jednotka');
          2:writeln('dvojka');
          3:writeln('trojka');
          4:writeln('stvorka');
          5:writeln('gula');
          0,6..9:writeln('take znamky u nas nedavame')
          {alebo pre 0,6,7,8,9: else writeln('take znamky u nas nedavame?');}
     end;
readln;
end.         

Ak by sa jednalo o rozhodovanie medzi znakmi, mohol by program vyzerať nasledovne:

program znakNaKlavesnici;
var znak:char;
begin
     writeln('zadaj znak na klavesnici a ja ho zaradim do spravnej skupiny');
     readln(znak);
     case znak of
            'A'..'Z', 'a'..'z':  WriteLn('Pismeno');  {tu je hodnotou interval hodnôt - pozri P01, časť ordinálne typy}
            '0'..'9':            WriteLn('Cislica');
            '+', '-', '*', '/':  WriteLn('Operator');
          else
            WriteLn('toto bude nejaky specialny znak');
          end;
readln;
end.

Príklady:

  • Napíš program, ktorý zistí najväčšie z dvoch čísel
  • Napíš program, ktorý zistí najmenšie z troch (štyroch) čísel
  • Napíš program, ktorý zoradí 3 čísla od najmenšieho po najväčšie
  • Napíš program, ktorý zistí, či je číslo párne (nepárne)
  • Napíš program, ktorý zistí deliteľnosť čísla iným číslom
  • Napíš program, ktorý overí trojuholníkovú nerovnosť
  • Napíš program, ktorý zistí, či trojuholník so stranami a,b,c je pravouhlý
  • Vytvor program "Kalkulačka", ktorý dokáže sčitovať, odčitovať, násobiť a deliť 2 čísla podľa rozhodnutia užívateľa
  • Napíš program na výpočet:
    • koreňa lineárnej rovnice ax+b=0
    • koreňov kvadratickej rovnice ax2+bx+c=0
  • Napíš program, ktorý vypočíta BMI a napíše k nemu i hodnotenie (pod 18,5-podvyživený,18,5-25 v norme, nad 25 nadváha, nad 30 obezita)
  • Napíš program, ktorý z prvých 6 čísel rodného čísla určí:
    • pohlavie (M/Ž)
    • dátum narodenia (DD.MM.RR)
    • znamenie zverokruhu, v ktorom sa narodil