Programozási tételek és alkalmazásaik

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

Download "Programozási tételek és alkalmazásaik"

Átírás

1 Programozási tételek és alkalmazásaik Az ún. programozási tételek bevezetése és alkalmazása hagyományosan az egyik meghatározó pillére az ELTÉ-n folyó programozás oktatásának. A programozási tételek olyan általános célú, absztrakt szinten megfogalmazott egyszerű algoritmus minták, amelyek a tapasztalt fejlesztők szerint is a problémamegoldás és a programkészítés gyakran felhasznált elemi építőkövei. A jellegzetesen ELTE-s szemléletű programozás módszertan egyik korai, ám meghatározó forrása E. W. Dijkstra: A Discipline of Programming című könyve [1], amely 1973-ban jelent meg. A tantárgy bevezetését, kidolgozását és oktatását hosszú éveken végző Fóthi Ákos egyetemi tankönyve [2] teljeskörűen és letisztult formában tartalmazza mindazt, amit közel 30 évig tanultunk (mi, tanítványok és kollégák) az előadásaiból, egy korai, de már hivatalosan kiadott jegyzetéből [3], valamint a tananyag nagyszámú leírt változatából. A tantárgy jelenlegi oktatója Gregorics Tibor is részletesen összefoglalta egy kétkötetes könyvben [4] a tananyag időszerű tartalmát. A programozási tételek aktuális megfogalmazását is ebből a könyvből merítettem. (Hadd maradjak a személyes hangvételű egyes szám első személy mellett, végig.) A programozási tételek olyan általánosan megfogalmazott feladatokra adott (bizonyítottan helyes) absztrakt megoldások, amelyeket egy adott [m, n] egész intervallum és az azon értelmezett f függvény, illetve β tulajdonság fogalomrendszerében írunk fel. Már itt megjegyzem, hogy a feladat gyakran nem így, hanem egy A [1..n] tömbön megfogalmazva jelenik meg. Ilyenkor a tételben szereplő intervallumnak az [1..n] index tartomány felel meg, az f (i) függvényértékek pedig az A[i] tömb elemeiben nyernek elhelyezést. Ez még egy jól belátható absztrakciós lépés az eredeti megfogalmazáshoz képest, így a tömbös változatokat nem foglaljuk külön programozási tételekbe. Ezek az eredeti tételekből kevés módosítással könnyen felírhatók. (A [4] könyv szerzője általánosította a tételeket minden olyan struktúrára, amelyeken egy felsorolás definiálható. Ettől az általánosítástól itt most tekintsünk el.) A programozási tételek formája alig változott napjainkig. A korai verzióhoz képest változások történtek elsősorban a feladatspecifikáció felírásában (nem szerepel a paramétertér), illetve a ciklusszervezés módjában. Az utóbbi lényeges módosítás (korábban az intervallumon kívülről indult a ciklusváltozó, ma pedig az intervallum bal végpontjától). Felvetem majd egy olyan alternatív leírási mód lehetőségét, amelyet a nagy hatású és tekintélyes [5] Algoritmusok (az 1. kiadás fordításának a címe), illetve Új algoritmusok (a 2. kiadás fordításának a címe) könyvben alkalmaznak a szerzők (a szokásos akronímával: CLRS). Ez valamivel közelebb áll a kódolt formához, mint a programozási tételek eredeti változata. Pontosabban, úgy lehetne elhelyezni a szóban forgó CLRS-féle algoritmus leírási módot, mint amelyet az ELTE-s leírás utáni következő lépésben elkészítünk. Ez egy áthidaló állapot a (nálunk szokásos) magasabb absztrakciós szint és a (programozók által is elfogadható) programkód között. Magam is így oldok meg két lépésben iterálva kisebb méretű, oktatási célú feladatokat: (i) az ELTE-s programozási tételek magasabb absztrakciós szintjén; (ii) a CLRS könyv által használt absztrakt függvényekkel tovább lépve a kód felé. 1

2 Gyakran szembe állítják a struktogramot és a pszeudokódot. Pedig, nincs közöttük összebékíthetetlen ellentét. Noha a különbség több, mint tipográfiai: pl. gyakran máshogyan írunk fel egy IF-et az egyik, illetve a másik rendszerben, mivel a struktogramban nincs egyágú IF-THEN csak két-ágú IF-THEN-ELSE. Meglepő módon, olykor váratlanul kiderül, hogy az üres ELSE-ágakban árválkodó SKIP-ek komolyan támogatják az algoritmus működésének a megértést. Magam mindkettőt használom, de a struktogramot jóval többször, mivel jobbnak, kifejezőbbnek találom. A matematikus hallgatók, akik másodéves korukban találkoznak a struktogrammal, maguktól jutnak hasonló véleményre. Elég megnézni a feltételes maximumkeresés algoritmusának absztrakt leírását a kétféle módszer szerint. Bármilyen akár saját kialakítású leírási forma esetén is megszívlelendő az a figyelmeztetés, hogy tekintsük ezeket a megoldásokat csupán absztrakt algoritmusoknak, amelyek nem tartalmaznak előírásokat a kódolásra. A programkód létrehozása mindig egy önálló kreatív lépés, amely formai szempontból jórészt független az absztrakt megoldástól. A programozási tételeket a kisebb méretű feladatok esetén legtöbbször beszerkesztjük a programkódba (a konkrét feladatnak megfelelő módosítások után). Máskor meg külön eljárást alakítunk egy programozási tételből, amelyet eljáráshívással aktivizálunk. Mindkettőre látunk példát a bemutatott programokban. 1. Melyek a programozási tételek? A programozási tételek köre eredendően hat (6) egyszerű mintát tartalmaz. (Később kialakult a tételeknek egy haladó szintű köre is; ezzel most nem foglalkozunk.) A programozási tételek a legtöbb írásos forrásban (a sorrendtől függetlenül) a következők: 1. Számlálás Számoljuk meg, hogy az [m, n] intervallumban hány helyen teljesül a β feltétel! 2. Összegzés a.) Összegezzük az f függvény értékeit az [m, n] intervallum felett! (Ez így annyira egyszerű feladat, hogy magam nem is tekinteném programozási tételnek, hanem csak az itt következő b) feladatot és megoldását.) b.) Feltételes összegzés: összegezzük az f függvény értékeit az [m, n] intervallum azon pontjai felett, amelyekre teljesül a β tulajdonság! 3. Maximum kiválasztás Határozzuk meg az f függvény legnagyobb értékét a nem-üres [m, n] intervallum felett és adjuk meg azt a helyet is (ha több van, akkor az elsőt), ahol f ezt a legnagyobb értéket felveszi! 4. Feltételes maximum keresés Az előző feladathoz képest annyi az eltérés, hogy a maximum keresése csak azok a helyekre szorítkozik az [m, n] intervallumban, ahol a β tulajdonság fennáll. (Ha egyáltalán nincs ilyen elem, akkor ennek megfelelő választ kell adni.) 5. Szekvenciális (vagy lineáris) kiválasztás Keressük meg az első olyan helyet az m egésztől jobbra indulva, ahol a β tulajdonság fennáll ha tudjuk azt, hogy ilyen hely biztosan létezik! 2

