Programming | Programming theory » Alapfeladatok és algoritmusok

Datasheet

Year, pagecount:2001, 17 page(s)

Language:Hungarian

Downloads:370

Uploaded:September 17, 2010

Size:156 KB

Institution:
-

Comments:

Attachment:-

Download in PDF:Please log in!



Comments

No comments yet. You can be the first!

Content extract

Alapfeladatok és algoritmusok 2.1 Algoritmus készítés Áttekintés: • • • • Az algoritmus fogalma, tulajdonságai Az algoritmus tervezés lépései, moduláris programozás A strukturált program fogalma, elemei Algoritmus leíró eszközök, a pszeudokód 2.11 Az algoritmus fogalma Feladat: homokvár körüli vizesárok feltöltése tengervízzel. Megoldás: Vedd a kezedbe a kisvödröt. Ismételd az alábbiakat mindaddig, amíg tele nem lesz a vizesárok: Merítsd tele a vödröt tengervízzel. Töltsd a vizesárokba. Tedd le a kisvödröt. Bár a fenti tevékenységek ismétlést tartalmaznak, véges számú lépésben a feladat megoldásához (megtelik a vizesárok) vezetnek. Algoritmusnak nevezzük az egyértelműen előírt módon és sorrendben végrehajtandó tevékenységek véges sorozatát, melyek alapján egy feladattípus véges számú lépésben megoldható. Az algoritmus leírásának egyértelműnek, pontosnak, lépésenként végrehajthatónak kell

lennie. Az algoritmus struktúráját szekvenciák, szelekciók és iterációk alkotják, melyeket tetszőleges mélységben egymásba lehet ágyazni. A legtöbb számítógépben csak egy processzor van, amely képtelen a párhuzamos feldolgozásra mi sem foglalkozunk ilyen algoritmusokkal. Az algoritmus alapján elkészítendő programjainkban a számítógép egyszerre csak egy tevékenységet képes végrehajtani, majd ezután kezd hozzá a következő tevékenységhez, vagy megvizsgál egy feltételt és annak függvényében az egyik, vagy egy másik tevékenység végrehajtását kezdi el. Mi a C++ nyelvet használjuk majd a feladataink végső megoldásához. Egy számítógép által érthető nyelven megírt algoritmust programnak nevezünk. Az algoritmus, illetve program leglényegesebb tulajdonságai, és a vele szemben támasztott követelmények: • Az algoritmus lépésekből (elemi tevékenységekből, instrukciókból, utasításokból) áll. Az algoritmus

végrehajtása lépésenként történik. A végrehajtás során megtett lépések sorozatát folyamatnak (processznek ) nevezzük. • Minden lépésnek egyértelműen végrehajthatónak kell lennie. Az algoritmus leírásában a végrehajtót minden lehetséges esetre fel kell készíteni. A végrehajtónak minden egyes lépés után tudnia kell, hogy mi lesz a következő lépés. • Egy algoritmusban hivatkozhatunk összetett lépésekre is, melynek részletezését később adjuk meg. A részletezés során olyan szintig kell eljutnunk, ahol már végrehajtható (elemi) tevékenységek szerepelnek. • A végrehajtásnak mindig van valamilyen tárgya. Ezeket a tárgyakat a programozásban adatoknak nevezzük. Az adatoknak tulajdonságai vannak Az algoritmus készítésénél csak azokat az adatokat és tulajdonságokat vesszük figyelembe, amelyek a feladat végrehajtásához szükségesek. Ezt a válogatási, egyszerűsítési eljárást absztrakciónak nevezzük • A

végrehajtandó utasításoknak valamilyen célja van, a végrehajtás során megváltoznak az adatok bizonyos tulajdonságai. • Az algoritmusnak véges számú lépésben el kell vezetnie a feladat megoldásához. A végesség a meghatározásban kétszer is szerepel. A feladat megoldására szolgáló lépések száma is vége kell legyen, de minden egyes lépésnek is be kell fejeződnie. • Az algoritmusnak általában vannak bemenő (input) adatai, melyeket felhasznál. Ezeket az adatokat nevezzük inputnak. Az imput adatok bizonyos jól meghatározott halmazból kerülnek ki. • Az algoritmusnak legalább egy kimenő (output) adatot produkálnia kell. Bármilyen fantasztikus dolgokat is művel egy folyamat, ha nem kommunikál a külvilággal, definíció szerint nem algoritmus. (Az output természetesen nem feltétlenül numerikus érték, lehet szöveg, grafika, vagy más egyéb információ, amely az algoritmus eredményeként jön létre.) • Az algoritmus legyen

