26
PROGRAMOZÁSMÓDSZERTAN I PROGRAMOZÁSMÓDSZERTAN I A számítógépek programozása szorosan összefügg a gépek építésével. Kezdetben maguk a gépek készítői voltak a programozói, szerelői és felhasználói is egyben. Az első és egyben talán leghíresebb programozó mégsem a gépek készítői közül került ki, sőt nem is az elektronikus gépek korából. Az 1840-es évek közepén Charles Babbage készített egy programozható gépet (analitikai gép), amire az első algoritmusokat Ada Lovelace készítette. A mellett, hogy a világ első programozója hölgy volt még az is érdekesség, hogy valójában a leánykori neve Ada Byron és bizony a híres költő Lord Byron lánya volt. 1. ábra Ada Lovelace A programozás az elektronikus gépek korában lett elterjedt foglalkozás. A második világháború alatt Neumann János által vezetett kutatócsoport elkészítette az első működőképes elektronikus számítógépeket, amikhez bizony már komoly programokat kellett írni. Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett gépi kódban íródtak. Ezek teljesen eltértek a ma használatos programozási nyelvektől. A gépek működéséhez közeli nyelveket, alacsony szintű nyelveknek nevezzük. Ilyen nyelv az ASSEMBLY, ahol szinte a gépi kódhoz hasonlóan kell bevinni a megfelelő utasításokat. Az emberi nyelvhez hasonlatos programozási nyelveket pedig magas szintű nyelveknek nevezzük. A magas szintű nyelvek közül az egyik legismertebb és talán legelterjedtebb a BASIC programozási nyelv. Kidolgozása Kemény János nevéhez fűződik. 1

PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

PROGRAMOZÁSMÓDSZERTAN I

A számítógépek programozása szorosan összefügg a gépek építésével. Kezdetben maguk a gépek készítői voltak a programozói, szerelői és felhasználói is egyben. Az első és egyben talán leghíresebb programozó mégsem a gépek készítői közül került ki, sőt nem is az elektronikus gépek korából. Az 1840-es évek közepén Charles Babbage készített egy programozható gépet (analitikai gép), amire az első algoritmusokat Ada Lovelace készítette. A mellett, hogy a világ első programozója hölgy volt még az is érdekesség, hogy valójában a leánykori neve Ada Byron és bizony a híres költő Lord Byron lánya volt.

1. ábra Ada Lovelace

A programozás az elektronikus gépek korában lett elterjedt foglalkozás. A második világháború alatt Neumann János által vezetett kutatócsoport elkészítette az első működőképes elektronikus számítógépeket, amikhez bizony már komoly programokat kellett írni. Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett gépi kódban íródtak. Ezek teljesen eltértek a ma használatos programozási nyelvektől. A gépek működéséhez közeli nyelveket, alacsony szintű nyelveknek nevezzük. Ilyen nyelv az ASSEMBLY, ahol szinte a gépi kódhoz hasonlóan kell bevinni a megfelelő utasításokat. Az emberi nyelvhez hasonlatos programozási nyelveket pedig magas szintű nyelveknek nevezzük. A magas szintű nyelvek közül az egyik legismertebb és talán legelterjedtebb a BASIC programozási nyelv. Kidolgozása Kemény János nevéhez fűződik.

1

Page 2: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

A magas szintű nyelvek megjelenésével rohamosan megnőtt a felhasználók és programozók száma. Innenstől kezdve nem csak pár ember kiváltsága maradt a számítástechnika, hanem hétköznapi szakmává és szórakozássá változott. Az 1980-as évek hozták az igazi áttörést, amikor az IBM és az Apple megjelentette az elérhető árú PC családjait. Megvalósult egy álom a számítástechnika fanatikusok körében, mert mindenki megvehette a saját számítógépét, amin aztán otthon készíthette a saját programjait.

A programozási nyelvek segítségével megjelentek az első, úgynevezett strukturált programok.

Egy programot akkor nevezünk strukturáltnak, ha nem tartalmaz feltétel nélküli ugrást, és algoritmusa teljes mértékben megvalósítható véges mélységig egymásba ágyazott, egyszerű és összetett program struktúrákkal (szerkezetekkel).