3 6. Szekvenciális (vagy lineáris) keresés Keressük meg az [m, n] intervallumban az első olyan helyet, ahol a β tulajdonság teljesül, ha nem garantált ilyen hely létezése! (Ha nincs az intervallumban β tulajdonságú hely, akkor ilyen értelmű választ kell adnunk.) A történetileg kialakult elnevezéseket, változatosságukat nem kívánom elemezni, minősíteni, sőt teljeskörűen ismertetni sem. Az elnevezések olykor nem szerencsések, tapasztalható ugyan egy lassú korrekció, de szóhasználat java mára bevésődött. 2. A programozási tételek A programozási tételek forrásnak a [4] könyvet tekintem, amelyet ezennel idézek is. Az analóg módon történő programozás a programkészítés általánosan ismert és alkalmazott technikája. Amikor egy olyan feladatot kell megoldani, amelyhez hasonló feladatot már korábban megoldottunk, akkor az új feladat megoldását a korábbi minta alapján készítjük el. Analóg programozást többféleképpen is lehet végezni. Széles körben használják az analóg algoritmikus gondolkodást, amikor a minta megoldása során alkalmazott gondolatokat és döntéseket lemásolva készítjük el az új feladat megoldását. Kevésbé ismert technika a visszavezetés, amikor nem a mintafeladat megoldási folyamatát, hanem csak annak megoldó algoritmusát másoljuk le. Ehhez szükség van mind az új feladatnak, mind a mintafeladatnak a precíz leírására, a formális specifikációjára, hogy e kettőt összevetve pontosan felfedjük a két feladat közötti hasonlóságokat és eltéréseket. Egy új feladat visszavezetése során a vele hasonló mintafeladat megoldó algoritmusát (a minta algoritmust) sablonként használjuk, kicseréljük benne azokat az elemeket, amelyekben a kitűzött- és a mintafeladat specifikációja is eltér, hogy megkapjuk az új feladatot megoldó algoritmust. A programozási tételek következnek, de nem a fenti, hanem egy általam korábban használt sorrendben. (Nincs most időm átszerkeszteni és végig vezetni a korábbi anyagból kivett sorrendet; esetleg bejöhetne valamilyen hivatkozási ellentmondás is.) Az első két algoritmus érzékeny a ciklusszervezésre, a további négy már kevésbé, vagy egyáltalán nem. A lineáris kereséseknél figyelni arra, hogy miután megtaláltuk a keresett elemet, az azt indexelő ciklusváltozó értékét megnöveljük, így az nem a megtalált elemen áll. Biztosítani kell ezért, pl. egy ind változó bevezetésével, hogy a megtalált elemet ne veszítsük szem elől. (A tételek eredeti, Fóthi-féle formájában ez a jelenség nem lépett fel; erre még visszatérek.) 2.1. Kiválasztás (szekvenciális vagy lineáris kiválasztás) Feladat: Adott egy m egész szám és egy, az m helyen és attól jobbra értelmezett : Z L feltétel. Határozzuk meg az m helytől jobbra eső első olyan számot (ideértve magát az m helyet is), amely kielégíti a feltételt, ha tudjuk, hogy ilyen hely biztosan létezik! Specifikáció: A = (m: Z, ind: Z) Ef = (m=m i m: (i)) Uf = (Ef ind m (ind) i [m..ind 1]: (i) ) 3

4 Algoritmus: ind := m (ind) ind := ind + 1 Vegyük észre, hogy a programban nincs szükség egy külön i változóra az intervallum bejárásához, ezt a szerepet az ind eredményváltozó tölti be írja a szerző [4]. Saját kiegészítésem: ha a feltételt nem szeretnénk a ciklusfeltételbe beírni (pl. azért, mert több utasítással számítható), akkor egy logikai változó alkalmazásával a következő absztrakt programot kapjuk. Ez már egyaránt használja az i ciklusváltozót és az ind eredményváltozót. l, i := hamis, m l l, ind := (i), i i := i Keresés (szekvenciális vagy lineáris keresés) Feladat: Adott az egész számok egy [m..n] intervalluma és egy : [m..n] L feltétel. Határozzuk meg az [m..n] intervallumban balról az első olyan számot, amely kielégíti a feltételt! Ha találunk ilyen elemet, akkor azt az l logikai változó igaz értéke jelzi, ind pedig megadja az elem indexét. Ha nincs az [m..n]-ben tulajdonságú elem, akkor ezt az l logikai változó hamis értéke mutatja és ekkor az ind változó értéke irreleváns. Specifikáció: Algoritmus: A = (m: Z, n: Z, l: L, ind: Z) Ef = (m=m n=n ) Uf = (Ef (l = i [m..n]: (i)) (l ind [m..n] (ind) i [m..ind 1]: (i)) ) l, i := hamis, m l i n l, ind := (i), i i := i Számlálás (adott tulajdonságú elemek megszámolása) Feladat: Adott az egész számok egy [m..n] intervalluma és egy : [m..n] L feltétel. Határozzuk meg, hogy az [m..n] intervallumon a feltétel hányszor veszi fel az igaz értéket! (Ha m > n, akkor egyszer sem.) 4