hatékony. Azinstrukciók legyenek könnyen követhetőek, pontosak, egyszerűen végrehajthatóak. • Legyen a program felhasználóbarát, a felhasználó szempontjait maximálisan vegye figyelembe. 2.12 Algoritmus tervezés, moduláris programozás Az algoritmus tervezésének első lépése a feladat körültekintő és alapos elemzése, a probléma megfogalmazása. A feladat leírását feladat specifikációnak is szokás nevezni, ezt írásban is rögzíteni kell. Az algoritmusok leírására számtalan eszköz létezik, ilyen a mondatszerű leírás, a folyamatábra, a stuktogram vagy a Jackson jelölés. Feladat specifikáció Egy számítógépen megoldandó feladat felmerülésekor törekedni kell arra, hogy a feladat megfogalmazása egyértelmű legyen, valamennyi lehetséges esetet lefedjen. A megrendelő gyakran hiányos, és/vagy pontatlan igényekkel lép fel, a megoldási módszer keresése viszont csak akkor kezdődhet el, ha a feladatot pontosan ismerjük és

írásban is rögzítettük, vagyis megadtuk a feladat specifikációt. Adatok tervezése Mivel az algoritmus adatokon dolgozik, meg kell tervezni a feladatban szereplő külső és belső adatokat, adat szerkezeteket. Csak ezután kezdhetünk hozzá az adatokat mozgató, manipuláló lépések megtervezéséhez. Moduláris programozás Az algoritmus (program) tervezésének alapja a dekompozíció. A bonyolultabb feladatokat általában nem lehet egyszerre megoldani, ezért részekre, modulokra kell azokat bontani. A részekre ki kell dolgozni a megoldás menetét, majd a részeket újra össze kell állítani, hogy azok együttműködve, egymásra épülve a teljes feladat megoldását szolgáltassák. A moduláris programozás olyan programozási mód, melyben a teljes program modulokból áll. Az egyes modulok jól meghatározott részfeladat megoldását végzik, kezelhető méretűek, egyértelmű céljuk van és jól definiáltan csatlakoznak a program többi moduljához. A

moduláris programozás irányelvei a következők: • "Oszd meg és uralkodj" elv: A feladatokat egyértelműen le kell osztani modulokra. A modulok belső működésébe más modul nem szól bele. A modul a saját feladatának tökéletes elvégzéséért felelős. Fontos, hogy a modulok lehetőleg egymástól függetlenül működjenek, mert így a hibák kiszűrése egyszerűbb, a feladat átláthatóbb, könnyebben módosítható. • Adatok (információ) elrejtésének elve: Az egyes modulok csak saját adataikon dolgozzanak, csak akkor használjanak közös adatokat, ha ez elkerülhetetlen. • Döntések elhalasztásának elve: Csak akkor hozzunk meg egy döntést, ha az elengedhetetlenül szükséges. Mindazon döntéseket, amelyekhez még nincs elég ismeretünk, halasszuk későbbre - különben előfordulhat, hogy egy korán meghozott döntést a későbbiekben meg kell változtatnunk. • Döntések kimondásának elve: A feladat megoldása során, ha

