Bevezetés az algoritmikába

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Bevezetés az algoritmikába"

Átírás

1 Bevezetés az algoritmikába Egyetemi jegyzet Ionescu Klára Kolozsvár, 2007

2

3 Bevezetés az algoritmikába

4 Műszaki szerkesztő: Ionescu Klára és Buzogány László Formátuma: B5 vágott Nyomtatta és kötötte: Egyetemi Könyvkiadó Kolozsvár Szaklektorok: dr. Kása Zoltán, Buzogány László és Takács Andrea

5 Tartalomjegyzék Bevezetés A SZÁMÍTÓGÉPES FELADATMEGOLDÁS LÉPÉSEI A programozói tevékenység A feladatmegoldás lépései számítógépes környezetben Alkalmazások minőségi szempontjai AZ ALGORITMUSOK ÁBRÁZOLÁSA Algoritmusok Az algoritmus fogalma Az algoritmusok leírásánál használt elemek Algoritmusok ábrázolása folyamatábrák és pszeudokód nyelvek segítségével A strukturált programozás alapelvei Lineáris struktúrák Elágazási struktúrák Ismétlő struktúrák Az alapstruktúrák jelölése pszeudokódban Egyszerű alapszabályok A feladatok számítógépes megoldásához fűződő általános kérdések Algoritmusok helyessége Az algoritmus végrehajtásához szükséges idő Az algoritmus által feldolgozott adatok számára szükséges memória mérete Algoritmusok egyszerűsége Algoritmusok optimalitása Algoritmusok létezése Megoldott feladatok Felcserélés Maximumérték Elnökválasztás Kitűzött feladatok LÉPÉSEK FINOMÍTÁSA Bevezetés Megoldott feladatok Eukleidész algoritmusa Prímszámok Fibonacci-számok Háromszög Fordított szám Törzstényezők Konverzió...66

6 6 TARTALOMJEGYZÉK Gyors hatványozás Kitűzött feladatok PROGRAMOZÁSI TÉTELEK Bevezetés Egyszerű programozási tételek Összeg és szorzat Döntés Kiválasztás Szekvenciális (lineáris) keresés Megszámlálás Minimum- és maximumkiválasztás Kiválogatás Összetett programozási tételek Szétválogatás Sorozat halmazzá alakítása Keresztmetszet Egyesítés Összefésülés Megoldott feladatok Összeg Párok Arány Hőmérséklet Teljes négyzet Négyzetgyök Statisztika Osztályfőnök Bűvös négyzet Maximális összegű leghosszabb részsorozat Kitűzött feladatok ALPROGRAMOK Bevezetés Algoritmusok és programok fejlesztési módozatai A top-down típusú (fentről lefele) programozás A bottom-up (lentről felfele) programozás Moduláris algoritmustervezés Megoldott feladat A moduláris programozás alapszabályai Moduláris dekompozíció Moduláris kompozíció Modulok tulajdonságai A modularitás alapelvei Algoritmusok helyességének ellenőrzése A fekete doboz módszere Az átlátszó doboz módszere Megoldott feladatok...120

7 TARTALOMJEGYZÉK Polinom értéke adott pontban Polinomok összege Polinomok szorzata Determináns Kitűzött feladatok RENDEZÉSI ALGORITMUSOK Bevezetés Összehasonlításos rendezési módszerek Buborékrendezés (Bubble-sort) Egyszerű felcseréléses rendezés Válogatásos rendezés Minimum/maximum kiválasztásra épülő rendezés Beszúró rendezés Rendezések lineáris időben Leszámláló rendezés (ládarendezés, Binsort) Számjegyes rendezés (Radix-sort) REKURZIÓ Bevezetés Közvetlen rekurzió Megoldott feladatok Egy szó betűinek megfordítása Szavak sorrendjének megfordítása Faktoriális Legnagyobb közös osztó Számjegyösszeg Descartes-szorzat k elemű részhalmazok Konverzió Fibonacci-sorozat (Vigyázat: ellenpélda!) Rekurzív szerkezetű feladatok A {0, 1, 2} halmaz elemeivel generált sorozatok Az {1, 2,..., n} halmaz minden részhalmaza Partíciók Halmazpartíciók Kamatos kamat Kitűzött feladatok A VISSZALÉPÉSES KERESÉS MÓDSZERE (BACKTRACKING) Bevezetés A visszalépéses keresés általános bemutatása Iteratív algoritmus Rekurzív algoritmus királynő a sakktáblán Variációk Zárójelek...171

8 8 TARTALOMJEGYZÉK Legrövidebb utak Játékok Szürjektív függvények A visszalépéses keresés bővítése S pénzösszeg kifizetése Összegkifizetés, minimum számú bankjeggyel Visszalépéses keresés a síkban Labirintus Fénykép Legnagyobb méretű tárgyak Kitűzött feladatok AZ OSZD MEG ÉS URALKODJ MÓDSZER (DIVIDE ET IMPERA) Bevezetés Az oszd meg és uralkodj módszer általános bemutatása Megoldott feladatok Szorzat Minimumszámolás Hatványozás Bináris keresés Összefésülésen alapuló rendezés (MergeSort) Gyorsrendezés (QuickSort) Hanoi tornyok Úszómedence Kitűzött feladatok MOHÓ ALGORITMUSOK (GREEDY MÓDSZER) Bevezetés A mohó algoritmus általános bemutatása Megoldott feladatok Összeg Az átlagos várakozási idő minimalizálása Buszmegállók Autó bérbeadása Hátizsák Minimális feszítőfák (Kruskal és Prim) Minimális hosszúságú utak (Dijkstra algoritmusa) Heurisztikus mohó algoritmusok Utazóügynök Gráfszínezés Összegkifizetés legkevesebb számú bankjeggyel Kitűzött feladatok Algoritmusok listája Szakirodalom...251

9 Bevezetés A számítógép megjelenése, de főleg erőteljes behatolása a gazdaságba, majdnem minden munkahelyre és az emberek személyes életébe ma már azt jelenti, hogy a számítógéppel megoldható feladatok és alkalmazások egyre változatosabbakká, egyre összetettebbekké és elengedhetetlenül szükségesekké váltak. Amikor egy számítógépet használunk, nemcsak a gép működik, hanem azok a programok is, amelyek biztosítják, ellenőrzik és összehangolják a számítógép működését, és lehetővé teszik azoknak a programoknak a végrehajtását, amelyek közvetlenül fontosak az alkalmazásaink szempontjából. Ebből következik, hogy a távoli jövőben is egészen biztosan egyre több programra lesz szükség a világban. Ez jól hangzik a kezdő programozó számára, de számolnunk kell egy sor sajátos következménnyel. Már ma sem lehet csak úgy összedobálni egy programot, de a jövőben még több szabály, módszer és megszorítás várható, amelyek a csoportmunkát, olvasható programok írását és a könnyű frissítéseket hivatottak biztosítani. A programokat, általában egy megrendelő számára írja a programozó cég, tehát az első legfontosabb cél a megrendelő igényeit kielégíteni. De ahhoz, hogy egy cégnek ez eredményesen sikerüljön, megfelelő tervezési és megvalósítási stratégiát kell követnie. Egy alkalmazás kivitelezéséhez nem elég a programozási környezet ismerete. Ennél fontosabb elsajátítani a feladatok elemzési módszereit, megtanulni kiválogatni a legelőnyösebb eszközöket (programozási nyelvet, illetve környezetet, a környezet könyvtáraiban létező alprogramokat, korábban megírt programrészleteket, saját unitokat stb.), megtalálni a leghatékonyabb algoritmusokat és eredményesen kódolni ezeket. Ennek a jegyzetnek az egyik célja felkészíteni a kezdő programozót arra, hogy a fent felsorolt követelményeknek eleget tehessen. Látni fogjuk, hogy ezek között a legigényesebb tevékenység az algoritmus megtervezése és annak belátása, hogy az valóban helyes és megfelelően hatékony. Ehhez elsősorban gondolkodnunk kell, de a gyakorlat is rendkívül fontos. A jegyzet tehát az algoritmusokkal foglakozik. A hallgató implementálhatja ezeket valamely, már eddig megismert programozási környezetben, illetve, ennek hiányában, ajánljuk a Pascal nyelv elsajátítását. (A jegyzet nem tartalmazza egyetlen programozási nyelv szintaxisát sem.) A kitűzött feladatok megoldása

10 10 BEVEZETÉS az algoritmus megtervezését és a megfelelő program megvalósítását jelenti. Ezért a jegyzetbe programozásra vonatkozó sajátos tanácsok is bekerültek. Egy adott feladat megoldására lehetséges több, különböző programot írni: valójában k programozó k különböző megoldást fog adni, de ezeknek az alapja sok esetben ugyanaz az algoritmus. De az algoritmusok is különbözhetnek ugyanazon feladat megoldásakor. Ezek lehetnek egyenértékűek, vagyis azonos hatékonyságúak, de lehetnek különbözők a hatékonyság szempontjából is. Ilyenkor mondjuk, hogy egyik algoritmus kisebb bonyolultságú mint a másik. A bonyolultság fogalmának tárgyalása nem célja a jegyzetnek, de a feladatok elemzése és megoldása során elkerülhetetlen a bonyolultság megállapítása, főleg akkor, amikor két vagy több algoritmust össze fogunk hasonlítani. Bemutatásra kerül néhány alapvető kérdés az algoritmusok létezésének, helyességének, futási idejének és optimalitásának bizonyítását illetően. Az algoritmusokat a tervezés során nem szoktuk azonnal egy adott programozási nyelvben írni, hanem valamilyen ábrázolási módszert választunk. E módszerek közül egyesek grafikai eszközöket használnak (például a folyamatábrák), mások leírják vázlatosan az algoritmust (pszeudokód nyelvek). Ezen ábrázolásmódokban egyszerűsítéseket és a programozási nyelveknél kevésbé szigorú szabályokat alkalmazunk. A jegyzetben az algoritmusokat egy egyszerű pszeudokód nyelvben írjuk le, amelynek szintaxisát a 2. fejezetben adjuk meg. A programfejlesztés egyik módja, amelyet ebben a jegyzetben alkalmazunk a strukturált programozás alapszabályaihoz igazodik. A strukturált programozás elemeit, valamint a moduláris programozás előnyeit szintén a 2. fejezetben tárgyaljuk. A fejezet végén megoldott feladatok egyszerűek, a kezdőknek sem okoznak gondot, a kitűzött feladatok pedig alkalmat adnak a gyakorlásra. Algoritmustervezéskor először egy vázlatot készítünk, ezt ellenőrizzük, kiegészítjük, módosítjuk, többször javítgatjuk. Az algoritmust kódolás után is tovább finomítjuk. A lépésenkénti finomítás elvével a 3. fejezetben ismerkedünk meg. Ahhoz, hogy valóban hasznos tagjai lehessünk egy programozó csoportnak, nem elég, hogy értsünk az algoritmusok tervezéséhez és elemzéséhez. Olyan algoritmusokat kell megvalósítanunk, amelyek könnyen olvashatók és amelyek bizonyos mintákhoz (szabályokhoz) igazodnak. Ezeket a mintákat programozási tételek elnevezés alatt a 4. fejezetben mutatjuk be. A programozási tételek egyszerű feladatok hatékony algoritmusai, amelyek részalgoritmusok formájában felhasználhatók későbbi feladataink megoldásaiban. Az 5. fejezetben tulajdonképpen már a programozási gyakorlatra készülünk. Megismerkedünk a feladatok részfeladatokra bontásának következményeként megvalósítandó olyan algoritmusokkal, amelyeket alprogramokkal implementá

