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.