már meghoztunk egy döntést, azt le kell rögzíteni, mert különben erről később esetleg megfeledkezve, ellentmondásos döntéseket hozhatunk. A modulokra bontás iránya alapvetően kétféle lehet: • • Felülről lefelé (top-down) tervezés esetén a megoldást felülről lefelé, fokozatosan, lépésenként finomítjuk. A feladatot részfeladatokra, a részfeladatokat ismét kisebb feladatokra bontjuk mindaddig, amíg az úgynevezett elemi tevékenységekhez jutunk. Az elemi tevékenységek tovább nem bonthatók, egy lépésben végrehajthatók. Az alulról felfelé (bottom-up) tervezés lényege, hogy már meglévő, kész modulokból építkezünk. Erre akkor kerül sor, ha bizonyos részfeladatokat egy előző feladat kapcsán már megoldottunk (gondolva a későbbi felhasználásokra is), vagy amikor egy rutingyűjteményt (szoftvert) vásároltunk. A bonyolult feladatok megoldásánál többnyire mind a felülről lefelé, mind az alulról felfelé

tervezést használjuk, megfelelően ötvözve a két módszert. 2.13 Strukturált program, mondatszerű leírás Tetszőleges algoritmus felépíthető a következő elemekből: • • • • Szekvencia: Egymás után végrehajtandó tevékenységek sorozata. Szelekció: Választás megadott tevékenységek közül Iteráció: Megadott tevékenységek ismételt végrehajtása. Feltétel nélküli ugrás: Vezérlés átadása a program egy megadott pontjára. Tulajdonképpen a feltétel nélküli ugrás nem igazán szükséges elem, gyakori használata áttekinthetetlenné teszi a programot. Böhm és Jacopini tétele A szekvencia, szelekció és az iteráció segítségével minden olyan algoritmus felépíthető, amelynek egy belépési és egy kilépési pontja van. Strukturált program A csak szekvenciákból, szelekciókból és iterációkból építkező programot strukturált programnak nevezzük. A strukturált programozásban nem megengedett a feltétel nélküli

ugrás, így többek között a ciklusból sem ugorhatunk ki. Ebből az is következik, hogy a program minden vezérlő szerkezetének (szekvencia, szelekció, iteráció) - és magának a teljes programnak is - egyetlen belépési és egyetlen kilépési pontja van, így a program lényegesen áttekinthetőbb. A strukturált programozás általános módszereit E. W Dijkstra dolgozta ki Mondatszerű leírás A mondatszerű leírás, vagy pszeudokód lényege, hogy az algoritmust mondatszerű elemekből építjük fel. Ez nagyon hasonlít a beszélt nyelvre, illetve annak írásos formájára, de be kell tartanunk bizonyos szabályokat, a struktúrák képzésére megállapodás szerinti formákat és szavakat használunk. Az alapelemek az alábbiak: Bevitel, kivitel: Be: . változók felsorolása [] az adatokkal szemben támasztott követelmények Ki: . kifejezések felsorolása [] az kiírás formájára vonatkozó követelmények Szekvencia: Az egymás után végrehajtandó

tevékenységek sorozata. Tevékenység1 Tevékenység2 Tevékenység3 Az egy sorba írt tevékenységeket kettőspont választja el: Tevékenység1 : Tevékenység2 : Tevékenység3 PÉLDA: Elindulás autóval. Értékadó utasítás: a szekvencia egy speciális fajtája, formája: változó = kifejezés Szelekciók (elágazások, feltételes utasítások): Programrészek közötti választás Egyágú szelekció Ha Feltétel akkor Utasítás(ok) Elágazás vége Jelentése: Ha Feltétel teljesül, akkor az Utasítás(ok) végrehajtásra kerülnek, egyébként nem. A program az Elágazás vége után folytatódik (Az elágazás vége kiírás el is hagyható.) PÉLDA: Ha szabad a pálya, akkor . Kétágú szelekció Ha Feltétel akkor Utasítás(ok)1 Egyébként Utasítás(ok)2 Jelentése: Ha Feltétel teljesül, akkor az Utasítás(ok)1 kerül(nek) végrehajtásra, egyébként Utasítás(ok)2. A program mindkét esetben az Elágazás vége után folytatódik PÉLDA: Ha süt a

