Google PageRank

 

Feltételes utasítások

Ha sikerült megértenetek a korábbi leckéket, akkor továbbmehetünk, ha nem, akkor nézzük át még egyszer. Ez a feltételezés pont ugyanolyan, mint amilyenek most jönnek.

A Turbo Pascal kétféle feltételes utasítást tud kezelni.

Ifthenelse

if ertem=true

{Nem kell kettőspont, mivel nem értéket ad, hanem csak értéket vizsgál.}

then write('Rendben!')

else write('Akkor újra!');

{A pontosvesszőt tehát csak az utolsó tag után kell tenni.}

Az "if" után megadjuk a feltételeket (sikerült megérteni a leckéket).

Ezután jön a "then", amit a feltételek helyessége esetén történő utasítások követnek (továbbmehetünk).

Az "else" után következő utasítások (nézzük át még egyszer) ellenkező esetben, azaz akkor hajtódnak végre, ha nem teljesülnek a feltételek. Az else-t el lehet hagyni, ilyenkor egyszerűen továbbugrik.

Case

Case valtozo of

 43: tedd_ezt;

 -5: tedd_azt;

 +9: csinald_ezt;

 4.6: csinald_azt;

 else mas_muvelet;

end;

A "valtozo" 43-al, -5-el, +9-el és 4,6-tal való egyezését vizsgáljuk. A kettőspontok választják el a feltételt (kettőspont előtt) a hozzátartozó utasításoktól (kettőspont után). Ha valamelyik feltétel nem teljesül, egyszerűen továbbugrik a program a következő egyezés vizsgálatához. Ha az sem teljesül, akkor még tovább megy. Addig megy, amíg nem találja meg a helyes feltételt, vagy végig nem ellenőrizte az egészet. Ha van else utasítás, ami tulajdonképpen itt sem kötelező, és nem teljesült eddig egyik feltétel sem, akkor az else utáni műveletek végrehajtódnak.

Ennél a típusú feltételes utasításnál a változó értéke csak szám, vagy karakter lehet.

Demonstrációs programok

Nézzük meg, hogyan lehet másodfokú egyenlet valós gyökeit kiszámítani ezzel a programmal. Remélem mindenki ki tud számítani egy ilyent papíron.

program masodfoku;

uses crt;

var a,b,c,delta:real;

begin

clrscr;

{Ez az utasítás is a crt modul része és csak annyi a szerepe, hogy törli a képernyőt. Átláthatóbb lesz a program futás közben.}

write('ax²+bx+c=0',#10#13,'a='); readln(a);

write('b='); readln(b);

write('c='); readln(c);

delta:=b*b-4*a*c;

if delta<0

{A "<", ">" és "=" jeleken kívül más is van. Majd bemutatom azokat is.}

then write('A függvénynek nincs valós megoldása.')

else if delta=0

then write('x=',(-b+sqrt(delta))/(2*a):20:10)

else if delta>0 then

begin

delta:=sqrt(delta); {Csak műveletsporlás.}

writeln('x1=',(-b+delta)/(2*a):20:10);

write('x2=',(-b-delta)/(2*a):20:10);

end;

{Ha több utasítást szeretnél végrehajtani a feltétel helyessége esetén, akkor "begin" és "end" közé kell rakni őket - itt azonban az end vége után pontosvessző jár. Ha nem teszed e közé a két szó közé, akkor csak az első utasítást fogja végrehajtani és akár hibás is lehet a szintaxis.}

readkey;

end.

Forráskód letöltése

Program letöltése

Tehát akár több if-utasításblokkot is egymásba ágyazhatsz.

Az egyik típus használatát bemutattam. Most jöjjön a következő! Megkérdezi hány fagyit ettél meg ma, és az szerint válaszol vissza.

program fagyi;

uses crt;

var mennyiseg:char;

begin

 writeln('Hány fagyit ettél meg ma?');

 writeln('a. Egyet sem');

 writeln('b. Egyet');

 writeln('a. Többet');

 write('Válaszoj a helyes válasz betűjelével: '); readln(mennyiseg);

 case mennyiseg of

  'a':write('Az kevés!');

  'b':write('Az jó!');

  'c':write('Az sok!');

  else write('Hát... ilyen választási lehetőség nem nagyon volt...');

 end;

 readkey;

end.

Forráskód letöltése

Program letöltése