11 BEVEZETÉS 11 lunk és ezeknek az összefűzési módjaival (top-down és bottom-up programozási stílus). A 6. fejezet a legfontosabb rendezési algoritmusokat tárgyalja: az összehasonlításos rendezési módszerek közül a buborékrendezést, az egyszerű felcseréléses rendezést, a válogatásos rendezést, a minimum/maximumkiválasztásra épülő rendezést és a beszúró rendezést fogjuk megismerni. A lineáris rendezések közül bemutatásra kerül a leszámláló rendezés és a számjegyes rendezés. Miután a 7. fejezetben megismerkedünk a rekurzió fogalmával, a 8. fejezet ben elsajátítjuk a visszalépéses keresés (backtracking) technikáját, a 9. fejezetben az oszd meg és uralkodj módszert (divide et impera) tanulmányozzuk, a 10.-ben pedig a mohó algoritmusokat (greedy). A fejezetek végén több megoldott feladatot mutatunk be, és más feladatokat pedig megoldásra ajánlunk. Az algoritmusok tanulmányozása nem ér véget ezzel a jegyzettel. A későbbiekben az adatszerkezetek tanulmányozása vár ránk. Ezeket az adatszerkezeteket sajátos algoritmusokkal dolgozzuk fel. Algoritmusok tervezése és elemzése címmel újabb előadássorozat keretén belül más algoritmusokkal és módszerekkel (például a dinamikus programozás módszerével, a Branch and Bound-dal, Dirichlet skatulya-elvével, véletlenszám generátorra épülő nemdeterminisztikus algoritmusokkal stb.) fogunk találkozni. Ugyanott újabb elemzési módszereket és az algoritmusok helyességének bizonyításait fogjuk elsajátítani. Nem állítom, hogy minden csak úgy igaz, ahogy ebben a jegyzetben le van írva. Várom az olvasók észrevételeit, és előre köszönöm a javaslatokat. Kívánok sikeres tanulást és sok örömöt az algoritmusok szépségeinek felfedezése során! * * * Köszönöm Kása Zoltán és Horia Georgescu tanár urak sok éve tartó megtisztelő barátságát, szakmai tanácsaikat, Buzogány Lászlónak és Kása Zoltánnak a figyelmes szaklektorálást. Köszönöm Takács Andreának a második kiadás előtt végzett pontos és igényes ellenőrző munkáját. Kolozsvár, augusztus 28. I. K.

12 12 BEVEZETÉS

13 1 A SZÁMÍTÓGÉPES FELADATMEGOLDÁS LÉPÉSEI 1.1. A programozói tevékenység A számítógép egy feladatot akkor képes megoldani, ha végrehajtjuk rajta azt a programot, amelyet abból a célból írtunk, hogy a feladatot megoldja. A felhasználó a programon keresztül irányítja a számítógép által elvégzendő lépéseket és biztosítja a feladat automatikus módon való megoldását. Tudvalevő, hogy egy alkalmazás nem egyetlen program megírását jelenti, hanem több személy, többhetes, esetleg többéves munkáját egy teljes programrendszer létrehozására. Ha például egy olyan rendszert kell megvalósítani, amely egy város vízellátását hivatott ellenőrizni és irányítani, a programokba a legapróbb részletekig be kell vinni minden lehetséges részfeladat megoldását úgy, hogy az eredmény a lehető legrövidebb idő alatt megszülessen. De ezt a programrendszert a városban megjelenő új épületek számára állandóan bővíteni kell, más épületek módosulhatnak, illetve eltűnhetnek, tehát az ilyen típusú módosításokat is folyamatosan el kell végezni. A programozók ma már főleg csapatban dolgoznak, így szükségessé vált a programozói tevékenység szabályozása, egy bizonyos sajátos fegyelem megkövetelése, a programozók közti kommunikáció szabványosítása, valamint a megoldandó feladatok szövegeinek megfelelő specifikálása. A programozás történetében az első kísérlet, amely a programozási munka egyszerűsítését tűzte ki céljául a moduláris programozás elveként vált ismertté (1956). Ennek az elvnek az értelmében az eredetileg bonyolult feladatot részfeladatokra bontjuk, és az ezeket megoldó algoritmusokat alprogramokkal kódoljuk. A részfeladatokat megoldó alprogramokat összefűzve, megkapjuk az eredeti feladat megoldását. A következő fontos lépést a strukturált programozás megjelenése jelentette 1972-ben, amikor E. W. Dijkstra olyan algoritmusokat javasolt, amelyekből már

14 14 1. A SZÁMÍTÓGÉPES FELADATMEGOLDÁS LÉPÉSEI hiányzik a goto utasítás 1. Ezáltal nagymértékben megnőtt a programok olvashatósága, frissíthetősége, sőt könnyebb lett azok karbantartása is. A strukturált programozás elméleti megalapozását folytatta Böhm és Jacopini, akik bebizonyították, hogy bármely algoritmus megvalósítható a három alapstruktúrával, amelyek: a szekvencia, az elágazás (vagy döntés) és az előltesztelő ismeretlen lépésszámú ciklus (iteráció) A feladatmegoldás lépései számítógépes környezetben Ha egy bizonyos feladatot számítógéppel szeretnénk megoldani, az ember által elvégzendő lépések a következő módon csoportosíthatók [7]: a) A követelmények és a feladat megfogalmazása A megrendelő leírja a kivitelező számára (sokszor pontatlanul és ellentmondásosan) azt a feladatot, amelyet számítógépes programmal szeretne megoldani a jövőben. A leírás (általában) a kimenetre összpontosít. b) A feladat specifikációja Több beszélgetés szükséges ahhoz, hogy a programozó csoport rendszertervezője pontosan megfogalmazhassa a feladatot (ismernie kell milyen körülmények között, mekkora méretű adatokkal, milyen számítógépen kerül fölhasználásra az elkészítendő program). A következő lépésben a rendszertervezők elemzik a megrendelő követelményeit és lefordítják saját nyelvükre a feladatot, vagyis létrehozzák azt a belső használatra készülő dokumentációt, amely a feladat pontos és helyes specifikációját tartalmazza. Itt már bemeneti és kimeneti adatokról, valamint megszorításokról (a bemeneti adatok és az adatszerkezetek méretéről, az elfogadható legnagyobb futási időről stb.) van szó. A specifikációt ellenőrzi a megrendelő, ellenőrzi a programozó csoport vezetője, de sokszor szükséges, hogy egy, a csoporttól független szakember is elmondja a véleményét. c) Az algoritmus megtervezése (elemzés, modellek és módszerek megállapítása) A specifikáció létrejötte után a csoport tagjai kiválasztják a megfelelő matematikai modelleket, megtervezik az adatszerkezeteket és eldöntik, hogy milyen programozási környezetben milyen módszereket fognak alkalmazni. A módszerek és az adatszerkezetek egymást befolyásolják, ezért gyakran előfordul, hogy több megoldási lehetőség is elemzésre kerül. Az a megoldás lesz a jobb, amely a számítógép erőforrásait (memória és idő) a leghatékonyabban használják. A feladatot részfeladatokra bontják és megtervezik a 1 A goto utasítás hatására a számítógép nem a programban következő utasítást, hanem a goto-ban feltüntetett címkével azonosítottat hajtja végre.

15 1. A SZÁMÍTÓGÉPES FELADATMEGOLDÁS LÉPÉSEI 15 megoldásokat. A matematikai modellek, az adatszerkezetek és az algoritmusok kiválasztása általában összefonódik. Ekkor alakulnak ki a modulok és a köztük levő kapcsolatok. A tervezés során elkészül egy dokumentáció, amely tartalmazza a megoldás vázát, a választások indoklását. Minderre a kódolás során, valamint a program karbantartásakor lesz szükség. d) Kódolás (az algoritmus implementálása egy programozási nyelvben) Ebben a fázisban az algoritmust átírjuk valamilyen programozási nyelvre, amelyet a feladat jellegének megfelelően gondosan választunk ki. e) Tesztelés (ellenőrzés és érvényesítés, vagyis annak ellenőrzése, hogy a bemeneti és kimeneti adatok megfelelnek-e a specifikációknak) E tevékenység során a programozó különböző tesztadatok esetében tanulmányozza a program működését. Természetesen, arra számít, hogy a program a várt (helyes) adatokat adja, de ezen túlmenően megfigyeli a futási időt, a biztonságos működést stb. A felfedezett hibákat kijavítja, majd újra ellenőrzi az eredményt. Sok esetben a tesztelés beindulhat sokkal hamarabb, egy-egy részfeladat megoldása után. Tulajdonképpen olyan ellenőrzésről van szó, amely nem áll egy különálló fázisból, hanem egy folyamatos tevékenység, amely a tervezés, kódolás és karbantartás során zajlik. Az ellenőrzés lényeges összetevője az úgynevezett érvényesítés. Ezt előbb elvégzi a kivitelező, később a felhasználás során a megrendelő. Megjegyzendő, hogy a megrendelő nem végez ellenőrzéseket, hanem valós adatokkal futtatja a programot és azt várja, hogy a program a megfelelő alakban írja ki az eredményeket. f) A tervezői és a felhasználói dokumentáció elkészítése A dokumentációk a program fontos tartozékai, amelyek a programhoz kapcsolódó fontos információkat tartalmazzák. A fejlesztői dokumentáció leírja, hogyan volt megtervezve a program, a felhasználói dokumentáció elmagyarázza, hogyan kell használni a programot. g) Felhasználás és karbantartás A megrendelő a programot a felhasználás közben valós adatokkal futtatja. Ez természetesen hosszabb ideig zajlik, és előfordulhat, hogy a felhasználás során bizonyos programrészeket a programozónak meg kell változtatnia Alkalmazások minőségi szempontjai Helyesség A program helyes, ha pontosan megoldja a feladatot, megfelel a pontos és helyes specifikációnak.