nap, akkor kimegyek napozni egyébként kitakarítom a szobámat. Többágú szelekció Elágazás Feltétel1 esetén Utasítás(ok)1 Feltétel2 esetén Utasítás(ok)2 . Feltételn esetén Utasítás(ok)2 egyéb esetben Utasítás(ok)n+1 Elágazás vége Jelentése: Ha az i-dik (i=1, 2, .n) feltétel teljesül, akkor a neki megfelelő utasítás(oka)t kell végrehajtani, majd a feladat megoldása az Elágazás vége után folytatódik. PÉLDA: Elágazás Piros lámpa esetén Megállok : Kézifék beh. Sárga lámpa esetén Megállok : Kézifék beh Zöld lámpa esetén Továbbhaladok Elágazás vége Iteráció (Ciklus): Valamely tevékenység sorozat ismételt végrehajtását jelenti. Az ismétlés feltételhez kötött. Elől tesztelő ciklus Ciklus amíg Lefutási feltétel Cikusmag utasításai Ciklus vége Működése A ciklusmag utasításait mindaddig kell végrehajtani. amíg a Lefutási feltétel igaz Ha a lefutási feltétel hamissá válik, a végrehajtás a ciklus vége

után folytatódik. Ha a lefutási feltétel már a ciklusba való belépéskor hamis, a ciklusmag utasításai egyszer sem hajtódnak végre. PÉLDA: Ciklus amíg van nálam "Mosópor reklám anyag" elmegyek a köv. lakásig bedobom a csomagot Ciklus vége Hátul tesztelő ciklus: Ciklus Ciklusmag utasításai mígnem Kilépési feltétel Ciklus vége Működése: A ciklusmag utasításait mindaddig kell végrehajtani. amíg végre a Kilépési feltétel igazzá válik. Ha a Kilépési feltétel igazzá válik, a végrehajtás a ciklus vége után folytatódik. A ciklusmag utasításait egyszer mindenképpen végrehajtja a rendszer, mivel a Kilépési feltétel kiértékelése a ciklusmag utasításainak végrehajtása után történik. PÉLDA Ciklus leszedek egy almát a fáról mígnem tele a kosár Ciklus vége A legtöbb magasszintű programnyelvtől eltérően a C nyelvben a hátul tesztelő ciklus megvalósítása Lefutási feltétel megfogalmazásával, az alábbi

pszeudokód szerint történik: Hátul tesztelő ciklus a C-ben Ciklus Ciklusmag utasításai amíg Lefutási feltétel Ciklus vége Működése: A ciklusmag utasításait mindaddig kell végrehajtani. amíg a Lefutási feltétel igaz Ha a lefutási feltétel hamissá válik, a végrehajtás a ciklus vége után folytatódik. A ciklusmag utasításait egyszer mindenképpen végrehajtja a rendszer, mivel a lefutási feltétel kiértékelése a ciklusmag utasításainak végrehajtása után történik. Növekményes (számláló) ciklus Ciklus ciklusváltozó = .kezdőértéktől végértékig lépésközzel Ciklusmag utasításai Ciklus vége Működése: A ciklusmag utasításai a ciklusváltozó kezdő és végértékének, valamint a lépésszámnak megfelelő számszor kerülnek végrehajtásra. Program, eljárás, illetve függvény leírása Program Konstansok: (konstansok felsorolása érték megadásával) Változók: (változók felsorolása értéktartomány

megadásával) Definíciók: Utasítás(ok) Program vége Eljárás Eljárásnév (formális paraméterlista) Konstansok: (konstansok felsorolása érték megadásával) Változók: (változók felsorolása értéktartomány megadásával) Utasítás(ok) Eljárás vége Függvény Típus Függvénynév (formális paraméterlista) Konstansok: (konstansok felsorolása érték megadásával) Változók: (változók felsorolása értéktartomány megadásával) Utasítás(ok) Függvénynév = Kifejezés Függvény vége 2.14 Pontszám lekérdező rendszer Feladat: Készítsünk egy számítógépes lekérdező rendszert egy csoport hallgatói számára a zh eredmények lekérdezésére. A feladat kiírás ilyen formában meglehetősen pontatlan és hiányos. A következő kérdések merülnek fel: hány zh-t írtak, a hallgatót milyen azonosító adat alapján szeretnénk visszakeresni, mit találunk a pontszám helyén, ha a hallgató nem írta meg a zh-t, a pontszám mellé ki kell-e