Ehhez a programot modulárisan kell felépítenünk. Ez a moduláris felépítés persze sokszor elég nagy fejtörést okoz.

Mielőtt beleugrunk a strukturált programozás tanulmányozásába néhány alapfogalmat tisztáznunk kell!

MUNKAHELYZET- ESETFELVETÉS

ALAPFOGALMAK

Algoritmus:

Elemi lépések véges, logikus sorozata, amellyel egy probléma megoldását adja. A megfelelő bemenetre mindig ugyanazt a kimenetet kapjuk.

Program:

Az algoritmus megfogalmazása a számítógépek, vagy a fordító programok számára érthető módon.

2

Page 3: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Szintaktika:

A programozás nyelvtana, szintaktikailag helyes valami, ha helyesen van leírva és a program el is fogadja.

Szemantika:

A programozás jelentése, szemantikailag helyes valami, ha helyesen működik.

A programokat szintaktikailag tudja ellenőrizni a fordító, szemantikailag nem.

Fordító program (compiler):

Egy program, amely valamilyen programozási nyelven megírt programot gépi kódúvá fordít. Minél magasabb szintű egy nyelv annál bonyolultabb a fordítás. A fordítás a program elejétől a végéig megtörténik, és csak azután kezdi el futtatni a gép, ha szintaktikailag mindent rendben talált. A compileres nyelvek előnye a gyorsabb működés, hátránya, hogy a lefordított kód csak ugyanolyan architektúrájú gépen futtatható, mint amelyiken fordították.

Értelmező (interpreter):

Egy program, amely valamilyen programozási nyelven megírt programot utasításonként értelmez és végre is hajt. A fordítás utasításonként megy és a végrehajtás szintén ebben a sorrendben történik. Ha a program szintaktikailag hibás részhez ér, akkor hibaüzenettel megszakítja a program fordítását és futtatását. Az interpreteres nyelvek előnye, hogy a program hordozható minden olyan helyre, ahol van interpreter, hátránya, hogy a program sokkal lassabban fut.

Megjegyzések (kommentek):

A megjegyzéseket a fordító nem veszi figyelembe. Azt a célt szolgálják, hogy a programot olvasó könnyebben eligazodjon a programban, ezzel segítve a kód újrafelhasználását. Kommenteket nem csak mások segítésére, hanem a saját munkánk későbbi megkönnyítésére is érdemes elhelyezni a programunkban. Egy több ezer soros programban a készítője is hamar eltévedhet, főleg ha esetleg hónapokkal vagy évekkel később szeretne módosítani rajta.

Kulcsszavak:

A nyelv rögzített jelentéssel bíró szavai, amelyet más célra nem lehet használni.

Konstans:

Egy program része; egy objektum, amelynek van egy értéke. Egy állandót (értékként) a programozó a kód létrehozásakor meghatároz. Egy állandót csak az értéke jellemez, úgyhogy a konstans fogalma és a konstans értéke teljes szinonimák.

3

Page 4: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

A változó:

A változó egy elnevezett memória terület. Jellemzője a neve, memóriacíme, típusa, értéke. A változókat általában (nem minden esetben) első használat előtt deklarálni kell, azaz meg kell adni a változó nevét és típusát. Ennek hatására a fordító automatikusan kijelöl egy memóriacímet ennek a változónak. Arról, hogy melyik cím lett lefoglalva a változó számára a programozónak nem kell tudnia, hiszen a programban mindenütt a változó nevével hivatkozunk a területre. Erre a területre értéket adhatunk a változónak, és hivatkozhatunk is az ott található értékre.

• A neve: Programozási nyelvtől függően vannak rá szabályok. A legtöbb esetben nem lehet hosszabb 8 karakternél és kerülendők az ékezetes betűk és különleges karakterek. Érdemes úgy nevet választanunk, hogy valamilyen szinten tükrözze a feladatát is. Pl.: adat1, bevitel, nyomtat stb.

• A memóriacíme: Nekünk nem kell ismernünk az értékét, de bizonyos nyelvekben felhasználjuk.