16 16 1. A SZÁMÍTÓGÉPES FELADATMEGOLDÁS LÉPÉSEI Megbízhatóság Egy programot megbízhatónak nevezünk, ha helyes eredményt határoz meg, és a specifikációban nem leírt helyzetekben is intelligens módon viselkedik. Karbantarthatóság A karbantarthatóság annak mérőszáma, hogy milyen könnyű a programterméket a specifikáció esetleges változtatásához adaptálni. Egyes felmérések szerint a szoftverköltségek 70%-át a szoftverek karbantartására fordítják! A karbantarthatóság növelése szempontjából a két legfontosabb alapelv: a tervezési egyszerűség és a decentralizáció (minél önállóbb modulok létrehozása). Újrafelhasználhatóság Az újrafelhasználhatóság a szoftvertermékek azon képessége, hogy egészben vagy részben újrafelhasználhatók új alkalmazásokban. Kompatibilitás A kompatibilitás azt mutatja meg, hogy milyen könnyű a szoftvertermékeket egymás között kombinálni. Hordozhatóság A program hordozhatósága arra vonatkozik, hogy menynyire könnyű a programot más géphez, konfigurációhoz, vagy operációs rendszerhez általában más fizikai környezethez igazítani. Hatékonyság A program hatékonysága a futási idővel és a felhasznált memória méretével arányos minél gyorsabb, illetve minél kevesebb memóriát használ, annál hatékonyabb. Barátságosság A program emberközelisége, barátságossága a felhasználó számára rendkívül fontos: ez megköveteli, hogy a bemenet logikus és egyszerű, az eredmények formája áttekinthető legyen. Tesztelhetőség A tesztelhetőség, a program karbantartói, fejlesztői számára fontos.

17 2 AZ ALGORITMUSOK ÁBRÁZOLÁSA 2.1. Algoritmusok Mivel a számítástechnika egyik bűvös szava az algoritmus, lássuk hogyan is alakult ki ez a szó. D. E. Knuth így vélekedik a szó eredetéről: Az algoritmus szó már önmagában is nagyon érdekes. Úgy tűnhet egy pillanatig, hogy a logaritmus szót akarta valaki leírni, de nem sikerült neki, mert összezagyválta az első négy betűt. A matematikatörténészek azt állítják, hogy az algoritmus szó Abu-Ja far Mohammed ibn Mura al-kvarîzmi (780 k. 850 k.) arab matematikus nevének, al-kvarîzmi latinos elferdítéséből származik Az algoritmus fogalma A mindennapi életben gyakran kerülünk olyan helyzetbe, amikor meglévő ismereteink alapján nem tudjuk azonnal megmondani, hogy elérhető-e a kitűzött célunk, és ha igen, hogyan. A megoldás két dolgot feltételez: az eredmény milyenségének, azaz elvárásainknak pontos ismeretét; annak a folyamatnak a tervét, amely az eredmény eléréséhez vezet. A cél elérése érdekében megtervezzük az elvégzendő cselekvések sorozatát, vagyis megtervezzük az algoritmust, amely a kívánt eredményhez vezet. Olyan problémamegoldó eljárást (algoritmust) kell kidolgoznunk, amely véges számú lépésben befejeződik, és a rendelkezésre álló (bemeneti) adatokból előállítja az úgynevezett eredményt (kimeneti adatokat), vagyis megoldja a feladatot. [18] Azt gondolhatnánk, hogy mi sem egyszerűbb, mint a feladat megoldását a számítógépre bízni. Igen ám, de a számítógép csak azt tudja elvégezni, amit a felhasználó megnevezett! Ezért, amikor a számítógépnek kell megmondanunk, hogy mit csináljon, akkor egyértelmű leírást kell adnunk úgy, hogy gépünk számára is követhető legyen az elképzelésünk.

18 18 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA Az algoritmust úgy is definiálhatjuk, mint egy adott feladatkör megoldására kidolgozott olyan eljárást, amely utasításszerűen előre megadott lépések sorozatából áll. De ahhoz, hogy az algoritmus fogalmát tisztázhassuk, még több tulajdonságra is oda kell figyelnünk. Mielőtt sorra vennénk az algoritmusok főbb jellemzőit, próbáljuk megadni az algoritmus pontosabb leírását. Napjainkban algoritmus alatt egy véges, bizonyos sorrendben megadott egyértelmű műveletsort értünk, amelyek mechanikusan elvégezhetők (anélkül, hogy az ember arra szorulna, hogy saját maga döntéseket hozzon), és amelyek a rendelkezésre álló adatokból új adatokat hoznak létre, vagy más formában vezetnek a kívánt eredményhez. Az algoritmusokat valamilyen feladat megoldásának céljából tervezzük, majd valamilyen programozási nyelv segítségével kódoljuk, hogy számítógépen végrehajthassuk. Mielőtt számba vennénk az algoritmusok tulajdonságait, hangsúlyozzuk, hogy a számítógépes világ ismer szekvenciális és párhuzamos algoritmusokat. Egy szekvenciális algoritmus az utasításait egymás után hajtja végre, míg egy párhuzamos algoritmus esetében több utasítás is végrehajtódik ugyanabban a pillanatban, mivel ezeket több processzor végzi párhuzamosan. Valamely szekvenciális algoritmus akkor helyes, ha eleget tesz az alábbi követelményeknek: a) elvégezhető vagyis az ember is képes eljutni az eredményhez, papírral és ceruzával a kezében követve az algoritmusban leírt műveletek hatását; b) meghatározott azaz, bármelyik pillanatban tudjuk, hogy éppen mi fog történni (ez csak a determinisztikus algoritmusokra érvényes); c) általános egy adott feladatkör megoldására képes; d) véges az algoritmus véges számú lépésben vezet eredményre, bármilyen kezdeti értékekből kiindulva. Ezekhez hozzátesszük, hogy egy algoritmust a helyességén kívül a következő tulajdonságok is jellemezhetik: e) világos az algoritmus leírása pontos, érthető, követhető; f) hatékony egy bizonyos feladatot több algoritmussal is megoldhatunk, de ezek közül mindig megkeressük azt, amely a legkevésbé veszi igénybe a számítógép erőforrásait, vagyis nem terheli fölösleges műveletek elvégzésével, illetve fölösleges adatok tárolásával; azt mondjuk, hogy ezek az algoritmusok hatékonyak, optimálisak, vagyis a bonyolultságuk a lehető legkisebb.

19 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA 19 Az algoritmusok helyességének bizonyítását később fogjuk alaposabban tanulmányozni. Egyelőre marad a lehetőség, miszerint az algoritmusokat teszteljük, ellenőrizzük. Egy algoritmus kezdeti értékeket igényel, ezekből származtatja az eredményt. A kezdeti értékeket bemeneti (bemenő) adatoknak nevezzük. Ide sorolhatjuk azokat a konstans értékeket is, amelyekkel inicializálunk. Az algoritmus által szolgáltatott adatokat (eredményt) kimeneti (kimenő) adatoknak nevezzük. Mindaz amit az algoritmus elvégez, a funkciójaként nevezhető meg Az algoritmusok leírásánál használt elemek A. Adatok Az adatokat típusuk szerint a következőképpen osztályozhatjuk: a) A numerikus adatok csoportjába tartoznak az egész típusú adatok, azaz egész számok, valamint a valós típusú adatok, azaz a tizedes számok. A valós típusú adatok jelölésekor tizedesvessző helyett tizedespontot használunk (például 3,47 helyett 3.47-et). b) A logikai adatok mindössze két értéket vehetnek fel: a logikai igaz (true), valamint a logikai hamis (false) értékeket. c) A karakterláncok egyszeres idézőjelek (aposztrófok) közé zárt karaktersort jelentenek (például 'ez egy szoveg'). B. Állandók (konstansok) Algoritmusok írásakor numerikus, logikai és karakterlánc típusú állandókat használhatunk. Ezek nem változtatják értéküket az algoritmusban. C. Változók Az algoritmusok leírásakor használt olyan elemeket, amelyeknek értéke az algoritmus végrehajtása során időben módosulhat, változóknak nevezzük. Amikor az algoritmus alapján programot írunk, amelyet a továbbiakban számítógépünkön szeretnénk futtatni, akkor minden változónak helyet kell foglalnunk a memóriában. A lefoglalt hely mérete attól függ, hogy milyen típusú 2 adatot fogunk az illető változóban tárolni. Azok a változók, amelyek még nem kaptak értéket, inicializálatlanok (nincs kezdőértékük). 2 Egy típus meghatározza azoknak az értékeknek a halmazát, amelyből értékeket kaphat a változó, valamint azokat a műveleteket, amelyeket ezekkel az értékekkel elvégezhetünk.

20 20 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA Összefoglalva: minden változónak van neve, attribútumhalmaza (például típus), helye (címe) a memóriában, értéke. A változók típusa, a konstansokéhoz hasonlóan lehet numerikus, logikai és karakterlánc típusú. Ezeket a típusokat standard típusoknak nevezzük. Mellettük még végtelen sok típust definiálhat maga a programozó. D. Kifejezések A kifejezés egy számítás jelölése: előírja valamely érték kiszámításának módját. A kifejezés műveletekből és operandusokból áll. Az operandusok lehetnek konstansok, változók vagy függvényhívások (a függvénykifejezés valamely függvény kiértékeléséről gondoskodik). A kifejezés kiértékelése a megszokott matematikai szabályoknak megfelelően, az ismert precedencia figyelembevételével történik. Azonos prioritású műveletek esetében a kifejezés kiértékelését balról jobbra haladva végezzük. Az algoritmusok leírásakor numerikus, logikai és karakterlánc típusú kifejezéseket használhatunk. D1. Egész típusú kifejezések Az egész típusú kifejezések operandusai egész típusúak. Az egész típusú kifejezésekben a következő műveleteket használhatjuk: Művelet jele Jelentése + összeadás kivonás * szorzás [a/b] egész számok osztásának hányadosa maradék[a/b] egész számok osztási maradéka D2. Valós típusú kifejezések A valós típusú kifejezések operandusai valós típusú változók vagy állandók, de ezek közé kerülhetnek egész típusúak is. A valós típusú kifejezésekben a következő műveleteket használhatjuk: Művelet jele Jelentése + összeadás kivonás * szorzás / osztás

21 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA 21 Megjegyzés A kifejezés típusát, a kifejezésben szereplő operandusok típusa, valamint a műveletek határozzák meg! D3. Logikai kifejezések A logikai kifejezések operandusai logikai típusúak. A logikai kifejezések leírásában a következő műveleteket használhatjuk: relációs műveletek: <, >,,, =, ; logikai műveletek: vagy, és, nem (vagyis az eredeti állítás tagadása, ellenkezője), xor (kizárólagos vagy); a logikai műveletek eredményeit a következő táblázatok tartalmazzák: o I H an I H no I H xo I H r d t r I I I I I H H I I H I H I H H H H H I H Ha egy logikai kifejezés több részkifejezésből áll, ezeket zárójelek közé tesszük, mivel a logikai műveleteknek elsőbbségük van. A leghamarabb a nem (not) hajtódik végre, utána az és (and), végül a vagy (or). A relációs műveletek az aritmetikai kifejezések kiértékelése után kerülnek sorra. D4. Karakterlánc típusú kifejezések A karakterlánc típusú kifejezések operandusai karakterláncok. Ha a egy karakterlánc típusú változó és értéke például ' Ez egy ', akkor például az a + 'barack' kifejezés értéke ' Ez egy barack' lesz. A karakterláncok szerepelhetnek relációs kifejezésekben, ilyenkor a lexikográfikus sorrendnek megfelelően történik az összehasonlítás: Legyen a és b két karakterlánc típusú változó: a = 'barack', b = 'dió', ebben az esetben a < b. Az a = b relációs kifejezés értéke hamis, az a b értéke igaz. E. Műveletek Az algoritmusok leírásakor az alábbi műveleteket használhatjuk: ki/bemeneti műveletek; értékadás; döntéshozatal.