írni további - a pontszámtól függő - információt. A kérdések tisztázása után ismét megfogalmazzuk a feladatot, pontosítva ez egyes részfeladatokat: Feladat: Készítsünk egy számítógépes lekérdező rendszert egy csoport hallgatóinak zh-eredményeiről. Külön jelezni kell, ha a hallgató nem írt zh-t A csoport egy zh-t írt, a pontszám 0 és 100 közötti érték, aki nem írt zh-t, annál a pontszám -1 értékű. Egy hallgatóhoz a következő - előzetesen már rögzített - adatok tartoznak: - Hallgató azonosítója (6 karakter, minden hallgatónak egyedi) - Hallgató neve (maximum 30 karakter) - Zh eredmény pontszáma (0 és 100 közötti érték, ill. -1, ha nem írt zh-t) A program kérje be a hallgató azonosítóját. Ha van ilyen azonosító, akkor írja ki a hallgató nevét és a zh pontszámát. Írja ki azt is, ha a hallgató nem írt zh-t vagy nem érte el a minimális pontszámot, amely konstans 50-es érték. Ha nincs az adatok

között a megadott azonosító, akkor írja ki, hogy nincs ilyen érték. A lekérdezés mindaddig folytatható, amíg az azonosító első karaktere * karakter nem lesz. Ekkor köszönjön el a rendszer a felhasználótól Megoldás: Először határozzuk meg az adatokat, amelyeket az algoritmus használni fog. Az algoritmusnak rendelkezésére kell álljon az összes hallgató fent említett adata: Azonosító Név KOVJAN01 Kovács János LOBANT01 Lobogós Antal . Pontszám 52 -1 VERZSO02 Verebes Zsolt 34 Szükségünk van még egy változóra, amely a bekért azonosítót fogja tartalmazni. Először próbáljuk meg saját szavainkkal leírni a megoldást: - - Kérd be a hallgató azonosítóját ! Amíg a bekért azonosító nem "*", csináld az alábbiakat: - Keresd meg a hallgató adatait a táblában az azonosító alapján - Ha megvan, akkor - Írd ki a hallgató nevét - Írd ki, hogy nem írt zh-t ha a pontszám -1, különben írd ki a pontszámot.

Egyébként: adj hibaüzenetet ! - Kérd be a következő azonosítót ! Köszönj el. A megoldásban a "Keresd meg a hallgató adatait a táblában" egy eléggé összetett feladat, ezt egy külön eljárás fogja megoldani, amelyet itt most nem részletezünk. Írjuk le az algoritmust a 2.13 pontban megismert pszeudokóddal Eljárás Keresés (azonosito, hallgato, megvan) . Eljárás vége Program Be: azonosito Ciklus amíg azonosito elso karaktere nem "*" Kereses (azonosito, hallgato, megvan) Ha megvan, akkor Ki: Hallgato.Nev Ha Hallgato.pontszam = -1, akkor Ki: "Nem írt zh-t" egyébként Ki: pontszam egyébként Ki: "Nincs ilyen azonosító! " Elágazás vége Be: azonosito Ciklus vége Ki: "Köszönöm az együttműködést !" Program vége Összefoglaló Ebben a fejezetben megismertük az algoritmus fogalmát, A moduláris programozás, a strukruált program elemeit. Az algoritmusok leírására itt és a továbbiakban is

a pszeudokódot, vagy mondatszerű leírást alkalmazzuk. Az algoritmus alapvető struktúráit (szekvencia, szelekció, iteráció) a további fejezetekben példákon keresztül is begyakoroljuk. Vegyük észre, hogy a pszeudokódnak áttekinthetőnek kell lennie, a bekezdésekkel, a kulcsszavak kiemelésével is hangsúlyozzuk az összetartozó részeket. Az algoritmus, illetve a program készítésénél a logikusan átgondolt, tiszta és követhető megoldásokra kell törekedni. Ellenőrző kérdések: • • • • • • • Melyik az a három vezérlőszerkezet, amelyekből a programok felépíthetők ? Mi a lényege a "felülről-lefelé", illetve az "alulról felfelé" építkezésnek ? Milyen eszközök állnak rendelkezésre az algoritmusok megtervezéséhez ? Mit jelentenek az alábbi fogalmak ? - Algoritmus - Szekvencia, szelekció, iteráció - Dekompozíció - Lépésenkénti fonomítás - Moduláris program - Strukturált program - Pszeudokód