5 Specifikáció: A = (m: Z, n: Z, c: N); Ef = (m=m n=n ); Uf = (Ef c = n i= m (i) 1 ) Algoritmus: c, i := 0, m i n (i) c := c+1 SKIP i := i Összegzés (feltétel nélküli, illetve adott tulajdonságú elemek összegzése) Feladat: Adott az egész számok egy [m..n] intervalluma és egy f: [m..n] H függvény. (A H halmaz elemein értelmezett összeadásnak és jelölje ezt a + jel.) Határozzuk meg az f függvény [m..n]-en felvett értékeinek az összegét! (Az m > n esetén, vagyis, ha üres az intervallum, akkor ennek az értéke nulla). Ez a feltétel nélküli összegzés. Specifikáció: Algoritmus: A = (m: Z, n: Z, s: H) Ef = ( m=m n=n ) Uf = ( Ef s = f (i) ) n i= m s, i := 0, m i n s : = s + f ( i) i := i + 1 A H halmaz helyén legtöbbször a valós számok R halmazával találkozunk. A bevezetőben mondottak szerint ezt az egyszerű, feltétel nélküli összegzést nem szívesen tartom külön programozási tételnek. A feltételes összegzést viszont igen. Ekkor az intervallum tulajdonságú elemein kell az f függvény értékeit összegezni. Algoritmus: s, i := 0, m i n s := s + f(i) (i) i := i + 1 SKIP 5

6 2.5. Maximum kiválasztás Feladat: Adott az egész számok egy [m..n] intervalluma és egy f: [m..n] H függvény. A H halmaz elemein értelmezett egy teljes rendezési reláció. Határozzuk meg, hogy az f függvény hol veszi fel az [m..n] nem üres (ez előfeltétel!) intervallumon a legnagyobb értéket, és mondjuk meg, hogy mekkora ez a maximális érték! Specifikáció: Algoritmus: A = (m: Z, n: Z, ind: Z, max: H) Ef = (m=m n=n n m) Uf = (Ef ind [m..n] max = f(ind) i [m..n]: max f(i)) max, ind, i := f(m), m, m+1 i n max < f(i) max, ind := f(i), i SKIP i := i + 1 Találkozhatunk olyan feladatokkal, ahol csak az ind, vagy csak a max értékére van szükség. A második esetben az ind-nek történő értékadás törölhető, de az első esetben a max változóra mindenképpen szükség van. Érdemes megjegyezni, hogy ez az a programozási tétel, amelyet az algoritmusok és adatstruktúrák elnevezésű diszciplína ennek emblematikus műve az [5] könyv felvesz a nyilvántartott és tanulmányozott algoritmusok sorába Feltételes maximumkeresés Feladat: Adott az egész számok egy [m..n] intervalluma, egy f: [m..n] H függvény és egy : [m..n] L feltétel. A H halmaz elemein értelmezett egy teljes rendezési reláció. Határozzuk meg, hogy az [m..n] intervallum feltételt kielégítő elemei közül az f függvény hol veszi fel a legnagyobb értéket, és mondjuk meg, mekkora ez az érték! Lehet, hogy egyáltalán nincs feltételt kielégítő elem az [m..n] intervallumban, vagy m > n. Ekkor az l logikai változó hamis értéke jelezze ezt, és ekkor a max és ind változók értéke irreleváns. A pozitív esetet pedig l változó igaz értéke jelezze! Specifikáció: A = (m: Z, n: Z, l: L, ind: Z, max: H) Ef = (m=m n=n ) Uf = (Ef (l = i [m..n]: (i) ) ( l ind [m..n] max = f(ind) (ind) ( i [m..n]: (i) max f(i)))) 6

7 Algoritmus: l, i := hamis, m i n (i) l (i) l (i) SKIP max < f(i) l, max, ind := max, ind := f(i), i i := i + 1 SKIP igaz, f(i), i Az elágazás harmadik ága igényelhet egy kevés magyarázatot. Az l logikai változó jelentése az, hogy találtunk-e már tulajdonságú elemet az intervallum bejárása során. Kezdetben még nyilván: nem. Amikor az első ilyen elemre lépünk, akkor kerül a vezérlés a harmadik ágra. Itt l-et át kell állítani igazra, és inicializálni kell a max és az ind változókat, éppen úgy, mint a maximum kiválasztás első lépésében. 3. Az algoritmusok leírási módja Az algoritmusok megadásának módja az ELTE IK-n hagyományosan a struktogram forma. A grafikus kifejező erővel rendelkező leírási módot jobban szeretik a hallgatók, még a matematikusok is előnyben részesítik, noha először pszeudokóddal találkoznak. Magam is ezen a véleményen vagyok. Ugyanakkor legalább is a matematikusoknál nálam, a tantárgyak elvégzése során szabadon lehet pszeudokódot is használni, ha valaki azt kedveli. Akár struktogram, akár pszeudokód a választott eszköz, azon belül egyaránt minimalista jelölésmódot használnak az ELTE-n. Ha ezt a készletet összehasonlítjuk meghatározó jelentőségű [5] könyvben alkalmazott leírási móddal, akkor rögtön szembe tűnik, hogy abban a szerzők bővebb készlettel dolgoznak. - Nálunk, a [4]-ben a struktogram nem függvény, nem alprogram, hanem csak egy absztrakt utasításokból álló vezérlési struktúra, amely megoldja a feladatot. Az [5] szerzői az algoritmusokat (meghívható) absztrakt függvények formájában adják meg, amelyekből a vezérlés az eredményeket visszaadó return utasítás hatására vissza. - A [4]-ben szereplő programozási tételeknél nem találunk fejléc sort ; ilyen csak akkor szerepel az ELTE-s eszköztárban, ha egy absztrakt algoritmus felhasználásra (úgymond meghívásra ) kerül. Az [5] könyvben a függvényeket fejléc sor vezeti be, amely a függvény nevét és input paramétereit tartalmazza. - Míg a [4] mindig saját szervezésű while-ciklust használ, addig az [5]-ben alkalmazzák a for-ciklust is, ha egy keresési tartományon egyszerűen csak végig kell menni. - A [4]-ben leírt ELTE-s felfogás szerint a vezérlés mindig a struktogram alján ér véget. Az [5] könyv megengedi azt, hogy a return utasítás bármely ponton elhagyja a függvény eljárást és output értékkekkel visszatérjen a hívás helyére. 7