22 22 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA E1. Ki/bemeneti műveletek A bemeneti művelet szerepe bekérni a szükséges bemeneti adatokat. Ezeket billentyűzetről vagy állományokból olvashatjuk be. A kimeneti művelet szerepe a feldolgozott adatokat, eredményeket megjeleníteni. Ez a kiírás történhet a képernyőre, papírra vagy valamilyen állományba. E2. Értékadás Az értékadó művelet a (vagy :=) műveleti jel bal oldalán található változóhoz hozzárendeli a jobb oldalon lévő kifejezés értékét. Példa Az a 10 értékadás hatására a elveszti (esetleges) régi értékét, mivel az értékadás végrehajtása következtében az értéke 10 lesz. Az a a + 1 értékadás hatására a új értéke a régi értékénél 1-gyel nagyobb lesz. E3. Döntéshozatal A döntéshozó művelet lényege, hogy adott feltételek teljesülésekor egy bizonyos műveletsort kell elvégeznünk, egyébként egy másik műveletsort. Ha valamelyik ág üres, akkor természetesen azon az ágon nem történik semmi. F. Adatszerkezetek 3 Adatszerkezet alatt az adatok olyan csoportosulását értjük, amelyben pontos szabályok szerint szervezzük a feldolgozandó adatokat. Egy adattípuson belül azonos tulajdonságú értékeket foglalunk egybe, amelyekhez hozzárendeljük az elvégezhető műveleteket. Megkülönböztetünk: egyszerű adattípusokat (például az egész típusú számot nem tekintjük számjegyek sorozataként). összetett adattípusokat (az értékek elemekre bonthatók, az elemek egy adott szerkezetnek megfelelően csoportosulnak). Így az adatszerkezet egy olyan adattípus, amelynek az értékei felbonthatók adatelemek értékeinek halmazára, amelyeknek típusa lehet egyszerű vagy összetett. Az adatszerkezeten belül ismerjük az elemek közti kapcsolatot (szerkezetet). 3 Az adatszerkezeteket egy másik tantárgy keretén belül fogjuk alaposabban tanulmányozni.

23 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA 23 Például az Integer egy egész adattípus, amelyet a Pascal programozási nyelv ismer. Ha több egész számot szeretnénk egy adatkent kezelni, akkor egy sorozatot képezünk belőlük. Ekkor a sorozat egy adatszerkezet (vektor), amelynek az elemei az egész számok. Az elemek közti kapcsolat az, hogy egymás után következnek. Műveletek: elemek lekérdezése a sorszámuk (indexük) segítségével, értékadás stb Algoritmusok ábrázolása folyamatábrák és pszeudokód nyelvek segítségével Az algoritmusokat többféleképpen lehet ábrázolni. Ismeretesek a folyamatábrák, a pszeudokód nyelv, különböző típusú diagrammok, de a hétköznap használt nyelv is előfordul. Mivel ez utóbbi nehézkes lehet, hosszú és nem eléggé szabatos, az első két ábrázolással fogunk gyakrabban találkozni. A folyamatábra az algoritmusok leírásának egyik legegyszerűbb és legszemléletesebb módja. A folyamatábra grafikus ábrázolásmód, amelynek segítségével nem csupán az egyes műveleteket, hanem ezek elvégzésének sorrendjét és összefüggését is feltüntetjük. Folyamatábrák készítésekor az egyes műveleteket blokknak nevezett ábrák segítségével jelöljük, amelyeknek alakja a művelet típusára, tartalma pedig a művelet leírására utal. A folyamatábra hasonlít egy gráfhoz, ahol a lerajzolt nyilak irányításának megfelelően egy kiinduló helyzetből eljutunk az algoritmus végére úgy, hogy menet közben feltüntetjük az elvégzendő műveleteket. Az alapműveleteknek különböző síkidomok felelnek meg, ezeknek a belsejébe írjuk a műveleteket. a) indító- és záróblokk START STOP b) be és kimeneti műveletek Be v Ki v c) értékadás előbb kiszámítódik a kifejezés értéke; a kiszámított érték átadódik a változónak (bemásolódik a változó számára lefoglalt memóriarekeszbe); ha a változónak volt előző értéke, az változó kifejezés

24 24 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA az aktuális értékadás következtében elvész, mivel felülíródik az új értékkel. d) alprogram (algoritmus) hívása feltételezzük, hogy létezik az ELJÁRÁS nevű algoritmus, vagy legalább a funkcióját ismerjük; az ELJÁRÁS(L) blokk egy műveletsort jelöl, amelyet egy különálló folyamatábrával írunk le. E folyamatábra indítóblokkja a műveletsor nevét és az L paraméterlistát, míg záróblokkja az EXIT szót tartalmazza. ELJÁRÁS(L) e) elágazás (döntés) feltételezzük, hogy a feltétel egy logikai kifejezés, amely vagy igaz, vagy hamis; az algoritmus végrehajtását a feltételtől függően vagy a jobb vagy a bal ágon folytatjuk tovább HAMIS feltétel IGAZ Példa Legyen egy természetes szám. Ábrázoljuk folyamatábrával azt az algoritmust, amely megvizsgálja, hogy a szám palindrom szám-e vagy sem. Egy számot palindromszámnak (vagy tükörszámnak) hívunk, ha egyenlő a fordított -jával, vagyis azzal a számmal, amelyet a szám számjegyei fordított sorrendben alkotnak. Megoldás A számot számjegyekre bontjuk, és a bontással párhuzamosan felépítjük az új számot. Az új szám generálását a Horner-séma néven ismert módszer segítségével végezzük (a ciklusban újszám újszám 10 + számjegy). Mivel az algoritmus a számjegyeket úgy határozza meg, hogy ismételten osztja az eredeti számot 10- zel, az algoritmus végén az eredeti szám értéke 0. De nekünk szükségünk van az eredeti értékre, hogy összehasonlíthassuk a kapott új számmal. Ezért a beolvasott számról a feldolgozás előtt készítünk egy másolatot. A feladatot megoldó algoritmus folyamatábrája ekkor a következőképpen alakul:

25 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA 25 START Be szám másolat szám újszám 0 szám > 0 IGAZ számjegy maradék[szám/10] HAMIS újszám újszám*10+számjegy szám [szám/10] HAMIS másolat= újszám IGAZ Ki 'Nem' Ki 'Igen' STOP Annak ellenére, hogy a folyamatábrák segítségével az algoritmusok szemléletesen és viszonylag egyszerűen írhatók le, a gyakorlatban ezek használata nehézkesnek bizonyult, egyrészt, mert bonyolultabb feladatok esetében a folya matábrák áttekinthetetlenekké válhatnak, másrészt pedig a grafikus ábrázolás önmagában is sok kellemetlenséget okozhat. Arról ne is beszéljünk, hogy itt megengedett a goto típusú átirányítás, ami végképp megnehezíti az algoritmus olvasását. A folyamatábrák helyett használhatjuk az úgynevezett pszeudokódot, amely az elemi struktúrákat írja le egyszerű utasítások formájában. A pszeudokód nyelv sokban hasonlít a programozási nyelvekhez, emiatt a pszeudókodban leírt algoritmus nagyon könnyen átírható bármely programozási nyelvre.

26 26 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA Feltevődik a kérdés: akkor miért nem írjuk algoritmusainkat egyenesen valamelyik programozási nyelven? Elsősorban azért nem, mert a pszeudokód leírásmód nem annyira kötött, mint egy programozási nyelv. Másodsorban pedig azért nem, mert a pszeudokódban leírt algoritmus éppen az imént említett rugalmasság miatt bármely programozó számára érthető, általános, nem tartalmazza egy programozási nyelv sajátosságait, és így nemcsak az illető nyelvet ismerő programozók fogják megérteni. A pszeudokódok többfélék lehetnek. Bárki megalkothatja saját pszeudokódját az elemi programozási struktúrák ismeretében A strukturált programozás alapelvei A programozók és a programozást oktatók nagy gondja volt a fegyelmezetlen, minden szabálytól, megkötéstől mentes programozói stílus. Nehézzé, néha lehetetlenné vált a karbantartás. Ezt elhárítandó, N. Wirth kidolgozta a lépésenkénti finomítás (stepwise refinement) elvét. De ez nem bizonyult elegendőnek. A strukturált programozást E. W. Dijkstra és C. A. R. Hoare vezették be 1965-ben. Olyan algoritmustervezési szabályokról van szó, amelyeknek lényege abban áll, hogy olyan algoritmusokat írunk, amelyek csak az elfogadott struktúrákat tartalmazzák. Lényeges észrevenni, hogy kizárták a goto utasítást a felhasználható utasítások közül, ezáltal az algoritmusok olvashatóbbakká, könnyen beláthatóakká váltak és így eredményesebb programozói teljesítményekhez vezettek. A strukturált programozás alapelve szerint az algoritmusok leírására néhány alapstruktúrát (elemi struktúrát) használunk, melyeknek egyetlen bemenete és egyetlen kimenete van. A kitűzött feladatot részfeladatokra bontjuk, majd e részfeladatok megoldásával jutunk el az eredeti feladat megoldásához. Ily módon bármely algoritmus alapstruktúrák lineáris szekvenciájaként tekinthető. Böhm és Jacopini tétele kimondja, hogy bármely algoritmus megvalósítható a három alapstruktúra segítségével: lineáris struktúrával, elágazással és Amíg típusú ismétlő struktúrával. Strukturált algoritmusok írásakor a következő alapstruktúrákat használhatjuk: a) lineáris struktúra valamely művelet feltétel nélküli elvégzését jelenti; b) elágazási (alternatív) struktúra lehetővé teszi, hogy valamely műveletet csak adott feltételek teljesülésekor végezzünk el; c) ismétlő struktúra (ciklus) adott műveletsor véges számszor történő ismételt elvégzése.

27 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA 27 Az elemi struktúrák használata megkönnyíti az algoritmusírást, ugyanakkor a már kész algoritmus érthetőbb, áttekinthetőbb lesz Lineáris struktúrák A lineáris struktúrák a következők: indítóblokk (START); záróblokk (STOP); ki- és bemeneti műveletek; értékadás; az ELJÁRÁS blokk hívása (az ELJÁRÁS blokkhoz tartozó struktúrák nem feltétlenül lineárisak). Lineáris struktúrának tekintjük továbbá a fentiek bármilyen szekvenciáját is Elágazási struktúrák Az elágazás a döntéshozó művelet megfelelője, amelyben a feltétel egy logikai kifejezés, amely állhat több részkifejezésből. Ha a feltétel teljesül, akkor a q műveletsort végezzük el, különben a p-t, ahol a q és p tetszőleges számú, bármilyen típusú struktúrákból állhat. p HAMIS feltétel IGAZ q Ha a p vagy a q műveletsor hiányzik, ajánlott úgy megfogalmazni a feltételt, hogy a HAMIS ág váljon üressé. A későbbiekben meg fogunk ismerkedni egy olyan elágazási struktúrával is, amely egyetlen feltétel kiértékelése következtében kettőnél több felé ágaztatja az algoritmust. Példa Olvassunk be egy évszámot (1000 évszám 3000). Döntsük el, hogy az adott év szökőév-e vagy sem! Megoldás Egy szökőév osztható 4-gyel és nem osztható 100-zal, vagy osztható 400-zal.

