5. fejezet: Elágazás
Az elágazás azt jelenti, hogy egy feltételtől függően a programnak az egyik vagy másik része fut le. A következő program a beírt két szám közül a nagyobbikat írja ki.
Var a,b:integer; BEGIN write('Írj be két számot: '); readln(a,b); if a>b then writeln(a) else writeln(b); readln; END.
Az elágazás tehát: if
feltétel then
utasítás else
utasítás;
A feltétel valójában egy boolean típusú kifejezés. Ha igaz, akkor a then
, egyébként az else
utáni utasítás hajtódik végre. Fontos megfigyelni, hogy az else
előtt nincs pontosvessző, mert az elágazás még nem fejeződött be. A fenti programban látható, hogyan lehet egy readln-nel több számot is beolvasni. A két számot szóközzel elválasztva kell begépelni.
Ha az első utasítás után pontosvessző van:
if a=b then writeln('Egyenlők!');
akkor az elágazás lezárul, vagyis ha a feltétel nem teljesül, semmit nem hajt végre a program.
Összetett utasítás
Ha a then
vagy else
ágban több utasítást szeretnénk végrehajtani, azokat nem írhatjuk be közvetlenül, hanem csak egy utasításként. Több utasítást egyetlen összetett utasítássá alakíthatunk, ha azokat begin
és end
közé tesszük.
Var s:string; BEGIN write('Írd be a neved: '); readln(s); if s<>'' then begin writeln('**********'); writeln('Szia ',s); writeln('**********'); readln; end; END.
Itt a két egymás melletti aposztróf üres szöveget jelöl.
Összetett feltételek
A feltételek között használhatjuk az és, vagy műveleteket. Fontos tudni azonban, hogy milyen sorrendben dolgozza fel a Pascal a műveleteket, hogy a megfelelő helyeken zárójeleket használjunk.
Var a,b,c:integer; BEGIN write('Írj be három számot: '); readln(a,b,c); write('A legnagyobb='); if (a>b) and (a>c) then writeln(a); if (b>=a) and (b>c) then writeln(b); if (c>=a) and (c>=b) then writeln(c); readln; END.
Azért használtunk >=
műveletet is, hogy mindenképpen egy számot írjon ki a program, függetlenül attól, hány egyforma van a beírtak között.
Egymásba ágyazott feltételek
Az elágazásban lehet további elágazás is. Ha nem ügyelsz a behúzásokra, áttekinthetetlen lesz a programod!
var s:string; BEGIN write('Fiú vagy? '); readln(s); if s='igen' then begin write('Szeretsz focizni? '); readln(s); if s='igen' then writeln('Barátkozz Józsival, neki van labdája.') else writeln('Barátkozz Sanyival, neki van Xboxa.'); end else begin write('Szereted a lovakat? '); readln(s); if s='igen' then writeln('Barátkozz Julival, neki jár a Penny Girl.') else writeln('Barátkozz Sárival, ő szeret ruhákról beszélgetni.'); end; readln; END.
Feladatok
6. Írj programot, mely a beolvasott út és idő értékéből kiszámítja az átlagsebességet. Az algoritmus:
Be: út, idő {persze a változóidat nem így nevezed el}
Ha út<0 VAGY idő<=0 akkor {vigyázz a zárójelezésre!}
ki: "Értelmetlen adatok!"
különben
ki: út / idő
7. Írj programot, mely a megadott számról eldönti, hogy páros vagy páratlan! (Emlékeztető: MOD.)
8. Írj programot, mely a beadott számról eldönti, hogy pozitív, negatív vagy nulla-e! (Háromszoros elágazás.)
9. Írj programot, mely megadja, hogy 3 beolvasott (integer) számból hány egyforma volt (mind különböző / 2 egyforma / 3 egyforma)!