8 - Az előző különbség már eléggé lényeginek mondható. Ennek következménye az alábbi eltérés a ciklusfeltételek kialakításában. A [4]-ben a ciklusfeltételek gyakran összetettebbek, mert logikai kifejezésekkel pontosan meg kell adni a ciklus terminálásának feltételét. Az [5] könyvben szereplő bonyolultabb szervezésű ciklusok feltételei csak azt adják meg, hogy legfeljebb meddig fut az iteráció és a ciklus belsejében elhelyezett return utasítások gondoskodnak az iteráció befejezéséről, igaz, hogy csak abban az esetben, ha ez a függvény eljárást elhagyását (és a vezérlés visszatérését) is jelent egyben. - Az [4]-es ELTE-s feladatmegoldások általában kisebb egységekre tagoltabbak, abból következően, hogy egy-egy alkalmazott programozási tétel megmarad külön egységnek. Az idézett [5] könyvben viszont gyakran beintegrálódik egy alkalmazott programozási tétel a felhasználó eljárásba; szinte nem is tudjuk már azonosítani. (Túl nagy méretű függvény-eljárások ott sem szerepelnek.) Világos, hogy a puritánabb ELTE-s változatra könnyebb kijelenteni, hogy semmilyen implementálási utasítást nem szeretnénk adni, de még sugallani sem, egy feladat absztrakt megoldásában. Az is világos azonban, hogy ha programot kell írni, akkor a mi informatikus hallgatóinknak is el kell jutniuk a programkódhoz, amelyhez a CLRS-féle felfogás közelebb áll meg absztrakt szinten. Ahogyan említettem saját gyakorlatomat, talán célszerű egy ideig két lépésben is megadni az absztrakt megoldást: először a [4]-ben leírt eszköztárral, majd meghozni az [5]-nek megfelelő döntéseket. Véleményem szerint egyébként is eleve, tehát egy megelőző mélyebb, absztraktabb szintű megoldás nélkül is megengedhető az [5]-ben alkalmazott elemek használata. Aki először az [5] stílusú algoritmus-leírással találkozik, az sincs hátrányban velünk szemben. Személyesen azonban örülök, hogy ezzel a szakmai kultúrával találkoztam. Megállapítható, hogy az informatikusok mégis csak érzékenyek arra, hogy a végső absztrakt megoldásuk ne legyen túlságosan távol az implementációtól, a programnyelvek világától. Nézzük sorban az [5]-ben látott vezérlési szerkezeteket: - A for-ciklus használata nem módosítja a megoldás absztrakt szintjét, továbbá kifejezőbb, mint egy while-ciklussal, ha egy tartomány bejárása a feladat. - A fejléc sort úgy lehet tekinteni, mint az eljárás szignatúráját, amely az input és output paramétereket mintegy hangsúlyosan kiemeli a specifikációból. Ha csak az inputot tartalmazza a fejléc, akkor tudatosítjuk, hogy melyek a visszaadott eredmények. - A return utasítás kétségtelenül utal arra, hogy implementáljunk függvényt, de csak utal rá; határozott utasítást biztosan nem ad. - A return utasítás a strukturált programozás követői által is elfogadott módon, legálisan elhagyja azt a vezérlési struktúrát (legtöbbször ciklust), amelyben szerepel. Ezáltal általában mentesíti a programozót az összetett (logikai változóval konjugált) ciklusfeltétel írásától. (Az a realitás, hogy a legtöbb programozó már nem is hajlandó összetett ciklusfeltételt írni, ha megoldható egy alkalmas return -nel a ciklus elhagyása.) 8

9 (Itt most áttérek pszeudokódra, aminek nincs különösebb jelentősége, csak annyi, hogy ez a leírás így hamarább készül el. A fenti rajzokat az [4] könyv kéziratából vettem át, itt magam nem készítettem ábrát a jegyzetemben igen, de máshogyan, most jelentős időbe telne az új ábrák elkészítése.) Például, a maximum kiválasztás tételét így is meg lehet fogalmazni (a SKIP-ág elhagyásával): MaxKiv (m, n) 1 max, ind := f(m), m 2 for i = m+1 to n 3 if max < f(i) 4 then max, ind := f(i), i 5 return max, ind A szekvenciális keresés (korábban: lineáris keresés 2) programozási tételét is felírjuk fejsorral és return utasítás alkalmazásával. Lehetne for-ciklust alkalmazni és azt elhagyni return-t, de ehhez stílusában jobban illik a while-ciklus. A találat tényét (igaz vagy hamis) nem logikai változó közvetíti, hanem a visszaadott érték: ha m <= i <= n, akkor találtunk béta, azaz (i) tulajdonságú helyet, akkor éppen az i hely az első ilyen; ha viszont az intervallumon kívüli n+1 értéket adjuk vissza, az azt jelenti, hogy az intervallum nem tartalmaz béta ( ) tulajdonságú egész helyet. (Általános szemlélet: a keresés negatív eredményét a keresés helyének egy nem-reális, extremális értéke mutatja.) LinKer2 (m, n) 1 i := m 2 while i <= n 3 if béta (i) 4 then return i 5 else i := i+1 6 return n+1 A szekvenciális keresés leírási módja lényegében olyan, mint amilyen absztrakt kódokat a [5] könyvben láthatunk. Felmerülhet a kérdés, hogy (függetlenül attól, hogy struktogramot vagy pszeudokódot használunk) melyik a jobb: az eredeti puritán változat, vagy ez a bővebb eszköztárú stílus? Melyik formában jegyezzük meg a programozási tételeket? Ezt szívesen az egyénre (hallgatóra, olvasóra) bíznám, azzal a javaslattal, hogy bármit is választ, a leírást tekintse absztrakt algoritmusnak, amely nem tartalmaz kódolási előírást. Magam egy olyan elég konzervatív leírási módot használok, amely közel áll az eredetihez: struktogram, fejléc sorral kiegészítve, for-ciklust is megengedve, de logikai változók használatával a nem-fix lefutású ciklusok feltételében, a return utasítást mellőzve. 9