A moduláris programozás irányelvei Az egyágú szelekció leírása pszeudokóddal, működése. A kétágú szelekció leírása pszeudokóddal, működése. • • • • A többágú szelekció leírása pszeudokóddal, működése. Az előltesztelős ciklus leírása pszeudokóddal, működése. A hátultesztelő ciklus leírása pszeudokóddal, működése. A növekményes (számláló) ciklus leírása pszeudokóddal, működése. 2.2 Szoftver fejlesztése Áttekintés • • A szoftver fejlesztésének fázisai: Analízis, Tervezés, Kódolás, Tesztelés, Dokumentálás A szoftver élete. Egy összetett feladat számítógép segítségével történő megoldása hosszú és bonyolult munkafolyamat eredménye. Bár a számítástechnikában alkalmazott eszközök rohamos fejlődésével e munkafolyamat nagy része automatizálható, a feladat minden részletre kiterjedő megfogalmazása, elemzése, gépre vitele, majd a működő program ellenőrzése és

átadása a felhasználó számára mind-mind olyan szervezői, programozói és alkalmazói feladatokat feltételez, amelyek emberi beavatkozást, tehát hibalehetőséget is feltételeznek. Egy program, illetve programcsomag fejlesztése alapvetően négy fázisból áll, melyet kiegészít az elkészült termék dokumentálása: Analízis, Tervezés, Kódolás, Tesztelés, Dokumentálás. Az analízis és a tervezés a probléma megoldására irányul, a kódolás a már átgondolt és írásban is rögzített megoldást implementálja (megvalósítja), azaz lefordítja a számítógép nyelvére. A tesztelés és a dokumentálás a hibátlan és a feladat kiírást maradéktalanul kielégítő termék kibocsátását és a használhatóság biztosítását szolgálja. 2.21 Analízis Az analízis (elemzés) során felmérjük, hogy a feladat kiírás kellően pontos-e, egyáltalán megoldható-e a probléma számítógéppel. Tisztázni kell az input adatok körét, a feldolgozás

célját és az input adatokat. Meg kell becsülni a feladat megoldásához szükséges időt és a költségeket A megoldásnak már ebben a szakaszában tisztázni kell minden lehetséges részletkérdést. A feladat megfogalmazása legyen - egyértelmű, teljes, minden részletre kiterjedő, érthető, áttekinthető, pontos, szabatos, tömör, lényegretörő, szemléletes, - jól felépített és tagolt, előretekintő. A beviteli (input) adatokkal szemben a következő kérdéseket kell tisztázni: - Melyek az input adatok (felsorolás, egyértelmű azonosítás), Az input adatok értéktartománya, beviteli formátumuk, Milyen módon kell befejezni a bevitelt, A hibásan bevitt adatok utólagosan javíthatók-e, ha igen, milyen módon, Vannak-e speciális megszorítások, előírások, Milyen kapcsolatok vannak a beviteli adatok között, ezeket kell-e ellenőrizni a bevitel során. A kiviteli (output) adatoknál a következőket kell tisztázni: - Mely adatokat kell

megjeleníteni, - A megjelenítés milyen formában történjen, - Mely adatokat kell megőrizni későbbi felhasználásra, illetve többszöri megjelenítésre, - Milyen formában kell az adatokat megőrizni. Az analízis eredményeként születik meg a feladat specifikáció, melyet dokumentálni kell. Ennek tartalmaznia kell a feladat pontos megfogalmazásán túl az esetleges képernyő- és listaterveket is. Nagyobb rendszerek esetén rendszertervet készítenek, ez többnyire egy szakértői csapat munkájának ez eredménye. 2.22 Tervezés A tervezés feladata, hogy az analízis során összegyűjtött információt alapul véve véglegesen kialakítsa az adat struktúrákat és az adatokat feldolgozó, átalakító algoritmusokat. Egy program megtervezése bonyolult feladat, bár vannak feladat-típusok, többnyire minden feladatot másképpen kell algoritmizálni és nehéz erre általános szabályokat megfogalmazni. Vannak programtervezési módszerek, ajánlások,

