Elôzô számunkban megtárgyaltuk a programtervezés alapvetô miben létét, az adat és típús fogalmát. Az értékadást és a kétágú szelekciót. Most a kétágú szelekciótól tárgyaljuk a fontosabb momentumokat.

A kétágú szelekciók - folytatás

A kétágú szelekciók egymásba ágyazhatóak az alábbi forma szerint:

Persze az egymásbaágyazás nem jelenti azt, a stuktogram szabályait ne tartanánk be, tehát nem lóghatnak át a téglalapok egymásba ! Természetesen bizonyos esetekben egyszerűsíthetô a kétágú szelekciók felépítése bizonyos logikai műveletekkel. Az egymásbágyazott kétágú szelekciókat olyan esetben lehet egyszerüsíteni ha a külsô szelekció és a második belsô szelekció igaz vagy hamisra elvégzendô tevékenysége ugyanaz. Ilyenkor a két megadott feltételt vagy-gyal kössük össze.

Vagy séma:

Létezhet olyan két egymásba ágyazott szelekció is melynek elsô hamis ága ki írja, hogy valami nem stimmel, az igaz ágában pedig a második szelekció van. A második szelekció igaz ága adja meg a jó eredményt míg a hamis az elsôhöz hasonlóan a hibát írja ki. Ekkor a két szelekció feltételét és-sel kössük össze.

Az elsô példa elrettentés célját szolgálja:

Végig vesszük a logikai műveleteket melyeket a szelekciók feltételeinek egyszerűsítésére is használhatunk:

A VAGY művelet:

 
A B A VAGY B
hamis hamis hamis 
hamis igaz igaz 
igaz hamis igaz 
igaz igaz igaz 
Az ÉS művelet:  
A B A ÉS B 
hamis hamis hamis 
hamis igaz hamis 
igaz hamis hamis 
igaz igaz igaz 
A NEM művelet:  
A NEM A
hamis igaz
igaz hamis
A KIZÁRÓ VAGY művelet:  
A B A XOR B 
hamis hamis hamis 
hamis igaz igaz 
igaz hamis igaz 
igaz igaz hamis 
Most már probláema nélkül tudjuk módosítani a két egymásba ágyazott - így dupla feltételű - szelekciót. Nincs más dolgunk mint, hogy összefüzzük a két feltételt: HA az elsô ÉS a második feltétel is teljesül AKKOR hajtsa végre az utasítás ellenkezô esetben mást csináljon. Az elrettentô példa emészthetôbb formája:

A többágú szelekciók

Elôfordul, hogy adott változó esetén kölönbözô értékekre különbôzô módon kell reagálni. Ez még nem is lenne baj, mert több kétágú szelekció megvalósításával lehetséges is. Csak ott van a baj, ha már rengeteg értéket kell lekezelni akkor óriási - áttekinthetetlen mértékig lesznek a kétágú szelekciók egymásbaágyazva.

Ennek elkerülése végett van a több ágúszelekció, mint minden nyelv (szinte minden nyelv) egyik alap eleme.

Stuktogramm beli ábrája:

Az ábráról is egyszerűen leolvasható, hogy különbözô értékekre különbözô môdon reagál programunk. Amennyiben egyik értéket sem vette fel a vizsgált kifejezés akkor lehetôség van egy egyébként ág kialakítására.

FONTOS, hogy vizsgálat során az elemeket mind fel kell sorolni, s nem lehet olyan feltételt adni, mint pl. Egy kétágú szelekciónál, ha X < 0. Itt meg kell adni, hogy ha X: =-1, -2, -3, -4 Vagy X: [-1, -1000] intervallumban van. Az intervallum megadása is véges sok elem felsorolásával egyenértékű. Bizonyos programozási nyelvek megengedik az intervallum használatát (Pascal), míg mások nem (C, C++).

Lássunk egy példát a használatra:

kisbetű ...

Itáráció - azonos tevékenységek egymás utáni ismételése adott feltétel szerint

Ahogy a fejezet címben megadtam, az itáráció nem más, mint azonos tevékenységek egymás utáni ismételése adott feltétel szerint. Típus szerint két féle ciklust (a ciklus az iteráció (az ismétlés) nyelvi megjelenítô eszköze) különböztetünk meg: Mindkettôt különbözô esetekben használjuk. Ésszerű - megfelelô - használatuk része a program optimalizálásának.

Az Elöltesztelô ciklus

Stuktogram ábrája:

Az Elöltesztelô ciklus jellemzôi:

Minden elöltesztelôs ciklusnál gondoskodnunk kell arról, hogy a lefutási feltétel belátható idôn belül hamissá váljon, az-az a végrehajtás egyszer kilépjen a ciklusból. Amennyiben ezt nem tesszük meg (vagy rosszul alakítjuk ki a lefutásifeltételt) akkor a végtelen-ciklusba kerülhetünk, melynek eredménye, hogy programunkból nem lehet kilépni, s sok galiba támad ...

Nézzünk egy példát ennek alkalmazására. Olvassunk be egész, elôjeles számokat és adjuk ôket össze amíg 0-t nem ütünk be.

 

A Hátultesztelô ciklus

Stuktogram ábrája:

A Hátultesztelô ciklus jellemzôi:

Minden hátultesztelô ciklusnál gondoskodnunk kell arról, hogy a kiugrási feltétel belátható idôn belül igazzá váljon, az-az a végrehajtás egyszer kilépjen a ciklusból. Amennyiben ezt nem tesszük meg (vagy rosszul alakítjuk ki a kiugrásifeltételt) akkor a végtelen-ciklusba kerülhetünk, melynek eredménye, hogy programunkból nem lehet kilépni, s sok galiba támad ...