• Az értéke: Egy változónak a definiálás pillanatától kezdve van pillanatnyi értéke. Még akkor is, ha még nem adtunk neki értéket, de ilyenkor nem célszerű felhasználni a pillanatnyi értéket. A definiált, de még értéket nem kapott változókat inicializálatlan változóknak szokás nevezni. Egyes nyelvek fordító programjai nem engedik felhasználni az inicializálatlan változók értékét, míg más nyelveknél a programozó felelőssége, hogy ne használja. Használat előtt azért érdemes minden változónknak megfelelő kezdőértéket adni, vagy lenullázni, ha azt a nyelv nem teszi meg automatikusan.

• A típusa: A típus szintén nyelvfüggő is lehet, de azért vannak olyan általános típusok, amik minden nyelvben szerepelnek. Ilyen például a szám, szöveg, logikai.

Deklaráció:

Meghatározás. Ha változó deklarálásáról beszélünk, akkor azt akarjuk kifejezni, hogy megadjuk a fordító számára egy használni kívánt változó nevét és típusát. Egyszer történhet egy változó számára helyfoglalás, de lehetséges, hogy többször is tudatnunk kell a fordítóval a változó nevét és típusát. Ez többmodulos programok esetén lehetséges.

Inicializálás:

Inicializálásnak nevezzük, amikor egy változó definiálásával egyidejűleg értéket is adunk a változónak. Vagyis a változót kezdőértékkel látjuk el.

Kifejezés:

Kifejezés elemek összekapcsolva operátorokkal, ahol a kifejezés elem lehet egy konstans, egy változó, függvényhívás, vagy egy zárójelezett kifejezés.

Kifejezés kiértékelés:

Ha egy kifejezés több operátort is tartalmaz, akkor a kiértékelésük sorrendjét a precedencia szabályok határozzák meg. A zárójelezett elemek természetesen külön értékelődnek ki és utána vesznek részt a teljes kifejezés kiértékelésében.

4

Page 5: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Precedencia szintek:

Minden operátor, amit a számítástechnikában használunk, be van sorolva egy precedencia szintre, ami meghatározza a kiértékelésének a sorrendjét. Ennek egy része megegyezik a matematika és logika szabályaival, más része pedig programfüggő lehet.

Operátorok:

Operátorok segítségével tudunk a kifejezésekben elvégezni műveleteket. Több csoportjuk létezik attól függően, hogy hány operandussal rendelkeznek. Vannak egy-két és több operandusú operátorok. Általánosságban elmondható, hogy az egyoperandusú operátorok magasabb precedenciájúak, mint a kétoperandusúak. Valamint a legtöbb szint balról-jobbra értékel ki, kivételek az értékadó operátorok, valamint legtöbb egyoperandusú operátor (hiszen ezeket elé szokás írni és az értékelődik ki hamarabb, amely közelebb áll az operandushoz.

Következő alapvető szintekben bemutatok pár példát erre:

1. előjel operátor:-, logikai tagadás operátor: !

2. : *, /

3. +, -

4. <, >, <=, >=

Hatókör:

A bizonyos elemek nem az egész program területén használhatóak és láthatóak. Gondoljunk csak bele, hogy egy több ezer soros programban milyen kavarodást okozhatna, ha minden változó és függvény érvényességi köre az egész programra kiterjedne. Elég csak azt számba venni, hogy a sok változónak a feladatát fejben kellene tartani folyamatosan. A hatókör kialakítása gyakorlatilag az ilyen elemek élettartamát, használhatóságát korlátozza. Az olyan változókat, elemeket, amiket az egész program területén használhatunk, globális hatókörűnek nevezzük, azokat, pedig amik csak egy meghatározott részén élnek a programnak, lokális hatókörrel rendelkezőnek nevezzük. Egy-egy objektum hatókörét a programozó definiálja.

5

Page 6: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

MUNKAHELYZET- ESETFELVETÉS

ALGORITMUS LEÍRÓ MÓDSZEREK

A számítógépen futó algoritmusokat többféleképpen is le lehet írni. A különböző programozási nyelvekben az algoritmusok szintaktikája között sok eltérés lehet, de alapjaiban a működési elvük ugyanaz marad. Egy jó programozónak igazán nem okoz gondot egy algoritmus egyik nyelvről a másikra való átültetése.

A nyelvektől független algoritmus leíró módszerek is léteznek. Ezek közül most hárommal foglalkozunk részletesebben:

1. Pszeudokód

2. Folyamatábra

3. Struktogram

1. Pszeudokód

Ez a leírási módszer a magyar nyelv elemeit használja fel az algoritmusok rögzítésére. Gyakorlatilag a szerkezete egy strukturált programra hasonlít. Vannak rögzített kulcsszavai, amiket a megfelelő utasítások megjelenítésére használunk. Az algoritmus soronként van rögzítve, ami alapból a futási sorrendet is szemlélteti.

Nézzük meg egy példán keresztül a használatát:

Start

Kérd be A

Kérd be B

C=A+B

Ird ki C

Vége

Ha megvizsgáljuk az algoritmust láthatjuk, hogy egy elég egyszerű módszert használtunk a leírásra. A pszeudokód valahol a szöveges algoritmus és a strukturált programnyelvek között foglalja el helyét az algoritmus leírásban.

6

Page 7: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

2. Folyamatábra

A folyamatábra az egyik legrégebbi leíró eszköz, amit használunk az informatikában. Nagy előnye a gyors áttekinthetőség és egyértelműség. Hátránya, hogy nagyobb méretű algoritmusoknál elég nehézkes a használata.

A folyamatábra gyakorlatilag grafikus elemek segítségével jeleníti meg az algoritmusokat. Síkidomok és nyilak az alkotóelemei. Nézzük meg az alapvető elemeket:

A program kezdete:

Start

Input/Output (beviteli/kiviteli) művelet:

Be A

Értékadás, általános művelet:

A=5

Vizsgálat, elágazás:

Program vége:

Ezeknek az elemeknek a felhasználásával nézzünk meg egy példát egy egyszerű algoritmusra:

A>10Igaz

Hamis

Stop

7

Page 8: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Start

Be A

Be B

C=A+B

Ki C

Stop

8

Page 9: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

3. Struktogram

A struktogram már fejlettebb leíró eszköz, mint az előbbiek. Sokkal áttekinthetőbb algoritmusokat lehet készíteni vele. Az ábrázolás szempontjából előnyük, hogy nem használnak adatáramlási vonalakat és nyilakat, ezért sok hely takarítható meg. A programkészítés szempontjából is hasznos az alkalmazásuk, mert a tervezőt a programrészletekben, struktúrákban való gondolkozásra készteti.

A struktogramokban a felhasznált szimbólumok egységesen téglalap alakúak, amelyek egy oldalukkal csatlakoznak egymáshoz:

Utasítások:

1. utasítás

2. utasítás

A feltételes elágazás:

Igaz A>10 Hamis

Ismétlődő tevékenységek (ciklusok)

Meg kell ismerkednünk egy újabb utasítástípussal, a ciklussal. Akkor használjuk, ha egy vagy több utasítást -valamilyen feltételtől függően- többször kell végrehajtanunk. A feltételt ciklusfeltételnek, az ismételendő utasításokat ciklusmagnak nevezzük.

Jelölése:

1. utasítás 2. utasítás

9

Page 10: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Logikai feltétel

Ciklusmag

_________________________________________________________________________________________

SZAKMAI INFORMÁCIÓTARTALOM

STRUKTURÁLT PROGRAMOK ELEMEI

Programozás során több féle alkotóelemből is építkezhetünk, de három csoportba soroljuk azokat az utasításokat, amikből fel tudunk építeni egy strukturált programot:

• Szekvencia

• Szelekció

• Iteráció

A következő részben azt vizsgáljuk meg, hogy a fenti utasításcsoportok hogyan működnek, és segítségükkel mi módon lehet összetettebb programozási feladatokat megoldani.

:Szekvencia

Szekvenciának nevezzük a sorban egymás után való utasítások végrehajtását.

10

Page 11: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Ez gyakorlatilag azt jelenti, hogy olyan egyszerű utasítások sorozatát írjuk a programunkba, amit aztán a számítógép egymásután végrehajtva eljut a program végére. Gyakorlatilag a program minden esetben ugyan úgy fog lefutni. A külső tényezők, vagy a bevitt adatok nem módosítanak az algoritmus menetén. Általában mindenki ilyen programok segítségével kezd el ismerkedni a programozással. Aránylag egyszerűen áttekinthetőek és könnyen meg lehet érteni a működésüket.

Nézzünk egy egyszerű példát a hétköznapi életből a szekvenciális algoritmusra:

1. Felkelek

2. Mosakszom

3. Felöltözök

4. Reggelizek

5. Elindulok a munkába

Gondolom a fenti algoritmus mindenki számára ismerős. Gyakorlatilag ez a hétköznapi reggelek szekvenciális programja. Hogy kicsit árnyaltabban is lássuk a problémát, most egy matematikai feladaton keresztül mutatjuk be a szekvenciális algoritmust pszeudokód segítségével:

1. Start

2. Bekér A

3. Bekér B

4. C=A+B

5. Kiír C

6. Vége

Ebben az esetben két szám összeadását írtuk le egy szekvenciális algoritmusban. Ha felcserélném két sorát, valószínűleg gondom akadna az algoritmus végrehajtásával. Tehát egy szekvenciális algoritmusnál nagyon fontos az utasítások sorrendje.

Most nézzük meg a fenti algoritmust folyamatábra segítségével:

11

Page 12: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Start

Be A

Be B

C=A+B

Ki C

Animáció

Stop

Harmadszorra pedig struktogrammal is készítsük el az algoritmust!

Bekér A

Bekér B

C=A+B

Kiír C

12

Page 13: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Ha megvizsgáljuk a fenti algoritmusokat, akkor láthatjuk, hogy gyakorlatilag teljesen ugyan azokkal a problémákkal állunk szemben mindegyik esetben. Ha most fel kellene írnunk egy szorzásnak, vagy kivonásnak az algoritmusát akkor ott is egy szekvenciális programot kellene készítenünk.

Nagyon sok problémát meg lehet oldani ezekkel a módszerekkel, de ahogy egy olyan problémához érkeznénk, ahol valamilyen döntést kell hozni a program folytatásához, már elakadna a tudományunk. Ezért is kellett bevezetni a következő struktúrát:

Szelekció

A szelekció egy elágazás a programban. Egy döntési ponthoz érve a program kiértékel egy logikai feltételt és annak megfelelően fut tovább csak az igaz, vagy csak a hamis ágon.

Itt már nem egy sorban végrehajtott utasítássorozatról van szó, hiszen a döntéstől függően két féle útja is van már a program befejezésének.

Nézzünk meg először egy hétköznapi példát ennek szemléltetésére:

1. Rájövök, hogy nincs itthon tej.

2. Elhatározom, hogy beszerzek valahonnan.

3. Ha esik az eső, akkor a szomszédtól kérek, különben elmegyek a boltba.

A fenti példa is mutatja, hogy az algoritmusnak kétféle befejezése is lehet a körülményektől függően. Nem tudjuk előre megmondani melyik eset fog történni, hiszen ezt az algoritmust különböző időpontokban „lefutatva” más és más eredményt kaphatunk.

Nézzünk meg egy matematikai példát is! Döntsük el egy számról, hogy pozitív, vagy negatív! Nézzük a pszeudokódját az algoritmusnak!

1. Start

2. Bekér A

3. Ha A>0 akkor kiír „pozitív” különben kiír”negatív”

4. Vége

Ugyanez a probléma folyamatábra segítségével megfogalmazva:

13

Page 14: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Start

Be A

Animáció

Harmadszorra pedig jöhet a struktogram!

A>0Igaz

Ki”Pozitív”

Hamis

Ki”Negatív”

Stop Stop

Be A

A>0Igaz Hamis

Ki „Pozitív Ki „Negatív”

14

Page 15: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

A kicsit szemfüles olvasó rájöhet, hogy sántít valahol ez a kis algoritmus, mert ha 0 a bekért szám, akkor ugye itt „negatív” jelzőt fog kapni, ami matematikailag nem igazán helyes. Vajon hol kellene módosítani a programon és mit, hogy a 0 számot is kezelje az algoritmus?

Sok esetben bizony a szekvencia sem elég minden probléma megoldásához, azért még egy struktúra a rendelkezésünkre áll a programjaink elkészítéséhez!

Iteráció

Az iteráció ismétlést, ismétlődést jelent. Köznapi szóhasználatban ciklusoknak szokták a programozók nevezni ezeket a struktúrákat. Gyakorlatilag a programban egy utasításrész ismétlődéséről van szó, aminek számát valamilyen feltétel meghatározza.

Azt az utasításrészt, amit a ciklus ismétel ciklusmagnak nevezzük.

Három fő csoportba soroljuk a ciklusokat:

• Előírt lépésszámú

• Előfeltételes

• Utófeltételes

Az előfeltételest szokták elöltesztelőnek, az utófeltételest pedig hátultesztelőnek is nevezni, de ebbe bele lehetne kötni, mert a ciklus feltétele és maga a tesztelés nem feltétlenül ugyan azon a helyen szerepel a lefordított programban.

Előírt lépésszámú ciklus

Ebben az esetben már a program írása során pontosan tudjuk, hogy hányszor szeretnénk ismételni a programrészletet.

Mivel itt konkrét számról van szó, ezért a programba be is építjük, mint egy konstans értéket. A program addigi futásától függetlenül a ciklusmag mindig ugyan annyiszor fog megismétlődni.

Nézzük meg egy-egy hétköznapi probléma tükrében:

15

Page 16: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Tegyük fel, hogy rántottát készítünk 4 tojásból. Már a készítés megtervezésekor tudni fogjuk, hogy lesz egy tevékenység, amit biztosan négy alkalommal kell megismételnünk. Ez pedig a tojások feltörése lesz. Nézzünk rá egy algoritmust szövegesen:

1. Előkészítem a hozzávalókat.

2. Felteszem a serpenyőt olajjal a tűzhelyre.

3. Feltörök egy tojást , tojásszámlálót növelem egyel.

4. Beleteszem a tányérba.

5. Ha a tojásszámláló kisebb mint 4 akkor 3 pontra megyek.

6. Megsütöm a rántottát.

7. Vége

A példa nem a legszemléletesebb, de tükrözi azt, hogy már előre el volt döntve, hogy az ismétlés hányszor fog megtörténni. Keressünk egy szemléletesebb matematikai problémát a pszeudokóddal való bemutatásra!

A feladat legyen az, hogy a program adja össze az első 100 pozitív egész számot, és írja ki az eredményt a képernyőre.

1. A=0

2. Ciklus J=1-től 100-ig

3. A=A+J

4. Ciklus vége

5. Kiír A

6. Vége

Most nézzük meg ugyanezt folyamatábra segítségével!

16

Page 17: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Start

Animáció

Előfeltételes ciklus (elöl tesztelő)

A ciklus elején található egy logikai feltétel, ami kiértékelődik, és ettől függően hajtódik végre a ciklusmag.

Ebben az esetben nincs megadva a programban pontosan, hogy az ismétlés hányszor fog megtörténni. Olyan eset is előfordulhat, hogy egyszer sem fog lefutni a ciklus, mert a feltétel kiértékelése ilyen eredményt hozott.

Nézzünk meg itt is egy hétköznapi példát erre a ciklusra is először!

J<100

Igaz

Hamis

J=1

Ki A

A=A+J

Stop

17

Page 18: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Fel kell töltenünk egy uborkás üveget uborkákkal. Milyen algoritmus alapján tennénk ezt meg?

1. Veszek egy üveget magam elé.

2. Megnézem fér-e még bele, ha igen 3. pont, ha nem 5. pont.

3. Teszek bele egy uborkát.

4. 2. pontra megyek.

5. Vége

Akkor most ugyanez a probléma picit matekosabban és pszeudokóddal:

A program bekér számokat és összeadja őket egészen addig, amíg el nem érjük a 100-at.

1. Ciklus amíg A<100

2. Bekér B

3. A=A+B

4. Ciklus vége

Na, akkor most folyamatábrával is!

18

Page 19: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Start

Animáció

Persze a struktogram sem maradhat el:

Utófeltételes ciklus (hátul tesztelő)

Ennél a ciklusnál a feltétel és kiértékelése a ciklus végén, a ciklusmag mögött található. Ez gyakorlatilag azt is jelenti, hogy a ciklusmag egyszeri lefutása után történik a kiértékelés. Tehát ebben az esetben a ciklusmag egyszer biztosan lefut.

Hamis

A<100

Igaz

Stop

Be J

A=A+J

A<100

Be J

A=A+J

19

Page 20: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Ezzel a módszerrel általában olyan feladatokat oldunk meg, ahol a magnak mindenképp futnia kell egy alkalommal. A lefutása után történik a logikai feltétel kiértékelése, ami eldönti, hogy a ciklus fog-e még ismétlődni.

Egy hétköznapi példa, ami szerintem mindenkinek ismerős lesz:

1. Megkérdezem elmehetek-e moziba.

2. Amíg a válasz nem, vissza az 1 pontra

3. Elmegyek moziba.

Nézzünk meg egy példát pszeudo algoritmussal egy jelszó bekérést:

1. Ismételd

2. Bekér J

3. Amíg J<>”Titok”

4. Kiír”Jelszó elfogadva”

Folyamatábra segítségével:

20

Page 21: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Start

Struktogram:

Azokat a ciklusokat, amik soha nem állnak meg, végtelen ciklusnak nevezzük.

Üres ciklus, aminek nincs utasítás a ciklusmagjában.

J<>”Titok”

Igaz

Hamis

Be J

Ki „Elfogadva”

Stop

Be J

J<>”Titok”

Ki” Jelszó elfogadva”

21

Page 22: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

Összefoglalás

Mi az algoritmus?

Milyen adatszerkezeteket ismer?

Milyen algoritmus leíró eszközöket ismer?

Milyen elemekből áll egy strukturált program?

TANULÁSIRÁNYÍTÓ

Ha szeretnénk megtanulni a fent ismertetett anyagot, akkor először az alapfogalmakkal kell tisztában lennünk. Ha ezeket ismerjük, akkor rátérhetünk az algoritmus leíró módszerekre. Itt sajnos nem úgy működnek a dolgok, hogy kiválasztunk egy számunkra szimpatikus módszert és azt tanuljuk meg rendesen. Mindegyikre szükségünk lesz, sőt néha még kevesellni is fogjuk, mikor olyan probléma elé kerülünk, amit nem lehet másképp megoldani.

A tanulás során javaslok egy olyan sorrendet betartani, ami a tananyag ismertetésekor is történt. Ha tisztában vagyunk az alapfogalmakkal és a leíró rendszerekkel, akkor érdemes gyakorolni a használatukat pár feladaton keresztül, ami a következő részben megtalálható lesz!

22

Page 23: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

ÖNELLENÖRZŐ FELADATOK

Ebben a részben találunk néhány feladatot, ami segít elmélyíteni a fenti ismereteket. A feladatokat itt kell megoldani a kijelölt helyen. Segítségképpen nyugodtan lapozzunk vissza kezdetben a tananyaghoz, de az lenne a végső cél, hogy teljesen önállóan tudjuk megoldani a feladatokat!

1. feladat

Készítsen szöveges algoritmus pszeudokód segítségével a páros és páratlan számok kiválogatására!

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

_________________________________________________________________________________________

23

Page 24: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

2. feladat

Készítsen algoritmustervet folyamatábra segítségével, ami eldönti egy bekért számról, hogy páros vagy páratlan!

24

Page 25: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

3. Feladat

Készítsen algoritmus tervet struktogram segítségével! A program egy bekért évszámról döntse el, hogy szökőév volt-e vagy sem!

25

Page 26: PROGRAMOZÁSMÓDSZERTAN Iaktivitas-tiszk.hu/elearning/prog1/prog1.pdf · Ekkor még nem programozási nyelvek segítségével készültek a szoftverek, hanem a gépek nyelvén, úgynevezett

PROGRAMOZÁSMÓDSZERTAN I

IRODALOMJEGYZÉK

FELHASZNÁLT IRODALOM

KUROS, A. G. : Felsőbb algebra. Budapest (Tankönyvkiadó) 1978.

KNUTH, Donald, E.: A számítógép-programozás művészete I-III. Budapest (Műszaki) 1987.

OBÁDOVICS J. Gyula: Matematika. Budapest (Műszaki) 1978.

REIMANN József: Matematika. Budapest 1982.

WIRTH, Niklaus: Algoritmusok + Adatstruktúrák = Programok. Budapest (Műszaki) 1982.

26