28 28 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA START Be évszám HAMIS maradék[évszám/4]=0 és maradék[évszám/100] 0 vagy maradék[évszám/400]=0 IGAZ Ki 'Nem' Ki 'Szökőév' STOP Ismétlő struktúrák Ha egy adott műveletsort többször is meg kell ismételnünk, ismétlő struktúrát vagy más néven ciklust használunk. A ciklusnak tartalmaznia kell egy feltételt, amely lehetővé teszi a ciklusból való kilépést. A ciklusokat három csoportba soroljuk: a) elöltesztelő ciklus (Amíg típusú struktúra); b) hátultesztelő ciklus (Ismételd típusú struktúra); c) ismert számú ismétlés (Minden típusú struktúra). A továbbiakban e három típust egyenként ismertetjük. a) Elöltesztelő ciklus (Amíg típusú struktúra) Amíg a feltétel értéke igaz, ismételjük a p műveletsort. Amint a feltétel értéke hamissá válik, kilépünk a ciklusból. A p műveletsorban kötelezően lennie kell egy olyan műveletnek, amely megváltoztatja a feltétel logikai értékét, lehetővé téve a ciklusból való kilépést. Előfordulhat, hogy a feltétel értéke már a ciklusba lépés előtt hamis. Ebben az esetben a p műveletsort egyszer sem végezzük el! HAMIS feltétel IGAZ p

29 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA 29 Példa Olvassunk be több egész számot. A számok beolvasása befejeződik, amikor a beolvasott szám értéke 0. Számítsuk ki az összegüket! Az összeget 0 kezdőértékkel látjuk el. Mivel a számok számát nem ismerjük, sőt az is előfordulhat, hogy az első beolvasott szám értéke 0, ismeretlen számú, elöltesztelő ciklust alkalmazunk. START Be szám összeg 0 szám 0 IGAZ összeg összeg + szám HAMIS Be szám Ki összeg STOP b) Hátultesztelő ciklus (Ismételd típusú struktúra) A p műveletsort addig ismételjük, ameddig a feltétel értéke igazzá nem válik. (Kilépünk amikor a feltétel értéke igaz.) A p műveletsorban szükség van egy olyan műveletre, amely megváltoztatja a feltétel logikai értékét és lehetővé teszi a ciklusból való kilépést. A feltétel értékétől függetlenül a p műveletsort legalább egyszer elvégezzük! IGAZ p feltétel HAMIS Példa Adva van egy pozitív egész szám. Írjuk ki számjegyeinek számát! Megoldás A szám számjegyeinek számát a 10-zel való ismételt egész osztások száma adja meg, amelyeket addig végzünk, amíg a szám 0-vá nem válik. Mivel az eredeti számról tudjuk, hogy 0-tól különbözik, de nem tudjuk, hány számjegye van, a feldolgozást hátultesztelő ismeretlen lépésszámú ciklussal végezzük. Ha az adott szám 0 is lehetett volna, az eredmény akkor is 1, de ebben az esetben egyszer sem kellett volna osztani a számot, tehát elöltesztelő ciklust alkalmaztunk volna.

30 30 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA START Be szám sz 0 szám [szám/10] sz sz + 1 szám = 0 HAMIS IGAZ Ki sz STOP Feladat Próbáljunk folyamatábrát rajzolni egy elöltesztelő ciklussal megoldott feladat, hátultesztelő ciklussal történő megoldására. c) Ismert számú ismétlés (Minden típusú struktúra) Az Amíg és az Ismételd struktúrák esetében nem tudhatjuk pontosan, hányszor fog ismétlődni a p műveletsor. Ha ismerjük a végrehajtások számát, az előbb bemutatott, módosított elöltesztelő ismétlő struktúrát használhatjuk, amelyben egy úgynevezett ciklusszámláló segítségével ellenőrizzük a műveletsor ismétléseinek számát. Ezt az ismétlő struktúrát Minden típusú struktúrának nevezzük. A p műveletsort addig ismételjük, ameddig az i sorszámozott típusú változó értéke kisebb vagy egyenlő mint az u utolsó megengedett érték (az i első értéke az e kezdőérték). Az i változó a ciklus minden lépésében megváltoztatja értékét. A lépés lehet pozitív vagy negatív egész szám. i e IGAZ i u p HAMIS i i + lépés

31 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA 31 Különböző programozási nyelvekben a Minden típusú struktúra különbözőképpen van megvalósítva. Példa Számítsuk ki az első n (2 n 20) természetes szám összegét! Megoldás A feladat megoldására Minden típusú struktúrát használunk. A ciklusváltozót i-vel jelöljük, és értékei a ciklus folyamán 1-től n-ig változnak, azaz n darab számot fogunk a ciklusban feldolgozni. Az n értékét a felhasználótól kérjük be. Jelen (és a legtöbb) esetben a lépésszámlálót 1-gyel növeljük. A ciklus által biztosított i ciklusváltozót így nyugodtan felhasználhatjuk az összeg kiszámítására, amelyet az összeg változóban tárolunk. A feladat megoldását a következő folyamatábra szemlélteti. Megjegyzés Látható, hogy az ábra igazán szemléletes, de képzeljünk el egy ennél mondjuk 5-ször bonyolultabb algoritmust. Hogyan ábrázolnánk azt egy ilyen méretű lapon? A továbbiakban mindenkinek az algoritmusok pszeudokóddal történő leírását javasoljuk. START Be n összeg 0 i 1 i n IGAZ HAMIS összeg összeg + i i i + 1 Ki összeg STOP

32 32 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA Az alapstruktúrák jelölése pszeudokódban a) A pszeudokódban leírt algoritmus első utasítása: Algoritmus Neve: b) Lineáris struktúrák ábrázolása pszeudokód nyelvben: Struktúra neve Bemeneti struktúra Kimeneti struktúra Értékadó művelet Eljáráshívás Jelölés Be: változólista Ki: változólista változónév kifejezés eljárásnév(paraméterlista) c) Elágazási struktúrák ábrázolása pszeudokód nyelvben: Ha-akkor-különben típusú struktúra: Ha feltétel akkor utasítás(ok)1 különben utasítás(ok)2 Ha az elágazási struktúrából hiányzik a különben ág, akkor Ha-akkor típusú struktúránk van: Ha feltétel akkor utasítás(ok) Példa Határozzuk meg és írjuk ki adott valós szám abszolút értékét! Elemzés Matematikából tudjuk, hogy valamely szám abszolút értéke: x, ha x 0 x x, ha x 0. Beolvassuk az x valós számot. Ha a szám pozitív, akkor az abszolút érték maga a szám lesz, egyébként az abszolút érték maga a szám, de megváltoztatott előjellel. Algoritmus Abszolút_érték(x,mod): Ha x 0 akkor { bemeneti adat: x, kimeneti adat: mod } mod x különben mod -x

33 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA 33 Megjegyzés Ha az x változó eredeti értékére a továbbiakban nincs szükségünk, elegánsabb megoldást kapunk, ha nem használunk külön változót az abszolút érték tárolására! Egyébként a megoldás hátránya lehet, hogy módosul az x értéke! Algoritmus Abszolút_érték_másként(x): Ha x < 0 akkor { bemeneti és kimeneti adat: x } x -x d) Ismétlő struktúrák ábrázolása pszeudokód nyelvben: Amíg típusú struktúra ábrázolása: Amíg feltétel végezd el: utasítás(ok) vége(amíg) Példa Számítsuk ki két természetes szám egész hányadosát ismételt kivonásokkal! Algoritmus Osztás(a,b,hányados): hányados 0 { bemeneti adatok: a, b, kimeneti adat: hányados } Amíg a b végezd el: hányados hányados + 1 a a - b vége(amíg) Ismételd típusú struktúra ábrázolása: Ismételd utasítás(ok) Ameddig feltétel Példa Számítsuk ki két természetes szám legnagyobb közös osztóját! Megoldás Alkalmazzuk Eukleidész algoritmusát. Kiszámítjuk a két szám osztási maradékát. Ha ez nem 0, ismételten kiszámítjuk az aktuális osztó és az aktuális maradék egész osztási maradékát. Az algoritmus véget ér, amikor az aktuális maradék értéke 0. 4 Algoritmus Eukleidész(a,b,lnko): Ismételd { bemeneti adatok: a, b, kimeneti adat: lnko } r maradék[a/b] { kiszámítjuk az aktuális maradékot } a b { az osztandót felülírjuk az osztóval } b r { az osztót felülírjuk a maradékkal } ameddig r = 0 { amikor a maradék 0, véget ér az algoritmus } lnko a { lnko egyenlő az utolsó osztó értékével } 4 Eukleidész algoritmusára visszatérünk a jegyzet során többször is.

34 34 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA Minden típusú struktúra ábrázolása: Minden i = e, u, lépés végezd el: utasítás(ok) Példa Számoljuk meg n beolvasott szám közül a páros számokat! Megoldás Tekintsük az alábbi algoritmust! Algoritmus Páros(n,db): db 0 { bemeneti adat: n és a számok, kimeneti adat: db, a páros számok száma } Minden i=1,n végezd el: Be: szám Ha szám páros akkor db db + 1 e) A pszeudokódban leírt algoritmus utolsó utasítása: Megjegyzés Megjegyezzük, hogy az algoritmus és a struktúrák zárását jelölhetnénk egyszerűen a vége sorral, de ha a zárójelben feltüntetjük a struktúrát megnevező szót is (ha, amíg stb.), világosabb lesz az algoritmus leírása, hiszen így jelezzük azt is, hogy minek van vége. Mielőtt zárnánk a jegyzetben alkalmazott pszeudokód nyelvvel való ismerkedést, lássuk a folyamatábrák bemutatása után tárgyalt feladatot megoldó algoritmus ábrázolását pszeudokóddal. (A feladat megoldásában eldöntjük egy adott számról, hogy palindromszáme vagy sem.) Algoritmus Palindrom(szám,válasz): másolat szám { bemeneti adat: szám, kimeneti adat: válasz } újszám 0 Amíg szám > 0 végezd el: számjegy maradék[szám/10] újszám újszám*10 + számjegy szám [szám/10] vége(amíg) válasz újszám = másolat { ha újszám = másolat, akkor válasz értéke igaz } { ha újszám másolat, akkor válasz értéke hamis }