10 Ezt követően ahogy fentebb jeleztem még következik az absztrakt függvény [5]-stílusú kialakítása. Ennek megfelelően a programkód (jelenleg a Python nyelven) általában jelentős formai különbségeket mutat az eredeti absztrakt megoldáshoz képest, ugyanis (1) a kódban megjelenik a return utasítás, továbbá (2) a tételben szereplő logikai változók a kódban már gyakran nem szerepelnek, mert (a) a return folytán egyszerűbb lesz a ciklus-szervezés és (b) a negatív választ nem logikai változó, hanem extremális visszaadott érték közvetíti. Ez az algoritmus leírási formát tartom a legkifejezőbbnek absztrakt szinten. Természetesen semmi nehézséget nem jelent a modernebb változat használata sem, különös tekintettel a gyakran forgatott [5] könyv algoritmusaira. 4. A programozási tételek alkalmazása és kódolása Ha egy feladat megoldásában felismerjük egy vagy több programozási tétel alkalmazást, az biztonságot ad az absztrakt megoldás létrehozásában, a programtervezésben és a kódolásban. Ez akkor is igaz, ha végül a programkódban az alkalmazott programozási tétel eredeti alakja megváltozik. Az absztrakt megoldás implementálása, a programkód létrehozása önálló kreatív lépés a számítógépes megoldási folyamatban. Számos példaprogramot mellékelek, így hiteles! Egy programozási tétel formai szempontból alapvetően két módon válhat a programkód alkotó részévé: (1) Gyakoribb az az eset, amikor a szükséges módosításokkal (pl. a béta ( ) tulajdonság konkrét megadásával) a tételt mintegy beszerkesztjük a programkódba. Ekkor a fejsor nyilván nem szerepel a kódban. Ebben az esetben inkább olyan változatot használunk, amelyik nem tartalmaz return utasítást, mivel az egy önálló függvény megírására utal. Előfordul azonban olyan eset (mint például a prím-tulajdonságot eldöntő feladatnál), hogy a tételt befogadó eljárásból éppen a programozási tétel return utasítása jelenti a helyes kilépést. Ilyen esetben a return utasítást tartalmazó változatot be tudjuk integrálni egy eljárás kódjába. (2) Ritkább esetben a programozási tételt önálló függvényként írjuk meg. Ebben az esetben a return utasítást tartalmazó változatot vehetjük alapul. Ekkor a fejsor a függvény definíció első sora lesz. Példát is látunk majd erre a Dijkstra algoritmus kódolása esetén, ahol a feltételes maximumkeresés tételét célszerű külön függvényként átvenni (némi átalakítás mellett). Irodalom [1] E. W. Dijkstra: A Discipline of Programming. Prentice-Hall, Englewood Cliffs, 1973 [2] Fóthi Á.: Bevezetés a programozáshoz. ELTE jegyzet, 1985 [3] Fóthi Á.: Bevezetés a programozáshoz. ELTE Eötvös Kiadó, 2005 [4] Gregorics T.: Programozás, 1. kötet: Tervezés, 2. kötet: Megvalósítás. ELTE Eötvös Kiadó, 2013 [5] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Új algoritmusok, Scolar Kiadó,

Térinformatikai algoritmusok Elemi algoritmusok

Térinformatikai algoritmusok Elemi algoritmusok Cserép Máté 2016. szeptember 14. Analóg programozásnak nevezzük azt, amikor egy feladat megoldásához egy már ismert és megoldott feladat megoldását használjuk fel. Általában nem pontosan ugyanazt a feladatot

Részletesebben

Térinformatikai algoritmusok Elemi algoritmusok

Térinformatikai algoritmusok Elemi algoritmusok Cserép Máté Analóg programozásnak nevezzük azt, amikor egy feladat megoldásához egy már ismert és megoldott feladat megoldását használjuk fel. Általában nem pontosan ugyanazt a feladatot oldottuk meg korábban,

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

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

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar PROGRAMOZÁS tantárgy Gregorics Tibor egyetemi docens ELTE Informatikai Kar Követelmények A,C,E szakirány B szakirány Előfeltétel Prog. alapismeret Prog. alapismeret Diszkrét matematika I. Óraszám 2 ea

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

Programozási Módszertan definíciók, stb.

Programozási Módszertan definíciók, stb. Programozási Módszertan definíciók, stb. 1. Bevezetés Egy adat típusát az adat által felvehető lehetséges értékek halmaza (típusérték halmaz, TÉH), és az ezen értelmezett műveletek (típusműveletek) együttesen

Részletesebben

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet 7. BINÁRIS FÁK Az előző fejezetekben már találkoztunk bináris fákkal. Ezt a központi fontosságú adatszerkezetet most vezetjük be a saját helyén és az általános fák szerepét szűkítve, csak a bináris fát

Részletesebben

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10. Összetett programozási tételek Sorozathoz sorozatot relő feladatokkal foglalkozunk. A bemenő sorozatot le kell másolni, s közben az elemekre vonatkozó átalakításokat lehet végezni rajta: Input : n N 0,

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

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

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

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás, rendezések 2015 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Algoritmusok és programozási tételek

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

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

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

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

Programozási tételek. Dr. Iványi Péter

Programozási tételek. Dr. Iványi Péter Programozási tételek Dr. Iványi Péter 1 Programozási tételek A programozási tételek olyan általános algoritmusok, melyekkel programozás során gyakran találkozunk. Az algoritmusok általában számsorozatokkal,

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

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

Programozás Minta programterv a 1. házi feladathoz 1.

Programozás Minta programterv a 1. házi feladathoz 1. Programozás Minta programterv a 1. házi feladathoz 1. Gregorics Tibor 1. beadandó/0.feladat 2008. december 6. EHACODE.ELTE gt@inf.elte.hu 0.csoport Feladat Egy osztályba n diák jár, akik m darab tantárgyat