szabványok, jelölési rendszerek, melyeket ajánlott, illetve egy adott csapatban dolgozva kötelező betartani. Hogy milyen tervezési módszert válasszunk, az a következő dolgoktól függhet: - A számítástechnika által adott lehetőségek és eszközök Milyen számítógép(ek)re, milyen rendszerre készül a program A megoldandó feladat nagyságrendje, a kezelendő adatok mennyisége Milyen módszerek állnak a rendelkezésre Milyen a tervező csapat felkészültsége, informáltsága Milyen szoftverek állnak a rendelkezésre a tervezéshez Vannak-e tradíciók Van-e megfelelő anyagi fedezet A fejlesztő cég elvárásai, szabványai, főnöki utasítás. A programtervezési módszereket illetően hosszú ideig a strukturált programozás, programtervezés volt a jellemző. Lényege, hogy a programot felülről lefelé, funkcionálisan egyre kisebb lépésekre (modulokra, eljárásokra) bontjuk. A Jackson-féle programtervezési módszer szintén strukturált

módszer, de itt a programszerkezet a bemenő és a kimenő adatszerkezetek összefésüléséből adódik. Az objektumorientált programozás napjaink divatos irányzata, segítségével kisebb energia befektetéssel sokkal hatékonyabban, biztonságosabban tudjuk elkészíteni a programokat. Ennél a módszernél az információ elrejtésének elve minden eddiginél jobban érvényesül: az egyes objektumok adataikkal és eljárásaikkal együtt teljes mértékben felelősek a rájuk bízott feladatok hibátlan megoldásáért. A tervezési szakasz dokumentációja a programterv. A programtervet is tesztelni, ellenőrizni kell, ilyenkor elképzeljük a bemenő adatokat és "fejben" lefuttatjuk a programot. Közben minduntalan fel kell tenni a "Mi történik, ha ." kezdetű kérdéseket A program megtervezésével lényegében meg van oldva a probléma. Fontos, hogy a programterv hibátlan legyen, mert a későbbi szakaszokban egyre nehezebb a hibajavítás. 2.23

Kódolás Ha a terv elkészült, akkor jöhet annak implementálása, azaz kivitelezése. Ennek első fázisa a programtervnek megfelelő forrásprogram elkészítése egy kiválasztott programnyelven. Ez egy eléggé mechanikus folyamat, de feltételezi a programterv alapos ismeretét és természetesen a használt programozási nyelv készségszintű alkalmazását. Mi már elkezdtük a C++ alapvető elemeinek a megismerését, s a továbbiakban is ezt az eszközt használjuk algoritmusaink kódolására. A kódolási szakasz dokumentációja forrásprogram, illetve forrásnyelvi lista. A forrástervi lista akkor jó, ha - pontosan követi a programterv utasításait - áttekinthető, - tömör és egyértelmű megjegyzésekkel van megtűzdelve. A forrásprogram begépelésével természetesen még nincs kész a kódolás, formailag és tartalmilag ellenőrizni kell az elkészült forrásprogramot. A program szintaktikai (formai) és szemantikai (tartalmi) hibákat tartalmazhat.

Szintaktikai hibának nevezzük azt a hibát, amely abból eredt, hogy a nyelv formai szabályainak egyikét nem tartottuk be, ezért a fordító számára nem egyértelmű, hogy mit kell tennie. A szemantikai hiba akkor lép fel, ha a program tartalmilag nem azt valósítja meg, amit a programterv előírt. A szintaktikai hibák kiszűréséhez a fordató ad segítséget, a szemantikai hibák felderítése a programozó, illetve az őt segítő tesztelő munkatárs feladata. 2.24 Tesztelés Amikor egy program szintaktikailag hibátlan, még nem feltétlenül működik helyesen. Az igényes programozó maga is teszteli, ellenőrzi a programját különböző próba-adatokkal, hogy meggyőződjön a program hibátlan, a programtervnek megfelelő működéséről. A programok tesztelésének külön tudománya van, bonyolultabb feladatoknál alaposan elő kell készíteni a tesztelés fázisait, a teszt-adatokat, hogy lehetőleg minden lehetséges variációt kipróbáljunk. A