35 2. AZ ALGORITMUSOK ÁBRÁZOLÁSA Egyszerű alapszabályok A változók jelentését alaposan ismernünk kell! Adjunk minden változónak beszédes azonosítót! Ne használjunk inicializálatlan (kezdőérték nélküli) változókat! Ne használjunk több változót a szükségesnél, mert ez növelheti az algoritmus alapján implementált program memóriaigényét. Az algoritmus utasításait mindig a logikai felépítésnek megfelelően indentáljuk (igazítsuk) úgy, hogy abból mindig egyértelműen kitűnjön, melyik rész, melyik másik résznek az alárendeltje (melyik blokk alá tartozik). Írjunk optimális algoritmusokat! (Egy algoritmus optimalitása nem a kód hosszától, hanem annak hatékonyságától, azaz futási idejétől és erőforrásigényétől függ.) Amennyiben lehetséges írjunk általános algoritmusokat, amelyek más programozási környezetben is különösebb átalakítás nélkül felhasználhatók. Az algoritmusnak minden bemenetre valamilyen kimenetet (eredményt vagy hibaüzenetet) kell szolgáltatnia. A megoldandó feladatot teljes egészében elemezzük! Amíg lehet, a feladatot bontsuk részfeladatokra, az algoritmust pedig részalgoritmusokra (alprogramokra)! Ha a Ha struktúrában egy ág hiányzik, ez legyen a különben! Az egymásba ágyazott Ha struktúrák következzenek a megvalósulásuk valószínűsége szerinti csökkenő sorrendben! A Minden típusú struktúrában ne módosítsuk a ciklusváltozót, és a kezdő-, illetve a végsőértéket sem! Ha az algoritmus tervezésekor ismerjük a programozási környezetet, amelyben ezt kódolni fogjuk, kihasználhatjuk a programozási környezet és a nyelv lehetőségeit is, de ne essünk túlzásba, mivel így az algoritmusunk veszít az általánosságából! 2.4. A feladatok számítógépes megoldásához fűződő általános kérdések A programozótól azt várják el, hogy megvalósítson egy algoritmust, amely megold egy adott feladatot (a megoldás lehet közelítő is, ha ez fel van tüntetve). A megoldhatóság, első megközelítésre, azt jelenti, hogy létezik egy algoritmus, amelynek megfelel egy számítógépes program, amelyet, ha elegendő ideig fut

Tartalomjegyzék Algoritmusok - pszeudókód... 1 42

Tartalomjegyzék Algoritmusok - pszeudókód... 1 42 Tartalomjegyzék Algoritmusok - pszeudókód... 1 42 Abszolút érték...1 Hányados ismételt kivonással...1 Legnagyobb közös osztó... 1 2 Páros számok szűrése...2 Palindrom számok... 2 3 Orosz szorzás...3 Minimum

Részletesebben

Algoritmusok pszeudókód... 1

Algoritmusok pszeudókód... 1 Tartalomjegyzék Algoritmusok pszeudókód... 1 Abszolút érték... 1 Hányados ismételt kivonással... 1 Legnagyobb közös osztó... 2 Páros számok szűrése... 2 Palindrom számok... 2 Orosz szorzás... 3 Minimum

Részletesebben

Tartalomjegyzék Algoritmusok - pszeudókód... 1 42

Tartalomjegyzék Algoritmusok - pszeudókód... 1 42 Tartalomjegyzék Algoritmusok - pszeudókód... 1 42 Abszolút érték...1 Hányados ismételt kivonással...1 Legnagyobb közös osztó... 1 2 Páros számok szűrése...2 Palindrom számok...2 Orosz szorzás...3 Minimum

Részletesebben

Algoritmusok pszeudókód... 1

Algoritmusok pszeudókód... 1 Tartalomjegyzék Algoritmusok pszeudókód... 1 Abszolút érték... 1 Hányados ismételt kivonással... 1 Legnagyobb közös osztó... 1 Páros számok szűrése... 2 Palindrom számok... 2 Orosz szorzás... 2 Minimum

Részletesebben

Algoritmusok - pszeudókód... 1

Algoritmusok - pszeudókód... 1 Tartalomjegyzék Algoritmusok - pszeudókód... 1 Abszolút érték... 1 Hányados ismételt kivonással... 1 Legnagyobb közös osztó... 1 Páros számok szűrése... 2 Palindrom számok... 2 Orosz szorzás... 2 Minimum

Részletesebben

Egyszerű programok készítése... 56 Kifejezések... 57 Bitszintű műveletek... 57 Relációs műveletek... 58

Egyszerű programok készítése... 56 Kifejezések... 57 Bitszintű műveletek... 57 Relációs műveletek... 58 Tartalomjegyzék Algoritmusok - pszeudókód... 1 Abszolút érték... 1 Hányados ismételt kivonással... 1 Legnagyobb közös osztó... 1 Páros számok szűrése... 2 Palindrom számok... 2 Orosz szorzás... 3 Minimum

Részletesebben

Felvételi tematika INFORMATIKA

Felvételi tematika INFORMATIKA Felvételi tematika INFORMATIKA 2016 FEJEZETEK 1. Természetes számok feldolgozása számjegyenként. 2. Számsorozatok feldolgozása elemenként. Egydimenziós tömbök. 3. Mátrixok feldolgozása elemenként/soronként/oszloponként.

Részletesebben

4. Előfeltételek (ha vannak) 4.1 Tantervi Nincs 4.2 Kompetenciabeli Feladatok kijelentéseinek megértése

4. Előfeltételek (ha vannak) 4.1 Tantervi Nincs 4.2 Kompetenciabeli Feladatok kijelentéseinek megértése A TANTÁRGY ADATLAPJA 1. A képzési program adatai 1.1 Felsőoktatási intézmény Babeș Bolyai Tudományegyetem 1.2 Kar Matematika és Informatika 1.3 Intézet Magyar Matematika és Informatika 1.4 Szakterület

Részletesebben

Webprogramozás szakkör

Webprogramozás szakkör Webprogramozás szakkör Előadás 5 (2012.04.09) Programozás alapok Eddig amit láttunk: Programozás lépései o Feladat leírása (specifikáció) o Algoritmizálás, tervezés (folyamatábra, pszeudokód) o Programozás

Részletesebben

Java programozási nyelv

Java programozási nyelv Java programozási nyelv 2. rész Vezérlő szerkezetek Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/23 Tartalomjegyzék

Részletesebben

Algoritmusok. Dr. Iványi Péter

Algoritmusok. Dr. Iványi Péter Algoritmusok Dr. Iványi Péter Egyik legrégebbi algoritmus i.e. IV század, Alexandria, Euklidész két természetes szám legnagyobb közös osztójának meghatározása Tegyük fel, hogy a és b pozitív egész számok

Részletesebben

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I. Számelmélet I. DEFINÍCIÓ: (Osztó, többszörös) Ha egy a szám felírható egy b szám és egy másik egész szám szorzataként, akkor a b számot az a osztójának, az a számot a b többszörösének nevezzük. Megjegyzés:

Részletesebben

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Felvételi vizsga mintatételsor Informatika írásbeli vizsga BABEȘ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR A. tételsor (30 pont) Felvételi vizsga mintatételsor Informatika írásbeli vizsga 1. (5p) Egy x biten tárolt egész adattípus (x szigorúan pozitív

Részletesebben

Gyakorló feladatok az 1. nagy zárthelyire

Gyakorló feladatok az 1. nagy zárthelyire Gyakorló feladatok az 1. nagy zárthelyire 2012. október 7. 1. Egyszerű, bevezető feladatok 1. Kérjen be a felhasználótól egy sugarat. Írja ki az adott sugarú kör kerületét illetve területét! (Elegendő

Részletesebben

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai A programozás alapjai 1 1. előadás Híradástechnikai Tanszék Amiről szólesz: A tárgy címe: A programozás alapjai A számítógép részegységei, alacsony- és magasszintű programnyelvek, az imperatív programozási

Részletesebben

A rész (30 pont) A.1. Vajon mit csinál? (5 pont) A generál(n) algoritmus egy n természetes számot dolgoz fel (0 < n < 100).

A rész (30 pont) A.1. Vajon mit csinál? (5 pont) A generál(n) algoritmus egy n természetes számot dolgoz fel (0 < n < 100). BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - szeptember Informatika írásbeli A versenyzők figyelmébe: 1. Minden tömböt 1-től kezdődően indexelünk. 2. A rácstesztekre (A rész)

Részletesebben

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe: BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli A versenyzők figyelmébe: 1. A tömböket 1-től kezdődően indexeljük. 2. A rácstesztekre

Részletesebben

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás Algoritmusok Tervezése 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás Mi az algoritmus? Lépések sorozata egy feladat elvégzéséhez (legáltalánosabban) Informálisan algoritmusnak nevezünk bármilyen jól definiált

Részletesebben

I. ALAPALGORITMUSOK. I. Pszeudokódban beolvas n prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis

I. ALAPALGORITMUSOK. I. Pszeudokódban beolvas n prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis I. ALAPALGORITMUSOK 1. Prímszámvizsgálat Adott egy n természetes szám. Írjunk algoritmust, amely eldönti, hogy prímszám-e vagy sem! Egy számról úgy fogjuk eldönteni, hogy prímszám-e, hogy megvizsgáljuk,

Részletesebben

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája Adatszerkezetek Összetett adattípus Meghatározói: A felvehető értékek halmaza Az értékhalmaz struktúrája Az ábrázolás módja Műveletei Adatszerkezet fogalma Direkt szorzat Minden eleme a T i halmazokból

Részletesebben

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása 1 Információk 2 A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin Elérhetőség mesko.katalin@tfk.kefo.hu Fogadóóra: szerda 9:50-10:35 Számonkérés időpontok Április 25. 9 00 Május 17. 9 00 Június

Részletesebben

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10. Programozás I. 1. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2012. szeptember 10. Sergyán (OE NIK) Programozás I. 2012. szeptember 10. 1 /

Részletesebben

Programozási segédlet

Programozási segédlet Programozási segédlet Programozási tételek Az alábbiakban leírtam néhány alap algoritmust, amit ismernie kell annak, aki programozásra adja a fejét. A lista korántsem teljes, ám ennyi elég kell legyen

Részletesebben

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs Programozás I. 1. előadás: Algoritmusok alapjai Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar Alkalmazott Informatikai Intézet 2015. szeptember 7. Sergyán

Részletesebben

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 3. gyakorlat PLanG: 2011.09.27. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Algoritmusok

Részletesebben

Algoritmusokfelülnézetből. 1. ELŐADÁS Sapientia-EMTE

Algoritmusokfelülnézetből. 1. ELŐADÁS Sapientia-EMTE Algoritmusokfelülnézetből 1. ELŐADÁS Sapientia-EMTE 2015-16 Algoritmus Az algoritmus kifejezés a bagdadi arab tudós, al-hvárizmi(780-845) nevének eltorzított, rosszul latinra fordított változatából ered.

Részletesebben

2018, Diszkrét matematika

2018, Diszkrét matematika Diszkrét matematika 3. előadás mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia 2018, őszi félév Miről volt szó az elmúlt előadáson? számtartományok: természetes

Részletesebben

Programozási tételek. PPT 2007/2008 tavasz.

Programozási tételek. PPT 2007/2008 tavasz. Programozási tételek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Strukturált programozás paradigma Alapvető programozási tételek Összetett programozási tételek Programozási

Részletesebben

ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK

ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK 1. ELÁGAZÁSOK ÉS CIKLUSOK SZERVEZÉSE Az adatszerkezetek mellett a programok másik alapvető fontosságú építőkövei az ún. algoritmikus szerkezetek.

Részletesebben

Egész számok. pozitív egész számok: 1; 2; 3; 4;... negatív egész számok: 1; 2; 3; 4;...

Egész számok. pozitív egész számok: 1; 2; 3; 4;... negatív egész számok: 1; 2; 3; 4;... Egész számok természetes számok ( ) pozitív egész számok: 1; 2; 3; 4;... 0 negatív egész számok: 1; 2; 3; 4;... egész számok ( ) 1. Írd a következõ számokat a halmazábra megfelelõ helyére! 3; 7; +6 ; (

Részletesebben

Szoftvertervezés és -fejlesztés I.

Szoftvertervezés és -fejlesztés I. Szoftvertervezés és -fejlesztés I. Operátorok Vezérlési szerkezetek Gyakorlás 1 Hallgatói Tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik.

Részletesebben

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Python Változók Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Név Érték Típus Memóriacím A változó értéke (esetleg más attribútuma is) a program futása alatt

Részletesebben

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum. Programozási tételek Programozási feladatok megoldásakor a top-down (strukturált) programtervezés esetén három vezérlési szerkezetet használunk: - szekvencia - elágazás - ciklus Eddig megismertük az alábbi

Részletesebben

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Javascript Változók Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Név Érték Típus Memóriacím A változó értéke (esetleg más attribútuma is) a program futása

Részletesebben

Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa:

Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa: 1. Tétel Az állomány két sort tartalmaz. Az első sorában egy nem nulla természetes szám van, n-el jelöljük (5

Részletesebben

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10. Programozás I. 1. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2012. szeptember 10. Sergyán (OE NIK) Programozás I. 2012. szeptember 10. 1 /

Részletesebben

AZ ALGORITMUS. az eredményt szolgáltatja

AZ ALGORITMUS. az eredményt szolgáltatja ALGORITMUSOK AZ ALGORITMUS Az algoritmus problémamegoldásra szolgáló elemi lépések olyan sorozata, amely a következő jellemzőkkel bír: Véges: véges számú lépés után befejeződik, és eredményt szolgáltat

Részletesebben

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli A versenyzők figyelmébe: 1. Minden tömböt 1-től kezdődően indexelünk. 2. A rácstesztekre (A rész)

Részletesebben

A félév során előkerülő témakörök

A félév során előkerülő témakörök A félév során előkerülő témakörök rekurzív algoritmusok rendező algoritmusok alapvető adattípusok, adatszerkezetek, és kapcsolódó algoritmusok dinamikus programozás mohó algoritmusok gráf algoritmusok

Részletesebben

Egyszerű programozási tételek

Egyszerű programozási tételek Egyszerű programozási tételek 2. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2011. szeptember 15. Sergyán (OE NIK) AAO 02 2011. szeptember 15.

Részletesebben

Matematika. 1. évfolyam. I. félév

Matematika. 1. évfolyam. I. félév Matematika 1. évfolyam - Biztos számfogalom a 10-es számkörben - Egyjegyű szám fogalmának ismerete - Páros, páratlan fogalma - Sorszám helyes használata szóban - Növekvő, csökkenő számsorozatok felismerése

Részletesebben

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga BABEȘ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR A. tételsor (30 pont) 1. (5p) Tekintsük a következő alprogramot: Alprogram f(a): Ha a!= 0, akkor visszatérít: a + f(a - 1) különben visszatérít

Részletesebben

Programozás alapjai (ANSI C)

Programozás alapjai (ANSI C) Programozás alapjai (ANSI C) 1. Előadás vázlat A számítógép és programozása Dr. Baksáné dr. Varga Erika adjunktus Miskolci Egyetem, Informatikai Intézet Általános Informatikai Intézeti Tanszék www.iit.uni-miskolc.hu

Részletesebben

ÁTVÁLTÁSOK SZÁMRENDSZEREK KÖZÖTT, SZÁMÁBRÁZOLÁS, BOOLE-ALGEBRA

ÁTVÁLTÁSOK SZÁMRENDSZEREK KÖZÖTT, SZÁMÁBRÁZOLÁS, BOOLE-ALGEBRA 1. Tízes (decimális) számrendszerből: a. Kettes (bináris) számrendszerbe: Vegyük a 2634 10 -es számot, és váltsuk át bináris (kettes) számrendszerbe! A legegyszerűbb módszer: írjuk fel a számot, és húzzunk

Részletesebben

INFORMATIKA javítókulcs 2016

INFORMATIKA javítókulcs 2016 INFORMATIKA javítókulcs 2016 ELMÉLETI TÉTEL: Járd körbe a tömb fogalmát (Pascal vagy C/C++): definíció, egy-, két-, több-dimenziós tömbök, kezdőértékadás definíciókor, tömb típusú paraméterek átadása alprogramoknak.

Részletesebben

Bevezetés az informatikába

Bevezetés az informatikába Bevezetés az informatikába 6. előadás Dr. Istenes Zoltán Eötvös Loránd Tudományegyetem Informatikai Kar Programozáselmélet és Szoftvertechnológiai Tanszék Matematikus BSc - I. félév / 2008 / Budapest Dr.

Részletesebben

Rekurzív algoritmusok

Rekurzív algoritmusok Rekurzív algoritmusok 11. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2011. november 14. Sergyán (OE NIK) AAO 11 2011. november 14. 1 / 32 Rekurzív

Részletesebben

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter Adatszerkezetek Tömb, sor, verem Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot

Részletesebben

Amit a törtekről tudni kell Minimum követelményszint

Amit a törtekről tudni kell Minimum követelményszint Amit a törtekről tudni kell Minimum követelményszint Fontos megjegyzés: A szabályoknak nem a pontos matematikai meghatározását adtuk. Helyettük a gyakorlatban használható, egyszerű megfogalmazásokat írtunk.

Részletesebben

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs Programozás I. 3. előadás Egyszerű programozási tételek Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar Alkalmazott Informatikai Intézet 2015. szeptember

Részletesebben

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Programozás I. 3. előadás Egyszerű programozási tételek Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar Alkalmazott Informatikai Intézet 2015. szeptember

Részletesebben

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése Dr. Kallós Gábor 2014 2015 1 Az Ordó jelölés Azt mondjuk, hogy az f(n) függvény eleme az Ordó(g(n)) halmaznak, ha van olyan c konstans (c

Részletesebben

Informatika tanítási módszerek

Informatika tanítási módszerek Informatika tanítási módszerek Programozás tanítási módszerek módszeres, algoritmusorientált; adatorientált; specifikációorientált; feladattípus-orientált; nyelvorientált; utasításorientált; matematikaorientált;

Részletesebben

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból ÜTEMTERV Programozás-elmélet c. tárgyhoz (GEMAK233B, GEMAK233-B) BSc gazdaságinformatikus, programtervező informatikus alapszakok számára Óraszám: heti 2+0, (aláírás+kollokvium, 3 kredit) 2019/20-es tanév

Részletesebben

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t Ellenőrző kérdések 2. Kis dolgozat kérdései 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t 37. Ha t szintű indexet használunk,

Részletesebben

22. GRÁFOK ÁBRÁZOLÁSA

22. GRÁFOK ÁBRÁZOLÁSA 22. GRÁFOK ÁBRÁZOLÁSA A megoldandó feladatok, problémák modellezése során sokszor gráfokat alkalmazunk. A gráf fogalmát a matematikából ismertnek vehetjük. A modellezés során a gráfok több változata is

Részletesebben

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Bánsághi Anna 2014 Bánsághi Anna 1 of 68 IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 3. ELŐADÁS - PROGRAMOZÁSI TÉTELEK 2014 Bánsághi Anna 1 of 68 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív

Részletesebben

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések) Adatszerkezetek Nevezetes algoritmusok (Keresések, rendezések) Keresések A probléma általános megfogalmazása: Adott egy N elemű sorozat, keressük meg azt az elemet (határozzuk meg a helyét a sorozatban),

Részletesebben

2018, Diszkre t matematika. 10. elo ada s

2018, Diszkre t matematika. 10. elo ada s Diszkre t matematika 10. elo ada s MA RTON Gyo ngyve r mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika Tansze k Marosva sa rhely, Roma nia 2018, o szi fe le v MA RTON Gyo ngyve r 2018,

Részletesebben

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 3. gyakorlat Tömbök, programozási tételek Surányi Márton PPKE-ITK 2010.09.21. ZH! PlanG-ból papír alapú zárthelyit írunk el reláthatólag október 5-én! Tömbök Tömbök Eddig egy-egy

Részletesebben

Algoritmizálás, adatmodellezés tanítása 7. előadás

Algoritmizálás, adatmodellezés tanítása 7. előadás Algoritmizálás, adatmodellezés tanítása 7. előadás Oszd meg és uralkodj! Több részfeladatra bontás, amelyek hasonlóan oldhatók meg, lépései: a triviális eset (amikor nincs rekurzív hívás) felosztás (megadjuk

Részletesebben

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport 10-es Keressünk egy egész számokat tartalmazó négyzetes mátrixban olyan oszlopot, ahol a főátló alatti elemek mind nullák! Megolda si terv: Specifika cio : A = (mat: Z n m,ind: N, l: L) Ef =(mat = mat`)

Részletesebben

29. Visszalépéses keresés 1.

29. Visszalépéses keresés 1. 29. Visszalépéses keresés 1. A visszalépéses keresés algoritmusa Az eddig megismert algoritmusok bizonyos értelemben nyílegyenesen haladtak elôre. Tudtuk, hogy merre kell mennünk, és minden egyes lépéssel

Részletesebben

Struktúra nélküli adatszerkezetek

Struktúra nélküli adatszerkezetek Struktúra nélküli adatszerkezetek Homogén adatszerkezetek (minden adatelem azonos típusú) osztályozása Struktúra nélküli (Nincs kapcsolat az adatelemek között.) Halmaz Multihalmaz Asszociatív 20:24 1 A

Részletesebben

Aritmetikai kifejezések lengyelformára hozása

Aritmetikai kifejezések lengyelformára hozása Aritmetikai kifejezések lengyelformára hozása Készítették: Santák Csaba és Kovács Péter, 2005 ELTE IK programtervező matematikus szak Aritmetikai kifejezések kiértékelése - Gyakran felmerülő programozási

Részletesebben

ELEMI PROGRAMOZÁSI TÉTELEK

ELEMI PROGRAMOZÁSI TÉTELEK ELEMI PROGRAMOZÁSI TÉTELEK 1. FELADATMEGOLDÁS PROGRAMOZÁSI TÉTELEKKEL 1.1 A programozási tétel fogalma A programozási tételek típusalgoritmusok, amelyek alkalmazásával garantáltan helyes megoldást adhatunk

Részletesebben

3 A C programozási nyelv szintaktikai egységei

3 A C programozási nyelv szintaktikai egységei 3 A C programozási nyelv szintaktikai egységei 3.1 Azonosítók Betűk és számjegyek sorozata, betűvel vagy _ (aláhúzás) karakterrel kell kezdődnie. A nagy- és kisbetűk különbözőek. Az azonosítók tetszőleges

Részletesebben

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar Algoritmizálás Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 0.1. Az algoritmikus tudás szintjei Ismeri (a megoldó algoritmust) Érti Le tudja pontosan

Részletesebben

;3 ; 0; 1 7; ;7 5; 3. pozitív: ; pozitív is, negatív is: ;

;3 ; 0; 1 7; ;7 5; 3. pozitív: ; pozitív is, negatív is: ; . A racion lis sz mok A tanult sz mok halmaza A) Ábrázold számegyenesen az alábbi számokat! 8 + + 0 + 7 0 7 7 0 0. 0 Válogasd szét a számokat aszerint, hogy pozitív: pozitív is, negatív is: negatív: sem

Részletesebben

FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI

FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI statisztika 10 X. SZIMULÁCIÓ 1. VÉLETLEN számok A véletlen számok fontos szerepet játszanak a véletlen helyzetek generálásában (pénzérme, dobókocka,

Részletesebben

Programozás alapjai 1.Gy: Algoritmizálás P R O

Programozás alapjai 1.Gy: Algoritmizálás P R O Programozás alapjai 1.Gy: Algoritmizálás. P R O A L A G 1/13 B ITv: MAN 2018.09.20 Algoritmus leírási módszerek Szöveges leírás Pszeudokód Folyamatábra Struktogram Jackson diagram 2/13 Folyamatábra elemek

Részletesebben

LEGO robotok. XII. rész

LEGO robotok. XII. rész LEGO robotok XII. rész III.1.22. Változók és konstansok A változó fogalma a matematikában egy értelmezési tartománnyal rendelkező, ebből bármilyen értéket felvehető objektum, melynek értéke logikailag

Részletesebben

Számelmélet Megoldások

Számelmélet Megoldások Számelmélet Megoldások 1) Egy számtani sorozat második tagja 17, harmadik tagja 1. a) Mekkora az első 150 tag összege? (5 pont) Kiszámoltuk ebben a sorozatban az első 111 tag összegét: 5 863. b) Igaz-e,

Részletesebben

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás.   Szénási Sándor Gráfok 2. Legrövidebb utak, feszítőfák előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor Óbudai Egyetem,Neumann János Informatikai Kar Legrövidebb utak keresése Minimális feszítőfa keresése Gráfok 2

Részletesebben

Vezérlési szerkezetek

Vezérlési szerkezetek Vezérlési szerkezetek Szelekciós ok: if, else, switch If Segítségével valamely ok végrehajtását valamely feltétel teljesülése esetén végezzük el. Az if segítségével valamely tevékenység () végrehajtását

Részletesebben

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás Programozás alapjai 6. gyakorlat Futásidő, rekurzió, feladatmegoldás Háziellenőrzés Egészítsd ki úgy a simplemaths.c programot, hogy megfelelően működjön. A program feladata az inputon soronként megadott

Részletesebben

Programtervezés. Dr. Iványi Péter

Programtervezés. Dr. Iványi Péter Programtervezés Dr. Iványi Péter 1 A programozás lépései 2 Feladat meghatározás Feladat kiírás Mik az input adatok A megoldáshoz szükséges idő és költség Gyorsan, jót, olcsón 3 Feladat megfogalmazása Egyértelmű

Részletesebben

Minden egész szám osztója önmagának, azaz a a minden egész a-ra.

Minden egész szám osztója önmagának, azaz a a minden egész a-ra. 1. Számelmélet Definíció: Az a egész szám osztója a egész számnak, ha létezik olyan c egész szám, melyre = ac. Ezt a következőképpen jelöljük: a Tulajdonságok: Minden egész szám osztója önmagának, azaz

Részletesebben

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás? Bevezetés Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések Forráskód Hibajegyzék p2p.wrox.com xiii xiii xiv xiv xvi xvii xviii

Részletesebben

Babeş-Bolyai Tudományegyetem, Kolozsvár. Informatikai-matematika záróvizsga tankönyv

Babeş-Bolyai Tudományegyetem, Kolozsvár. Informatikai-matematika záróvizsga tankönyv Babeş-Bolyai Tudományegyetem, Kolozsvár Informatikai-matematika záróvizsga tankönyv 2018-2019 Záróvizsga témák Informatikai-matematika szak (a 2019. júliusi vizsgaidőszaktól érvényes) Algoritmusok és programozás

Részletesebben

Algoritmusok, adatszerkezetek, objektumok

Algoritmusok, adatszerkezetek, objektumok Algoritmusok, adatszerkezetek, objektumok 1. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2011. szeptember 14. Sergyán (OE NIK) AAO 01 2011.

Részletesebben

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba Hibaforrások Hiba A feladatok megoldása során különféle hibaforrásokkal találkozunk: Modellhiba, amikor a valóságnak egy közelítését használjuk a feladat matematikai alakjának felírásához. (Pl. egy fizikai

Részletesebben

TANMENETJAVASLAT. Dr. Korányi Erzsébet MATEMATIKA. tankönyv ötödikeseknek. címû tankönyvéhez

TANMENETJAVASLAT. Dr. Korányi Erzsébet MATEMATIKA. tankönyv ötödikeseknek. címû tankönyvéhez TANMENETJAVASLAT Dr. Korányi Erzsébet MATEMATIKA tankönyv ötödikeseknek címû tankönyvéhez A heti 3 óra, évi 111 óra B heti 4 óra, évi 148 óra Javaslat témazáró dolgozatra: Dr. Korányi Erzsébet: Matematika

Részletesebben

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok. Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás 4. előadás Procedurális programozás: iteratív és rekurzív alprogramok Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Részletesebben

Követelmény az 5. évfolyamon félévkor matematikából

Követelmény az 5. évfolyamon félévkor matematikából Követelmény az 5. évfolyamon félévkor matematikából Gondolkodási és megismerési módszerek Néhány elem kiválasztása adott szempont szerint. Néhány elem sorba rendezése, az összes lehetséges sorrend felsorolása.

Részletesebben

Általános algoritmustervezési módszerek

Általános algoritmustervezési módszerek Általános algoritmustervezési módszerek Ebben a részben arra mutatunk példát, hogy miként használhatóak olyan általános algoritmustervezési módszerek mint a dinamikus programozás és a korlátozás és szétválasztás

Részletesebben

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb 1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb #include main() { int a, b; printf( "a=" ); scanf( "%d", &a ); printf( "b=" ); scanf( "%d", &b ); if( a< b ) { inttmp = a; a =

Részletesebben

MATEMATIKA TANMENET SZAKKÖZÉPISKOLA. 9. Nyelvi előkészítő osztály

MATEMATIKA TANMENET SZAKKÖZÉPISKOLA. 9. Nyelvi előkészítő osztály MINŐSÉGIRÁNYÍTÁSI ELJÁRÁS MELLÉKLET Tanmenetborító Azonosító: ME-III.1./1 Változatszám: 2 Érvényesség 2013. 01. 01. kezdete: Oldal/összes: 1/6 Fájlnév: ME- III.1.1.Tanmenetborító SZK- DC-2013 MATEMATIKA

Részletesebben

Logikai áramkörök. Informatika alapjai-5 Logikai áramkörök 1/6

Logikai áramkörök. Informatika alapjai-5 Logikai áramkörök 1/6 Informatika alapjai-5 Logikai áramkörök 1/6 Logikai áramkörök Az analóg rendszerekben például hangerősítő, TV, rádió analóg áramkörök, a digitális rendszerekben digitális vagy logikai áramkörök működnek.

Részletesebben

Amit a törtekről tudni kell 5. osztály végéig Minimum követelményszint

Amit a törtekről tudni kell 5. osztály végéig Minimum követelményszint Amit a törtekről tudni kell. osztály végéig Minimum követelményszint Fontos megjegyzés: A szabályoknak nem a pontos matematikai meghatározását adtuk. Helyettük a gyakorlatban használható, egyszerű megfogalmazásokat

Részletesebben

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA 26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA Az előző két fejezetben tárgyalt feladat általánosításaként a gráfban található összes csúcspárra szeretnénk meghatározni a legkisebb költségű utat. A probléma

Részletesebben

BABEŞ-BOLYAI TUDOMÁNYEGYETEM KOLOZSVÁR. Informatika záróvizsga tankönyv

BABEŞ-BOLYAI TUDOMÁNYEGYETEM KOLOZSVÁR. Informatika záróvizsga tankönyv BABEŞ-BOLYAI TUDOMÁNYEGYETEM KOLOZSVÁR Informatika záróvizsga tankönyv 2013 1 4 I. Algoritmusok és programozás 1. Programozási tételek A feladatok feladatosztályokba sorolhatók a jellegük szerint. E feladatosztályokhoz

Részletesebben

Elemi matematika szakkör

Elemi matematika szakkör Elemi matematika szakkör Kolozsvár, 2015. október 5. 1.1. Feladat. Egy pozitív egész számot K tulajdonságúnak nevezünk, ha számjegyei nullától különböznek és nincs két azonos számjegye. Határozd meg az

Részletesebben

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19. Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19. Programkészítés Megrendelői igények begyűjtése Megoldás megtervezése (algoritmuskészítés)

Részletesebben

Rekurzió. Dr. Iványi Péter

Rekurzió. Dr. Iványi Péter Rekurzió Dr. Iványi Péter 1 Függvényhívás void f3(int a3) { printf( %d,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); } void f1() { int a1 = 1; int b1; b1 = f2(a1); } 2 Függvényhívás void f3(int a3) { printf(

Részletesebben

Programozás I. házi feladat

Programozás I. házi feladat Programozás I. házi feladat 2013. 6. hét, 1. rész A feladatsor 4 feladatot tartalmaz, amelyeket egy közös forráskódban kell megvalósítani. Annak érdekében, hogy a tesztelő egymástól függetlenül tudja tesztelni

Részletesebben

Amortizációs költségelemzés

Amortizációs költségelemzés Amortizációs költségelemzés Amennyiben műveleteknek egy M 1,...,M m sorozatának a futási idejét akarjuk meghatározni, akkor egy lehetőség, hogy külön-külön minden egyes művelet futási idejét kifejezzük

Részletesebben

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék 9. előadás Wagner György Általános Informatikai Tanszék Leszámoló rendezés Elve: a rendezett listában a j-ik kulcs pontosan j-1 kulcsnál lesz nagyobb. (Ezért ha egy kulcsról tudjuk, hogy 27 másiknál nagyobb,

Részletesebben

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória Oktatási Hivatal A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai 1. feladat: Repülők (20 pont) INFORMATIKA II. (programozás) kategória Ismerünk városok közötti repülőjáratokat.

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA, MATEmATIkA I. 4 IV. FÜGGVÉNYEk 1. LEkÉPEZÉSEk, függvények Definíció Legyen és két halmaz. Egy függvény -ből -ba egy olyan szabály, amely minden elemhez pontosan egy elemet rendel hozzá. Az

Részletesebben