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.
If…then…else
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.
|
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 |
|