Részletesebben

Maximum kiválasztás tömbben

Maximum kiválasztás tömbben ELEMI ALKALMAZÁSOK FEJLESZTÉSE I. Maximum kiválasztás tömbben Készítette: Szabóné Nacsa Rozália Gregorics Tibor tömb létrehozási módozatok maximum kiválasztás kódolása for ciklus adatellenőrzés do-while

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

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

Véletlen sorozatok ellenőrzésének módszerei. dolgozat

Véletlen sorozatok ellenőrzésének módszerei. dolgozat Eötvös Loránd Tudományegyetem Informatikai Kar Komputeralgebra Tanszék Véletlen sorozatok ellenőrzésének módszerei dolgozat Témavezető: Dr. Iványi Antal Miklós egyetemi tanár Készítette: Potempski Dániel

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

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás Elemi programok Definíció Az S A A program elemi, ha a A : S(a) { a, a, a, a,..., a, b b a}. A definíció alapján könnyen látható, hogy egy elemi program tényleg program. Speciális elemi programok a kövekezők:

Részletesebben

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás Programozási tételek, rendezések 2015 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Algoritmusok

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

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

Programozási módszertan. Mohó algoritmusok

Programozási módszertan. Mohó algoritmusok PM-08 p. 1/17 Programozási módszertan Mohó algoritmusok Werner Ágnes Villamosmérnöki és Információs Rendszerek Tanszék e-mail: werner.agnes@virt.uni-pannon.hu PM-08 p. 2/17 Bevezetés Dinamikus programozás

Részletesebben

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1 OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Különféle élőlények egy túlélési versenyen vesznek részt. A lények egy pályán haladnak végig, ahol váltakozó terep viszonyok vannak.

Részletesebben

Programozási alapismeretek 1. előadás

Programozási alapismeretek 1. előadás Programozási alapismeretek 1. előadás Tartalom A problémamegoldás lépései programkészítés folyamata A specifikáció Az algoritmus Algoritmikus nyelvek struktogram A kódolás a fejlesztői környezet 2/33 A

Részletesebben

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t.. A Név: l 2014.04.09 Neptun kód: Gyakorlat vezető: HG BP MN l 1. Adott egy (12 nem nulla értékû elemmel rendelkezõ) 6x7 méretû ritka mátrix hiányos 4+2 soros reprezentációja. SOR: 1 1 2 2 2 3 3 4 4 5 6

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

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin 1 A PROGRAMOZÁS ALAPJAI 3 Készítette: Vénné Meskó Katalin Információk 2 Elérhetőség meskokatalin@tfkkefohu Fogadóóra: szerda 10:45-11:30 Számonkérés Időpontok Dec 19 9:00, Jan 05 9:00, Jan 18 9:00 egy

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

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

Programozási módszertan

Programozási módszertan 1 Programozási módszertan 1. Alapfogalmak Feldhoffer Gergely 2012 Féléves tananyag terve 2 Program helyességének bizonyítása Reprezentáció Logikai-matematikai eszköztár Programozási tételek bizonyítása

Részletesebben

Programozás Minta programterv a 2. házi feladathoz 1.

Programozás Minta programterv a 2. házi feladathoz 1. Programozás Minta programterv a. házi feladathoz 1. Gregorics Tibor. beadandó/0.feladat 01. január 11. EHACODE.ELTE gt@inf.elte.hu 0.csoport Feladat Egy szöveges állományban bekezdésekre tördelt szöveg

Részletesebben

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3) Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Függvények C program egymás mellé rendelt függvényekből áll. A függvény (alprogram) jó absztrakciós eszköz a programok

Részletesebben

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2) Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.05. -1- Függvények C program egymás mellé rendelt függvényekből

Részletesebben

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek Programozás alapjai gyakorlat 4. gyakorlat Konstansok, tömbök, stringek Házi ellenőrzés (f0069) Valósítsd meg a linuxos seq parancs egy egyszerűbb változatát, ami beolvas két egész számot, majd a kettő

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

Algoritmusok bonyolultsága

Algoritmusok bonyolultsága Algoritmusok bonyolultsága 5. előadás http://www.ms.sapientia.ro/~kasa/komplex.htm 1 / 27 Gazdaságos faváz Kruskal-algoritmus Joseph Kruskal (1928 2010) Legyen V = {v 1, v 2,..., v n }, E = {e 1, e 2,...,

Részletesebben

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere Szekvenciális programok kategóriái strukturálatlan strukturált NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE Hoare-Dijkstra-Gries módszere determinisztikus valódi korai nem-determinisztikus általános fejlett

Részletesebben

2. Visszalépéses stratégia

2. Visszalépéses stratégia 2. Visszalépéses stratégia A visszalépéses keres rendszer olyan KR, amely globális munkaterülete: út a startcsúcsból az aktuális csúcsba (ezen kívül a még ki nem próbált élek nyilvántartása) keresés szabályai:

Részletesebben

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

Algoritmizálás és adatmodellezés tanítása 1. előadás Algoritmizálás és adatmodellezés tanítása 1. előadás Algoritmus-leíró eszközök Folyamatábra Irányított gráf, amely csomópontokból és őket összekötő élekből áll, egyetlen induló és befejező éle van, az

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

Programok értelmezése

Programok értelmezése Programok értelmezése Kód visszafejtés. Izsó Tamás 2016. szeptember 22. Izsó Tamás Programok értelmezése/ 1 Section 1 Programok értelmezése Izsó Tamás Programok értelmezése/ 2 programok szemantika értelmezése

Részletesebben

A C programozási nyelv II. Utasítások. A függvény.

A C programozási nyelv II. Utasítások. A függvény. A C programozási nyelv II. Utasítások. A függvény. Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv II (Utasítások, fuggvények) CBEV2 / 1 Kifejezés utasítás Kifejezés utasítás, blokk

Részletesebben

Függvények növekedési korlátainak jellemzése