Nézzünk meg az elôzô példát átalakítva: (Olvassunk be egész, elôjeles számokat és adjuk ôket össze amíg 0-t nem ütünk be.)

Ez a példa persze úgy sikerült, hogy mind a két megoldás jó. Ez egy speciális helyzet, a két különbözô ciklus-fajta működését tekintve más így nem alkalmazhatjuk kényünk - kedvünk szerint hol az egyiket hol a másikat.

Léptetéses ciklus - az elöltesztelô speciális változata

    Gyakran elôfordulnak olyan problémák melyekben elôre magadott (vagy a felhasználó által megadott) számszor kell egy cselekmény(sorozatot) végrehajtani. Mivel tudjuk mennyiszer kell végrehajtani kialakíthatunk egy olyan elöltesztelô ciklust melynek feltétele a attól függ, hogy a ciklus változó elérte -e már a kívánt értéket (az-az db-szor végrehajtotta e a tevékenységet - a ciklusmagot.)

Lássuk hogyan oldhatnánk meg általánosan egy elöltesztelô ciklussal azt, hogy x-szer hajtson végre egy tevékenységet:

 
Ebbôl az általános elöltesztelô ciklusformából alakították ki az új nyelvi - és stuktogrami- elemet a léptetéses ciklust:
 

 
Az elôzô példánkat melyben 0 végjelig olvastuk be a számokat modosítsuk úgy, hogy megkérdezzük a felhasználótól, hány számot kíván beolvasni, majd beolvassuk az x számot és összeadjuk. Íme a stuktogram:
 

 
 A megismert stuktogram elemek nyelvi használata
 
    Minden cikkünkben lesz egy ilyen rész melyben az elmélet során megismert formulákat a két legismertebb nyelvben a C és Pascal nyelvben kipróbáljuk. Ezt azért tesszem, hogy könnyebbé tegyem az érdeklôdô Olvasó feladatat. Nem megyünk az adott programozási nyelv mélységeibe, mert ezt már megtették az abC ill. Pascal Iskola rovatok. Csak a stuktogram formulához illô témákat tárgyaljuk.

Röpke áttekintés kedvéért nézzük meg hogyan épül fel egy Pascal ill C program:

program {a programfej - programnevének megadása}

uses {az esetlegesen használt modulok neve}

{deklarációk kezdete}

label {NA ezt a parancsot NE használjuk.}
const {Konstansok deklarálása}
type {Típusok definiálása}
var {Változók deklarálása}
 

procedure ... {Rutinok részletes kifejtése}
var ... {lokális deklarációk}
begin
  utasítások;
end;
 
function ... {Értékkel visszatérô rutinok (funkciók) részletes kifejtése}
var ... {lokális deklarációk}
begin
  utasítások;
end;

{deklarációk vége}

BEGIN {A program fô részének kezdete}
  utasítások; {utasítások}
  ...
END. {A program fô részének vége}

 

<preprocessziós parancsok>
<egyéb használt modulok megadása>
<típus definíciók>
<függvény prototípusok>
<globális változók>
<függvények>
 

<típus> FüggvényNév(<paraméterek>)
{
  <lokális deklarációk>

  utasítások;

  <return <visszatérési érték>>
}

 
<típus> main(<paraméterek>)
{
  utasítások;

  <return <visszatérési érték>>
}

 

    Láthatjuk, hogy a C nyelv felépítése sokkal lazább, nincs mindennek kötött helye. Viszont sokkal szigorúbb más tekintetben, a kis- és nagybetűk terén melyeket megkülönbözteti - ez Unix maradvány, ill. minden nevet - deklarálni kell.
 

Nos lássuk az értékadást, mint elsô fontos m?veletünket:

 
Láthatjuk, hogy mindkét nyelv esetében az egyenlôség jellel adjunk értéket az BAL oldalon álló változónak.

A különbség, hogy Pascal-ban := (tehát kettôspont és egyenlô)
 

Változó deklarálása:

Adat bevitele:

Ezt csak parancs szintjén, mert az abC ill. Pascap rovatban volt már róla szó:

Kétágú szelekció:

Egymásbaágyazott kétágú szelekció:

Többágú szelekció:

 

Látjuk, hogy Pascal-ban megadhatunk intervallumot is, míg C-ben fel kell sajna sorolni az összel elemet. Pascalban a hatásköre a kiválasztott elem után 1 parancs vagy begin - end; közé rakva több. C-ben hasonlóan, csak break-kal ki kell szálni a switch-bôl, hogy az elsô jó elem után NE vizsgálja meg a többit.
 

Elöltesztelô ciklus

Hátultesztelô cilkus

 
FIGYELEM: A Pascal hátultesztelô ciklusa megegyezik a stuktogram szerinti felépítéssel, az-az a kilépési feltétel kell amíg a C-ben NEM, mert ott a lefutási feltétel kell !!!

    Következô számunkban folytatjuk a léptetéses ciklus Pascal ill. C formuláját, majd a stuktogram elemeit.
Amennyiben valakinek kérdése van a fent elmondottakkal kapcsolatban, az írjon az alábbi eMail-cimre.
 

Bérczi László
eMail:PC-XUser@IDG.HU, Subject: "ProgTerv rovat"
BELA@MI.STUD.PMMFK.JPTE.HU
Köszönetet mondanék fôiskolai tanáromnak, Bálintné Farkas Judit tanárnônek a felhasznált irodalomért ([1]), és segítségért.