Az IF feltétel és ELSE ága, elágazó utasítás
Az elágazást az "if (feltétel) then utasítás1 else utasítás2" szerkezettel lehet megvalósítani. Az if kulcsszót egy feltétel követi. Ha a feltétel igaz, akkor a program végrehajtja a then utáni utasítást. Itt csak egy utasítás szerepelhet, ami lehet egy üres utasítás is. Az else ág nem kötelezõ. Ha mégis van, akkor kerül ide a vezérlés, amikor a feltétel nem teljesült. Itt is egy utasítás állhat. Fontos megemlíteni, hogy az else elõtti utasítás végén nem állhat ';'. Úgy lehetne fordítani ezt, hogy: Ha (feltétel) igaz akkor utasítás_1 különben Utasítás_2;. Az egész if..then…else egyetlen utasítás. Mindig készítsd el az alapszerkezetet, s a többit aztán írd be. Az alapszerkezet a következõ:
if (feltétel) then
begin
end
else
begin
end;
egyetlen pontosvesszõvel, újat csak akkor tégy, ha utasítást írtál a szerkezetbe, de akkor mindig tenni kell.
Megfelelõ gyakorlottság és adott feltételek mellett használhatod majd az alábbi formát
if feltétel then parancs1
else parancs2;
Ha a feltétel igaz, akkor a parancs1 hajtódik végre, egyébként a parancs2 hajtódik végre. Fontos megjegyeznünk, hogy ha az if feltételvizsgálatnak van else ága, akkor a parancs1 után nem rakunk pontosvesszõt. Természetesen itt is mindkét parancs helyett tehetünk több egymást követõ utasítást is. Ilyenkor minden esetben a begin ... end kulcsszavakkal zárjuk egybe az egymást követõ parancsokat:
if feltétel then
begin
parancs1i;
parancs2i;
...
parancsNi;
end
else
begin
parancs1h;
parancs2h;
...
parancsNh;
end;
Az elágazás mindkét ágának használatára az egyik elõzõ példa módosított változatát oldjuk meg! Az a feladat, hogy eldöntsük egy számról kisebb-e mint 100, de azt is írjuk ki, ha nem! Íme a kód:
Program Elagazas; { Programunk neve. }
Uses crt; { Crt unit csatolása. }
var szam : Integer; { Változó deklarálása (létrehozása). }
BEGIN { Fõprogram kezdete. }
ClrScr;
Write('Add meg a számot: ');
ReadLn(szam); { Bekérjük a számot. }
if (szam<100) then { Ha kisebb 100-nál akkor }
begin
Write('Ez a szám kisebb mint 100.');
end
else
begin
WriteLn(’A szám nem kisebb mint 100’); {de nem tudjuk nem 100 e éppen }
end;
ReadKey;
END. { Fõprogram vége. }
Egy másik, már ismert feladat, de else ág alkalmazásával megoldva. A feladat egy számról eldönteni, hogy páros vagy páratlan.
A feladatot a szám 2-vel történõ maradékos osztásával oldjuk meg. Ha a szám 2-vel történõ osztásának maradéka 0, akkor a szám páros egyébként páratlan.
program if_then_else;
var Deklarációk
szam:byte;
begin FÕPROGRAM
ReadLn(szam); Értéket adunk a szam változónak
if szam mod 2=0 then HA a szam és 2 maradéka 0 AKKOR
begin
write('A szam paros');
end
else EGYÉBKÉNT
begin
write('A szam paratlan'); Írd ki ....
end;
ReadLn; Vár egy Enter leütésre
end.
Feladat: Készítsünk programot, amely bekér két egész számot, majd kiírja szavakkal az alábbi lehetõségek egyikét:,
- az elsõ szám kisebb,
- az elsõ a nagyobb, vagy
- egyenlõ a két szám.
Megoldás: A két számot összehasonlítjuk, ha az elsõ szám kisebb, mint a második, akkor ezt kiírjuk. Ha ez nem igaz (else), akkor a két számot újra összehasonlítjuk, ha az elsõ szám a nagyobb, akkor kiírjuk, hogy az elsõ szám a nagyobb. Ha ez sem igaz (belsõ feltétel else ága) akkor pedig kiírjuk, hogy a két szám egyenlõ.
program Pelda21;
var a,b:integer;
begin
write('Kerem az elso szamot: ');
ReadLn(a);
write('Kerem a masodik szamot: ');
ReadLn(b);
if a<b then
begin
WriteLn('Az 1. szam a kisebb.')
end
else
begin
if a>b then
begin
WriteLn('Az 1. szam a nagyobb.')
end
else
begin
WriteLn('A ket szam egyenlo.');
end;
end;
end.
A megoldásnál elágazások egymásba ágyazása történik. Ekkor a program áttekinthetõségét a fenti strukturált írás nagyban segíti. Miután nem teljesült, hogy a<b, még két eshetõség maradt, ezt vizsgáltuk meg a hamis ágon, ahol egy teljes IF THEN ELSE utasítást helyeztünk el. A feladatot megoldhattuk volna három külön IF utasítással is, de úgy nagyon nem elegáns!
Az eddig tárgyalt programvezérlési szerkezetekhez is meg kell tanulnunk egy fontos szabályt, mégpedig ha egy vezérlési szerkezetben egynél több utasítást szeretnénk végrehajtani, mindenképpen kötelezõ begin end közé zárni az utasításokat. Ezt a módszert érdemes egyetlen utasításnál is követni, hogy a késõbbiekben ne érjenek kellemetlen meglepetések. Ugyanis az ilyen hibákat nagyon nehéz javítani.