Függvények növekedési korlátainak jellemzése 17 Függvények növekedési korlátainak jellemzése A jellemzés jól bevált eszközei az Ω, O, Θ, o és ω jelölések. Mivel az igények általában nemnegatívak, ezért az alábbi meghatározásokban mindenütt feltesszük,

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

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek Adatbázis és szoftverfejlesztés elmélet Témakör 8. 1. Egy sorozathoz egy érték hozzárendelése Az összegzés tétele Összefoglalás Programozási tételek Adott egy számsorozat. Számoljuk és írassuk ki az elemek

Részletesebben

PROGRAMOZÁSI TÉTELEK

PROGRAMOZÁSI TÉTELEK PROGRAMOZÁSI TÉTELEK Összegzés tétele Adott egy N elemű számsorozat: A(N). Számoljuk ki az elemek összegét! S:=0 Ciklus I=1-től N-ig S:=S+A(I) Megszámlálás tétele Adott egy N elemű sorozat és egy - a sorozat

Részletesebben

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism) Programozás alapjai C nyelv 8. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény

Részletesebben

Gauss-Jordan módszer Legkisebb négyzetek módszere, egyenes LNM, polinom LNM, függvény. Lineáris algebra numerikus módszerei

Gauss-Jordan módszer Legkisebb négyzetek módszere, egyenes LNM, polinom LNM, függvény. Lineáris algebra numerikus módszerei A Gauss-Jordan elimináció, mátrixinvertálás Gauss-Jordan módszer Ugyanazzal a technikával, mint ahogy a k-adik oszlopban az a kk alatti elemeket kinulláztuk, a fölötte lévő elemeket is zérussá lehet tenni.

Részletesebben

Hatékonyság 1. előadás

Hatékonyság 1. előadás Hatékonyság 1. előadás Mi a hatékonyság Bevezetés A hatékonyság helye a programkészítés folyamatában: csak HELYES programra Erőforrásigény: a felhasználó és a fejlesztő szempontjából A hatékonyság mérése

Részletesebben

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I. Keresés Rendezés Feladat Keresés Rendezés Feladat Tartalom Keresés és rendezés A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Részletesebben

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1. Nagyságrendek Kiegészítő anyag az Algoritmuselmélet tárgyhoz (a Rónyai Ivanyos Szabó: Algoritmusok könyv mellé) Friedl Katalin BME SZIT friedl@cs.bme.hu 018. február 1. Az O, Ω, Θ jelölések Az algoritmusok

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

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán Keresés Rendezés Feladat Keresés és rendezés A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán 2016. november 7. Farkas B., Fiala

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

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

BASH script programozás II. Vezérlési szerkezetek

BASH script programozás II. Vezérlési szerkezetek 06 BASH script programozás II. Vezérlési szerkezetek Emlékeztető Jelölésbeli különbség van parancs végrehajtása és a parancs kimenetére való hivatkozás között PARANCS $(PARANCS) Jelölésbeli különbség van

Részletesebben

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E 5. SOR A sor adatszerkezet is ismerős a mindennapokból, például a várakozási sornak számos előfordulásával van dolgunk, akár emberekről akár tárgyakról (pl. munkadarabokról) legyen szó. A sor adattípus

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

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA, MATEmATIkA I. 1 I. HALmAZOk 1. JELÖLÉSEk A halmaz fogalmát tulajdonságait gyakran használjuk a matematikában. A halmazt nem definiáljuk, ezt alapfogalomnak tekintjük. Ez nem szokatlan, hiszen

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

2. Visszalépéses keresés

2. Visszalépéses keresés 2. Visszalépéses keresés Visszalépéses keresés A visszalépéses keresés egy olyan KR, amely globális munkaterülete: egy út a startcsúcsból az aktuális csúcsba (az útról leágazó még ki nem próbált élekkel

Részletesebben

1. Jelölje meg az összes igaz állítást a következők közül!

1. Jelölje meg az összes igaz állítást a következők közül! 1. Jelölje meg az összes igaz állítást a következők közül! a) A while ciklusban a feltétel teljesülése esetén végrehajtódik a ciklusmag. b) A do while ciklusban a ciklusmag után egy kilépési feltétel van.

Részletesebben

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában Programozás alapjai C nyelv 8. gyakorlat Szeberényi mre BME T Programozás alapjai. (C nyelv, gyakorlat) BME-T Sz.. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény

Részletesebben

AWK programozás, minták, vezérlési szerkezetek

AWK programozás, minták, vezérlési szerkezetek 10 AWK programozás, minták, vezérlési szerkezetek AWK futtatási módok AWK parancs, közvetlen programkódmegadás: awk 'PROGRAMKÓD' FILE példa: ls -l awk '{print $1, $5}' a programkód helyére minden indentálás

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

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14. Informatika 1 2011 Második előadás, vezérlési szerkezetek Szabó Adrienn 2011. szeptember 14. Tartalom Algoritmusok, vezérlési szerkezetek If - else: elágazás While ciklus For ciklus Egyszerű típusok Összetett

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

6. fejezet: Ciklusok

6. fejezet: Ciklusok 6. fejezet: Ciklusok Mint a nyelvekben általában, itt is léteznek ciklusok. Az alapvető három ciklus-típus: elöltesztelő, hátultesztelő és számláló. Lássuk ezeket sorban! Elöltesztelő = while. A while

Részletesebben

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások Megoldások 1. Oldd meg a következő egyenleteket! (Alaphalmaz: Z) a) (x 1) (x + 1) 7x + 1 = x (4 + x) + 2 b) 1 2 [5 (x 1) (1 + 2x) 2 4x] = (7 x) x c) 2 (x + 5) (x 2) 2 + (x + 1) 2 = 6 (2x + 1) d) 6 (x 8)

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

Eljárások és függvények

Eljárások és függvények Eljárások és függvények Jegyzet Összeállította: Faludi Anita 2012. Bevezetés Ez a jegyzet elsősorban azoknak a diákoknak készült, akiket tanítok, ezért a jegyzet erőteljesen hiányos. Az olvasó egy percig

Részletesebben

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok 6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok 1. feladat: Az EURO árfolyamát egy negyedéven keresztül hetente nyilvántartjuk (HUF / EUR). Írjon C programokat az alábbi kérdések

Részletesebben