program tesztelésekor a következőkre kell figyelni: - Pontosan úgy működik-e a program, ahogyan az a feladat leírásában, illetve a programtervben szerepel ? Van-e olyan bemenő adat-kombináció, amelynél hibásan működik, vagy leáll a programfutás ? Eléggé hatékony-e a programfutás ? Biztonságos és egyértelmű-e a program használata ? A program felhasználóbarát ? (Pl szépen néz ki a képernyő, nem idegesítő, teljes mértékben szolgálja a felhasználót, .) 2.25 Dokumentálás Minden fázisnak megvan a maga "terméke", dokumentációja A program elkészülte után is meg kell őrizni valamennyi fázis dokumentációját, ez megkönnyíti a későbbi esetleges bővítések, módosítások kivitelezését. A program fejlesztését végigkísérő dokumentáció összességét fejlesztői dokumentációnak nevezzük, ezt a felhasználó nem, csak a fejlesztő cég őrzi meg. A fejlesztői dokumentáció részei: - Feladat specifikáció

Programterv Forrásprogram Kész program (telepíthető és futtatható program) Tesztadatok listája, a tesztelés jegyzőkönyvei A kész rendszerhez elkészül a felhasználói dokumentáció, amelyet a felhasználó kap meg. A felhasználói dokumentáció részei: - A program által megoldható feladat leírása, az alkalmazás korlátjai A szükséges hardver környezet leírása. Számítógép típusa, a minimálisan szükséges konfiguráció, amely a program futtatásához szükséges. Szoftver környezet. Operációs rendszer, a futtatáshoz szükséges esetleges kiegészítő szoftverek. Fejlesztői környezet, programozási nyelv. - - A program telepítése, betöltése, futtatása. A program használatának részletes leírása: speciális billentyűk használata, az esetlegesen használt ikonok, szimbólumok jelentése, funkciója, a menürendszer ismertetése, segítségkérés lehetőségei. A működés leírása minden részletre kiterjedően, az egyes

funkciók elérésének módja. Képernyőtervek, listatervek. Hibaüzenetek felsorolása, értelmezése, teendők a hiba elhárítására. Biztonsági előírások (pl. adatok időszakos mentése) Felhasználói jogosultságok, esetleges jelszó megadási módok. Ki és milyen feltételekkel jogosult a szoftver használatára (Licence szerződés). 2.26 A szoftver élete Amikor a felhasználó használni kezdi a letesztelt és hibátlannak vélt programot, szinte biztosra vehetjük, hogy lesz még dolga a fejlesztőnek. Egyrészt a leggondosabb tesztelés mellett is előfordulhatnak rejtett hibák, olyan esetek, melyekre a programfejlesztő nem gondolt, de a használat során kiderül, nem megfelelően működik a program. Másrészt a feladat elemzése során nem mindig sikerül a felhasználó minden igényét feltárni, később merülnek fel megoldandó rész-feladatok. A felhasználó többnyire akkor érez rá a számítógép által élvezhető előnyökre, amikor már egy

ideje használja a megrendelt és elkészült programját. Így utólagos bővítésekre, javításokra szinte mindaddig szükség van, amíg a programot használják és rendelkezésre áll a fejlesztői gárda, a fejlesztői dokumentáció. Egy szoftver javított, illetve továbbfejlesztett változatait verziószámmal szokás ellátni. Nagyobb változtatások esetén a verziószám egészrésze, kisebb javításoknál, módosításoknál a verziószám törtrésze változik. Ellenőrző kérdések: • • • • • Hogyan kell elkezdeni egy feladat megoldását ? Hogyan kell megtervezni egy programot ? A fejlesztői dokumentáció milyen elemekből áll ? Mire kell kitérnie a felhasználói dokumentációnak ? Mit jelentenek a következő fogalmak: - Analízis - Feladat specifikáció - Fejlesztői dokumentáció - Felhasználói dokumentáció - Kódolás - Tesztelés - Felhasználóbarát