====== Különbségek ====== A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalon Előző változat Következő változat | Előző változat | ||
programozas_alapok [2015/11/30 14:23] bucsupe |
programozas_alapok [2015/11/30 18:27] (aktuális) |
||
---|---|---|---|
Sor 36: | Sor 36: | ||
STRING s; | STRING s; | ||
BOOLEAN b; | BOOLEAN b; | ||
- | END; | + | ENDVAR; |
</code> | </code> | ||
Sor 60: | Sor 60: | ||
Akkor használjuk ezt a strukturált programozási alapelemet, amikor mindenféle feltétel nélkül utasításokat egymásután sorban szeretnénk végrehajtani. Például a háromszög kerületének kiszámítása az alábbi szekvencia szerint történhet: | Akkor használjuk ezt a strukturált programozási alapelemet, amikor mindenféle feltétel nélkül utasításokat egymásután sorban szeretnénk végrehajtani. Például a háromszög kerületének kiszámítása az alábbi szekvencia szerint történhet: | ||
<code> | <code> | ||
- | INPUT: a; | + | VARIABLES |
- | INPUT: b; | + | INTEGER a,b,c; |
- | INPUT: c; | + | ENDVAR |
- | t := a + b + c; | + | |
- | OUTPUT: t; | + | PROGRAM |
+ | INPUT: a; | ||
+ | INPUT: b; | ||
+ | INPUT: c; | ||
+ | t := a + b + c; | ||
+ | OUTPUT: t; | ||
+ | ENDPROG | ||
</code> | </code> | ||
Sor 71: | Sor 77: | ||
Az alábbi kódban bekérünk két számot, majd összehasonlítjuk azokat és kiírjuk az összehasonlítás eredményét eredményét. | Az alábbi kódban bekérünk két számot, majd összehasonlítjuk azokat és kiírjuk az összehasonlítás eredményét eredményét. | ||
<code> | <code> | ||
- | INPUT: a, b; | + | VARIABLES |
- | IF (a==b) THEN | + | INTEGER a,b; |
- | OUTPUT: "A két szám egyenlő"; | + | ENDVAR |
- | ELSE | + | |
- | IF (a<b) THEN | + | PROGRAM |
- | OUTPUT: "A b nagyobb mint az a!"; | + | INPUT: a, b; |
- | ELSE | + | IF (a==b) THEN |
- | OUTPUT: "Az a nagyobb mint a b!"; | + | OUTPUT: "A két szám egyenlő"; |
- | ENDIF | + | ELSE |
- | ENDIF | + | IF (a<b) THEN |
- | + | OUTPUT: "A b nagyobb mint az a!"; | |
+ | ELSE | ||
+ | OUTPUT: "Az a nagyobb mint a b!"; | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDPROG | ||
</code> | </code> | ||
A példában két szelekció van egymásba ágyazva. Az elsőben azt vizsgáljuk hogy egyenlő-e a két szám. Ha nem egyenlő (ELSE ág) akkor egy újabb szelekció következik, mely megvizsgálja hogy az a kisebb-e mint a b. | A példában két szelekció van egymásba ágyazva. Az elsőben azt vizsgáljuk hogy egyenlő-e a két szám. Ha nem egyenlő (ELSE ág) akkor egy újabb szelekció következik, mely megvizsgálja hogy az a kisebb-e mint a b. | ||
+ | |||
+ | ===== Iteráció ===== | ||
+ | Amikor ciklikusan, többször ismétlődve kell végrehajtani egy tevékenységet, vagy tevékenység sorozatot, akkor ciklusszervező utasítást használunk. Minden ciklus két fő részből áll. A ciklus fejből és a ciklus magból. A ciklus fej egy feltételt tartalmaz, mely vezérli a ciklust. A ciklus mag tartalmazza azokat az utasításokat amiket a ciklusban végre kell hajtani. | ||
+ | Háromféle ciklusszervező szerkezet van, melyet sorban végignézünk. | ||
+ | |||
+ | ==== Elől tesztelő ciklus ==== | ||
+ | |||
+ | A leggyakoribb és legáltalánosabb ciklusszerkezeta az elöltesztelő ciklus. Ebben az esetben először a ciklusfejben megadott feltétel kiértékelődik, majd ha ez igaz akkor végrehajtódik a ciklus mag. Ezek a lépések addig ismétlődnek amig a ciklusfejben lévő kifejezés igaz. Ha hamis, akkor vége a ciklusnak és a program végrehajtása a ciklust lezáró utasítás után folytatódik. | ||
+ | A ciklusszervezésnél figyelni kell arra, hogy nehogy végtelen ciklust készítsünk. Ez a programozó felelőssége. A végtelen ciklus azt jelenti, hogy olyan eset alakul ki, mely kapcsán a feltétel nem változik meg és mindig igaz értéket fog adni. Például ha a fenti ciklusban az a változó értékét nem növeljük, akkor végtelen ciklus alakul ki, ugyanis az a változó sosem fogja elérni a 100-at, így a feltétel mindig igaz lesz. | ||
+ | |||
+ | Példaként nézzük a számok kiíratását 1-100 között: | ||
+ | <code> | ||
+ | VARIABLES | ||
+ | INTEGER a; | ||
+ | ENDVAR; | ||
+ | |||
+ | PROGRAM | ||
+ | |||
+ | a=1; | ||
+ | WHILE (a<=100) | ||
+ | OUTPUT: a; | ||
+ | a=a+1; | ||
+ | ENDWHILE | ||
+ | | ||
+ | OUTPUT: "Vége a programnak"; | ||
+ | | ||
+ | ENDPROG | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== Hátul tesztelő ciklus ==== | ||
+ | A hátultesztelő ciklusban először végrehajtódik a ciklusmag, majd a ciklusfeltétel kiértékelődik. Programozási nyelvtől függ hogy a feltétel hogyan értelmezendő. Pascalban a ciklusfeltétel a kilépés feltételét határozza meg, ellentétben a C nyelvvel, ahol a ciklusban maradás feltételét jelenti. | ||
+ | A pszeudó nyelvben mindkét megvalósítás létezik (lásd a [[pszeudo-nyelv|leírásban]]). | ||
+ | |||
+ | <code> | ||
+ | VARIABLES | ||
+ | INTEGER a; | ||
+ | ENDVAR; | ||
+ | |||
+ | PROGRAM | ||
+ | |||
+ | a=1; | ||
+ | DO | ||
+ | OUTPUT: a; | ||
+ | a=a+1; | ||
+ | WHILE (a<=100) | ||
+ | | ||
+ | OUTPUT: "Vége a programnak"; | ||
+ | | ||
+ | ENDPROG | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ==== Növekményes ciklus ==== | ||
+ | A harmadik ciklusszervező lehetőség, melyet általában minden nyelv megvalósít arra ad lehetőséget, hogy adott számszor hajtsunk végre egy utasítássorozatot. Én azt szoktam mondani ha tudjuk hogy hányszor kell végrehajtani valamit akkor a növekményes ciklust használjuk, ellenkező esetben az előző kettő típus valamelyikét. Egyszóval a példaként használt számkiíró programo tipikusan növekményes ciklussal szokás programozni. | ||
+ | |||
+ | <code> | ||
+ | VARIABLES | ||
+ | INTEGER a; | ||
+ | ENDVAR; | ||
+ | |||
+ | PROGRAM | ||
+ | |||
+ | FOR a=1 TO 100 | ||
+ | OUTPUT: a; | ||
+ | NEXT | ||
+ | | ||
+ | OUTPUT: "Vége a programnak"; | ||
+ | | ||
+ | ENDPROG | ||
+ | </code> | ||
+ | |||
+ | Vegyük észre hogy ebben a ciklusban nem kellett az a változónak értéket adni a ciklus előtt, és a ciklus magban sincs utasítás amivel növeljük a változó értékét. Ugyanis aciklus fejben szerepel a változó és éppen arról szól ez a ciklus hogy a változónk sorra felveszi az értékeket a megadott intervallumban. | ||
+ | |||