Kiegészítő előadás. Vizsgabemutató VBA. Dr. Kallós Gábor, Fehérvári Arnold, Pusztai Pál Krankovits Melinda. Széchenyi István Egyetem

Kiegészítő előadás. Vizsgabemutató VBA. Dr. Kallós Gábor, Fehérvári Arnold, Pusztai Pál Krankovits Melinda. Széchenyi István Egyetem Kiegészítő előadás Vizsgabemutató VBA Dr. Kallós Gábor, Fehérvári Arnold, Pusztai Pál Krankovits Melinda 2016 2017 1 VBA A Szamokat_General szubrutin segítségével generáljunk 1000 db egész számot a [0,

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

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

OOP. Alapelvek Elek Tibor

OOP. Alapelvek Elek Tibor OOP Alapelvek Elek Tibor OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós

Részletesebben

Bevezetés a programozásba. 5. Előadás: Tömbök

Bevezetés a programozásba. 5. Előadás: Tömbök Bevezetés a programozásba 5. Előadás: Tömbök ISMÉTLÉS Specifikáció Előfeltétel: milyen körülmények között követelünk helyes működést Utófeltétel: mit várunk a kimenettől, mi az összefüggés a kimenet és

Részletesebben

Egyenletek, egyenlőtlenségek VII.

Egyenletek, egyenlőtlenségek VII. Egyenletek, egyenlőtlenségek VII. Magasabbfokú egyenletek: A 3, vagy annál nagyobb fokú egyenleteket magasabb fokú egyenleteknek nevezzük. Megjegyzés: Egy n - ed fokú egyenletnek legfeljebb n darab valós

Részletesebben

Információtartalom vázlata

Információtartalom vázlata 1. Az Ön cégétől árajánlatot kértek egy üzleti portál fejlesztésére, amelynek célja egy online áruház kialakítása. Az árajánlatkérés megválaszolásához munkaértekezletet tartanak, ahol Önnek egy vázlatos

Részletesebben

BASH SCRIPT SHELL JEGYZETEK

BASH SCRIPT SHELL JEGYZETEK BASH SCRIPT SHELL JEGYZETEK 1 TARTALOM Paraméterek... 4 Változók... 4 Környezeti változók... 4 Szűrők... 4 grep... 4 sed... 5 cut... 5 head, tail... 5 Reguláris kifejezések... 6 *... 6 +... 6?... 6 {m,n}...

Részletesebben

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje 1. Alapfogalmak 1.1. Algoritmus Az algoritmus olyan elemi műveletekből kompozíciós szabályok szerint felépített összetett művelet, amelyet megadott feltételt teljesítő bemeneti adatra végrehajtva, a megkívánt

Részletesebben

11. modul: LINEÁRIS FÜGGVÉNYEK

11. modul: LINEÁRIS FÜGGVÉNYEK MATEMATIK A 9. évfolyam 11. modul: LINEÁRIS FÜGGVÉNYEK KÉSZÍTETTE: CSÁKVÁRI ÁGNES Matematika A 9. évfolyam. 11. modul: LINEÁRIS FÜGGVÉNYEK Tanári útmutató 2 A modul célja Időkeret Ajánlott korosztály Modulkapcsolódási

Részletesebben

A C# programozási nyelv alapjai

A C# programozási nyelv alapjai A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet

Részletesebben

Leképezések. Leképezések tulajdonságai. Számosságok.

Leképezések. Leképezések tulajdonságai. Számosságok. Leképezések Leképezések tulajdonságai. Számosságok. 1. Leképezések tulajdonságai A továbbiakban legyen A és B két tetszőleges halmaz. Idézzünk fel néhány definíciót. 1. Definíció (Emlékeztető). Relációknak

Részletesebben

Adatbázis rendszerek Gy: Algoritmusok C-ben

Adatbázis rendszerek Gy: Algoritmusok C-ben Adatbázis rendszerek 1. 1. Gy: Algoritmusok C-ben 53/1 B ITv: MAN 2015.09.08 Alapalgoritmusok Összegzés Megszámlálás Kiválasztás Kiválasztásos rendezés Összefésülés Szétválogatás Gyorsrendezés 53/2 Összegzés

Részletesebben

Occam 1. Készítette: Szabó Éva

Occam 1. Készítette: Szabó Éva Occam 1. Készítette: Szabó Éva Párhuzamos programozás Egyes folyamatok (processzek) párhuzamosan futnak. Több processzor -> tényleges párhuzamosság Egy processzor -> Időosztásos szimuláció Folyamatok közötti

Részletesebben

1. Alapok. #!/bin/bash

1. Alapok. #!/bin/bash 1. oldal 1.1. A programfájlok szerkezete 1. Alapok A bash programok tulajnképpen egyszerű szöveges fájlok, amelyeket bármely szövegszerkesztő programmal megírhatunk. Alapvetően ugyanazokat a at használhatjuk

Részletesebben

Függvények Megoldások

Függvények Megoldások Függvények Megoldások ) Az ábrán egy ; intervallumon értelmezett függvény grafikonja látható. Válassza ki a felsoroltakból a függvény hozzárendelési szabályát! a) x x b) x x + c) x ( x + ) b) Az x függvény

Részletesebben

Algoritmizálás, adatmodellezés 1. előadás

Algoritmizálás, adatmodellezés 1. előadás Algoritmizálás, adatmodellezés 1. előadás Algoritmus-leíró eszközök Folyamatábra Irányított gráf, amely csomópontokból és őket összekötő élekből áll, egyetlen induló és befejező éle van, az induló élből

Részletesebben

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat 9. Előadás Rendezések A rendezési probléma: Bemenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat Kimenet: a bemenő sorozat olyan (a 1, a 2,,a n ) permutációja, hogy a 1 a 2 a n 2 Rendezések Általánosabban:

Részletesebben

Egyenletek, egyenlőtlenségek X.

Egyenletek, egyenlőtlenségek X. Egyenletek, egyenlőtlenségek X. DEFINÍCIÓ: (Logaritmus) Ha egy pozitív valós számot adott, 1 - től különböző pozitív alapú hatvány alakban írunk fel, akkor ennek a hatványnak a kitevőjét logaritmusnak

Részletesebben