05. 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ő
megoldás
7. Írj programot, mely a megadott számról eldönti, hogy páros vagy páratlan! (Emlékeztető: MOD.)
megoldás
8. Írj programot, mely a beadott számról eldönti, hogy pozitív, negatív vagy nulla-e! (Háromszoros elágazás.)
megoldá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)!
Comments