Programozási tételek és alkalmazásaik
|
|
- Norbert Dudás
- 5 évvel ezelőtt
- Látták:
Á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
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észletesebbenTé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észletesebben9. 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észletesebbenBevezeté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észletesebbenPROGRAMOZÁ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észletesebbenElő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észletesebbenProgramozá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észletesebben7. 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 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észletesebbenAlkalmazott 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észletesebbenProgramozá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észletesebbenBevezeté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észletesebbenAlkalmazott 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észletesebbenJava 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észletesebbenAlgoritmizá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észletesebbenA 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észletesebbenVá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észletesebbenProgramozá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 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észletesebbenVá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észletesebbenProgramozá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észletesebbenMaximum 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észletesebbenBá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észletesebbenELEMI 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észletesebbenVé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észletesebbenALGORITMIKUS 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észletesebben5. 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észletesebbenAlkalmazott 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észletesebbenAlgoritmusok, 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észletesebbenHORVÁ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észletesebbenProgramozá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észletesebbenOEP 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észletesebbenProgramozá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észletesebbenend 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észletesebbenRekurzió. 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észletesebbenA 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észletesebbenBevezeté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észletesebbenEgyszerű 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észletesebbenProgramozá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észletesebbenProgramozá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észletesebbenFü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észletesebbenProgramozá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észletesebbenProgramozá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észletesebbenProgramozá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észletesebbenAlgoritmusok 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észletesebbenNEM-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észletesebben2. 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észletesebbenAlgoritmizá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észletesebbenProgramozá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észletesebbenProgramok é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észletesebbenA 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észletesebbenFü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észletesebbenAritmetikai 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észletesebbenAdatbá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észletesebbenPROGRAMOZÁ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észletesebbenProgramozá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észletesebbenGauss-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észletesebbenHaté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észletesebbenTartalom 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észletesebbenNagysá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észletesebbenProgramozá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észletesebbenKeresé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észletesebbenGrá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észletesebbenAlgoritmusok. 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észletesebbenBASH 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észletesebben5. 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észletesebben29. 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észletesebbenKOVÁ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észletesebbenA 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észletesebben2. 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észletesebben1. 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észletesebbenMutató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észletesebbenAWK 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észletesebbenProgramozá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észletesebbenAdattí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észletesebbenWebprogramozá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észletesebben6. 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észletesebbenBró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észletesebbenFelvé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észletesebbenEljá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észletesebben6. 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észletesebbenKiegé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észletesebbenProgramozá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észletesebbenProgramozá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észletesebbenOOP. 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észletesebbenBevezeté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észletesebbenEgyenletek, 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észletesebbenInformá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észletesebbenBASH 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észletesebben1. 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észletesebben11. 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észletesebbenA 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észletesebbenLeké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észletesebbenAdatbá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észletesebbenOccam 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észletesebben1. 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észletesebbenFü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észletesebbenAlgoritmizá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észletesebbenRendezé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észletesebbenEgyenletek, 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