Oszd meg!

Add a Twitter-hez Add a Facebook-hoz Add a Startlaphoz Add az iWiW-hez Add a Google Reader-hez

Közösség

Belépés

E-mail cím:
Jelszó:

Az IF ... THEN parancs, feltételes utasítás-végrehajtás

Az IF ... THEN parancs, feltételes utasítás-végrehajtás

     Gyakran elõfordul, hogy programunkban valamilyen feltételtõl függõen szeretnénk utasítást végrehajtani. Ha a feltétel teljesül, akkor végrehajtjuk az utasítást, ha nem akkor annak végrehajtása nélkül folytatjuk a program végrehajtását. Megyek haza, kulcsra zárva az ajtó, kikulcsolom és nyitom, megyek be, mint ahogy terveztem. A feltételes utasítás végrehajtás egy kitérõ a programban, de persze nagyon fontos kitérõ is lehet, mely nélkül nem megy tovább a program.

Tehát az utasítás végrehajtást egy feltételes mondathoz hasonlóan szervezzük meg. Ha a levegõ hõmérséklete kisebb mint 0, akkor írd ki hogy fagyott! Ha Péter elõbb született mint Pál, akkor legyen Péter a szóvivõ, mert õ az idõsebb. Egy programbéli példával élve, akkor szeretnénk végrehajtani valamilyen utasítást, ha az i változó értéke nagyobb mint 5. (Vegyük észre, hogy a mondatainknak nincs különben ága.) A feltételes utasítás végrehajtás általános formája mondatszerû leírással:

Ha feltétel akkor

 Utasítás

Elágazás vége

A Pascal nyelvben pedig:

if  fetétel  then  parancs;

A mi példánkban (ha i nagyobb mint 5) ez így nézne ki:

if  i>5  then  parancs;

     A feltételben bármilyen két azonos típusú kifejezést összehasonlíthatunk (pl. az i+1-et a j+5-tel). A kifejezések összehasonlítására használhatjuk a <, >, =, <=, >=, <> (nem egyenlõ) jeleket, melyek igaz/hamis (true/false) logikai értékeket adnak vissza. Ha ez a logikai érték igaz (true), akkor a parancs végrehajtódik.

     A logikai értékeket összekapcsolhatjuk az AND (és), OR (vagy), NOT (nem), XOR (kizáró vagy) mûveletekkel. Így egyszerre több feltételt is vizsgálhatunk. Ilyenkor a feltételeket, amelyeket összekapcsoljuk, zárójelbe tesszük.(nálam kötelezõ zárójelbe rakni a teljes feltételt is KIL) Pl. ha azt szeretnénk, hogy a parancsunk csak akkor hajtódjon végre, ha az i változó értéke nagyobb mint 5 és egyidejûleg a k változó értéke egyenlõ 7-tel:

if ( (i>5)  and  (k=7) ) then  parancs;

     Természetesen itt is, egyszerre több parancsot is végrehajthatunk a feltételen belül. Ekkor a parancsokat a begin ... end; közé rakjuk. (mindig így begin end-el kell használnod KIL)

if  feltétel  then

begin

 parancs1;

 parancs2;

 

 parancsN;

end;

A teljes If utasítást egy sorba csak kellõ gyakorlottság után írd, és még nagyobb gyakorlottság esetén hagyhatod el a begin end párt egy utasítás alkalmazása esetén az igaz ágon. (De ne hibázz!)

Az elágazás, vagy más néven szelekció egy másik alkalmazási példájaként vegyük a következõ feladatot! Döntsük egy számról, kisebb-e mint 100? Í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
   ReadKey;
  END.                                        { Fõprogram vége. }
 

(Az elágazást nálam soha nem írhatod meg begin end alkalmazása nélkül! KIL)

Példaprogram az elágazásra. Ez a program az egyágú kiválasztást mutatja be. 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.

 

program ifthen;

var                     Deklarációk

szam:byte;

begin                       FÕPROGRAM

Write(’Add meg a számot’);   

ReadLn(szam);              Értékadás a szám változónak

if szam mod 2=0 then             Ha a szám  2-vel osztva maradéka 0 akkor

begin                                 Blokk kezdete

write('A szam paros');       Írd ki ....

end;                                   Blokk vége

if szam mod 2=1 then         Ha a szám és 2 maradéka 1 akkor

begin                            Blokk kezdete

write('A szam paratlan');          Írd ki .....

end;                                    Blokk vége

ReadLn;                                   Enter leütésére vár

end.                      FÕPROGRAM VÉGE

 

Feladat: Készítsünk programot, amely bekér három pozitív egész számot, és kiírja õket nagyság szerint növekvõ sorrendben!

Megoldás: A programban a három szám tárolására 3 numerikus változót fogunk használni (a, b, c). Ezeket cserélgetéssel sorba fogjuk rakni úgy, hogy az a változóban legyen a legkisebb szám, a b-ben a középsõ és a c-ben a legnagyobb szám. A cserékhez egy x segédváltozót használunk. Tehát a kívánt sorrend a<b<c. A cserét akkor kell két szám között elvégezni ha rossz sorrendben vannak. Tehát pl. a és b cseréjére akkor kerül sor, ha a>b, mert a jó sorrend az elõírás szerint a<b kell legyen.

program Pelda19;
var a,b,c,x:integer;
begin
 write('Kerem az elso szamot: ');
 ReadLn(a);
 write('Kerem a masodik szamot: ');
 ReadLn(b);
 write('Kerem a harmadik szamot: ');
 ReadLn(c);
 if (a>b) then begin
             x:=a;
             a:=b;
             b:=x;
 end;
 if (a>c) then begin
             x:=a;
             a:=c;
             c:=x;
end;
 if (b>c) then begin
             x:=b;
             b:=c;
             c:=x;
end;
 write('A harom szam novekvo sorrendben: ');
 WriteLn(a,' < ',b,' < ',c);
end.

 

A késõbbiekre való tekintettel az IF utáni feltételeket igyekezzünk zárójelbe tenni.

Feladat: Készítsünk programot, amely bekér egy mondatot, majd kiírja, hogy hány nagybetû van benne.

Megoldás: Egy karakterrõl úgy is  el tudjuk dönteni, hogy nagybetû-e, hogy megnézzük nagyobb vagy egyenlõ-e mint 'A' és egyben kisebb vagy egyenlõ-e mint 'Z'. Ha ez igaz, akkor a karakter A-tól Z-ig van, tehát egy nagybetû. Fogunk használni még egy nagydb nevû változót, amely a nagybetûk számát fogja számolni. A megszámlálás tételével késõbb fogunk részletesen foglalkozni.

program Pelda20;

var s:string;

    i,nagydb:integer;

begin

 write('Irj be egy mondatot: ');

 ReadLn(s);

nagydb:=0;

for i:=1 to length(s) do

begin

if (s[i]>='A') and (s[i]<='Z') then

begin

                inc(nagy);

end;;

end;

 WriteLn('A mondatban ',nagy,' darab nagy betu van.');

end.

A programunkban használtunk egy új eljárást, az inc() eljárást (increase). Ez az eljárás növeli a változó értékét 1-gyel, tehát az inc(nagy) helyett írhattuk volna ezt is: nagy:=nagy+1

Hasonlóan létezik egy eljárás, amely csökkenti a változó értékét eggyel, ez a dec() vagyis decrease.