PROGRAMOZÁSI NYELVEK (GYAKORLAT)



Hasonló dokumentumok
Informatikai tehetséggondozás:

RENDEZÉSEK, TOVÁBBI PROGRAMOZÁSI TÉTELEK

Közismereti informatika I. 4. előadás

Egyszerű programozási tételek

Algoritmusok és adatszerkezetek I. 7. előadás

Programozási tételek. Jegyzet. Összeállította: Faludi Anita 2012.

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Adatstruktúrák Algoritmusok Objektumok

hatására hátra lép x egységgel a toll

Ö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.

Programozási alapismeretek 11. előadás

LEKÉRDEZÉSEK SQL-BEN. A relációs algebra A SELECT utasítás Összesítés és csoportosítás Speciális feltételek

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

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

Gyakorlatok. P (n) = P (n 1) + 2P (n 2) + P (n 3) ha n 4, (utolsó lépésként l, hl, u, hu-t léphetünk).

Ezeket az előírásokat az alábbiakban mutatjuk be részletesebben:

PROGRAMOZÁSI TÉTELEK

Gyakorló feladatok ZH-ra

INFORMATIKAI ALAPISMERETEK


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

14. Mediánok és rendezett minták

Komputer statisztika gyakorlatok

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

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

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

INFORMATIKAI ALAPISMERETEK

Adatszerkezetek II. 6. előadás

MATEMATIKA ÉRETTSÉGI május 9. EMELT SZINT

Informatikai tehetséggondozás:

MATEMATIKA TAGOZAT 5-8. BEVEZETŐ. 5. évfolyam

Helyi tanterv Német nyelvű matematika érettségi előkészítő. 11. évfolyam

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

Struktúra nélküli adatszerkezetek

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


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

Próba érettségi feladatsor április 11. I. RÉSZ

Halmazok-előadás vázlat

Szeminárium-Rekurziók

Halmazelmélet alapfogalmai

Felvételi tematika INFORMATIKA

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..

MATEMATIKA 9. osztály Segédanyag 4 óra/hét

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

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

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

MATEMATIKA tankönyvcsaládunkat


2) = 0 ahol x 1 és x 2 az ax 2 + bx + c = 0 ( a,b, c R és a 0 )

Informatikai tehetséggondozás:

A 2011/2012 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

JANUS PANNONIUS TUDOMÁNYEGYETEM. Schipp Ferenc ANALÍZIS I. Sorozatok és sorok

Dualitás Dualitási tételek Általános LP feladat Komplementáris lazaság 2015/ Szegedi Tudományegyetem Informatikai Tanszékcsoport


Mesterséges intelligencia 1 előadások

Első sorozat (2000. május 22. du.) 1. Oldjamegavalós számok halmazán a. cos x + sin2 x cos x. +sinx +sin2x =

Programozási segédlet

Matematika tanmenet (A) az HHT-Arany János Tehetségfejleszt Program el készít -gazdagító évfolyama számára

23. Fa adatszerkezetek, piros-fekete fa adatszerkezet (forgatások, új elem felvétele, törlés)(shagreen)

Adatbázis rendszerek Gy: Algoritmusok C-ben

Mesterséges Intelligencia I. (I602, IB602)

KOMPLEX KOMMUNIKÁCIÓS ÉS TERMÉSZETTUDOMÁNYI CSOMAG MATEMATIKA TÁMOP /1-2F MATEMATIKA A MINDENNAPI ÉLETBEN 9.

Az áprilisi vizsga anyaga a fekete betűkkel írott szöveg! A zölddel írott rész az érettségi vizsgáig még megtanulandó anyag!

INFORMATIKAI ALAPISMERETEK

Haladó rendezések. PPT 2007/2008 tavasz.

I. Gondolkodási módszerek: (6 óra) 1. Gondolkodási módszerek, a halmazelmélet elemei, a logika elemei. 1. Számfogalom, műveletek (4 óra)

Programozási módszertan. Dinamikus programozás: Nyomtatási feladat A leghosszabb közös részsorozat

MATEMATIKA ÉRETTSÉGI október 18. EMELT SZINT I.

9. ÉVFOLYAM. Tájékozottság a racionális számkörben. Az azonosságok ismerete és alkalmazásuk. Számok abszolútértéke, normál alakja.

Informatikai tehetséggondozás:

Matematika évfolyam

INFORMATIKAI ALAPISMERETEK

ELEMI PROGRAMOZÁSI TÉTELEK

A lineáris programozás 1 A geometriai megoldás

Halmazok Halmazok, részhalmaz, halmazműveletek, halmazok elemszáma

RavaszNégyzet egy kombinatorikai játék

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

Algoritmusok bonyolultsága

A 2015/2016 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

3. Strukturált programok

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

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.


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

Programozási módszertan. Mohó algoritmusok

Helyi tanterv. Batthyány Kázmér Gimnázium Matematika emelt ( óra/hét) 9-12 évfolyam Készült: 2013 február

Darts: surranó nyilak, gondolkodtató problémák Kombinatorika 6. feladatcsomag

MATEMATIKA évfolyam


XIII. Bolyai Konferencia Bodnár József Eötvös József Collegium, ELTE TTK, III. matematikus. A véletlen nyomában

MATEMATIKA 1-2.osztály

Multihalmaz, intervallumhalmaz

AZ ALGORITMUSRÓL. (bevezetés a programozáshoz)

A 2012/2013 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

Lineáris Algebra gyakorlatok

ADATBÁZISOK I. Az esetleges hibákat kérlek a csongor@csongorbokay.com címen jelezd! Utolsó módosítás: március 20.

BEVEZETÉS A FUZZY-ELVŰ SZABÁLYOZÁSOKBA. Jancskárné Dr. Anweiler Ildikó főiskolai docens. PTE PMMIK Műszaki Informatika Tanszék

Az enyhe értelmi fogyatékos fővárosi tanulók 2009/2010. tanévi kompetenciaalapú matematika- és szövegértés-mérés eredményeinek elemzése

Átírás:

PROGRAMOZÁSI NYELVEK (GYAKORLAT) A következő részben olyan szabványos algoritmusokkal fogunk foglalkozni, amelyek segítségével a későbbiekben sok hétköznapi problémát meg tudunk majd oldani. MUNKAHELYZET- ESETFELVETÉS PROGRAMOZÁS Ezek az algoritmusok programozási nyelvtől függetlenek. Gyakorlatilag bármelyik nyelvre átültethetőek. A könnyebb megértés miatt mindegyiknek az elején található egy rövid leírás a működéséről, majd pszeudokódban is meg lesznek adva. SZAKMAI INFORMÁCIÓTARTALOM 1. Sorozatszámítás ALGORITMUS A sorozatszámítás során egy kezdőértéktől egy végértékig elkészítjük egy sorozat összes elemét. Az eredményt kiíratjuk a monitorra. A következő példában 1-től n-dik elemig elkészítjük, ahol a sorozat minden eleme tízzel nagyobb az előzőnél: Eljárás Sorozatszámítás Y:=0 Ciklus i:=1-től N-ig Y:=Y+10; Ki Y 1

2. Megszámlálás Megszámláláskor egy adott tömbben vagy intervallumban kell megszámolni, hogy egy bizonyos tulajdonságnak hány elem felel meg. A következő példában egy n elemű T tömb azon elemeit számoljuk meg, amelyek pozitívak: Eljárás Megszámlálás DB:=0 Ciklus i:=1-től n-ig Ha T[i]>0 akkor DB:=DB+1 Ki DB 3. Maximum kiválasztás Maximum, vagy minimum kiválasztáskor egy tömb vagy intervallum elemei közül kell megkeresnünk a legnagyobbat, vagy legkisebbet. A következő példában egy T nevű, n elemű tömbben keressük meg a legnagyobb elemet: Eljárás Maximumkiválasztás MAX:=T[1] Ciklus i:=2-től N-ig Ha T[i]>MAX akkor MAX:=T[i] Ki MAX 4. Eldöntés Eldöntés során egy halmaz elemeiről el kell dönteni, hogy tartalmaznak-e egy bizonyos tulajdonsággal rendelkező elemet. A példában egy n elemű T tömbben vizsgáljuk meg, hogy tartalmaz-e negatív elemet. A végén a VAN változó logikai értéke adja meg a helyes választ: Eljárás Eldöntés VAN:=hamis i:=1 Ciklus amíg i<=n és T[i]>=0 i:=i+1 VAN:=[i<=N] 2

5. Keresés A keresés hasonló az eldöntéshez, de itt nem tulajdonságot, hanem egy konkrét elemet keresünk egy halmaz elemei között. A példában egy n elemű T tömbben vizsgáljuk meg, hogy tartalmazza-e a 20-as számot. A végén a VAN változó logikai értéke adja meg a helyes választ: Eljárás Eldöntés VAN:=hamis i:=1 Ciklus amíg i<=n és T[i]=20 i:=i+1 VAN:=[i<=N] 6. Kiválasztás Kiválasztás során egy tömbben meg kell keresnünk egy konkrét elemet és meg kell mondanunk, hogy hányadik elemről is van szó. A példában egy n elemű T tömbben vizsgáljuk meg, hogy tartalmazza-e a 30-as számot. Ha igen akkor visszaadjuk a szám indexét: Eljárás Kiválasztás i:=1 Ciklus amíg nem T[i]=30 i:=i+1 INDEX:=i Ki INDEX 7. Másolás Másolás során egy n elemű T tömb elemeit átmásoljuk egy n elemű X tömbbe. Fontos, hogy a tömbök elemszáma egyezzen, vagy a céltömb elemszáma nagyobb legyen: Eljárás Másolás Ciklus i:=1-től N-ig X[i]:=T[i] A másolás során persze elvégezhetünk valamilyen műveletet is az elemeken. A következő példában minden elemhez hozzáadunk 5-öt: Eljárás Másolás 3

Ciklus i:=1-től N-ig X[i]:=T[i]+5 8. Kiválogatás Kiválogatáskor egy tömbből átmásoljuk egy másik tömbbe azokat az elemeket, amelyek megfelelnek egy kritériumnak. A példában egy n elemű T tömb negatív elemeit átmásoljuk egy X nevű tömbbe: Eljárás Kiválogatás DB:=0 Ciklus i:=1-től N-ig Ha T[i]<0 akkor DB:=DB+1 : X[DB]:=T[i] 9. Szétválogatás A szétválogatás gyakorlatilag egy tömb elemeinek megadott tulajdonság szerinti csoportosítása. Több eset is létezik: lehet két tömbbe, egy tömbbe és helyben elvégezni. A következő példák mind a három esetet bemutatják: a, Szétválogatás két tömbbe Ebben az esetben egy X tömb elemeit válogatjuk szét egy Y és egy Z tömbbe. Ha az eleme nullánál nagyobb, akkor az Y tömbbe kerül, különben a Z-be. Eljárás Szétválogatás_két_tömbbe DBY:=0 : DBZ:=0 Ciklus i:=1-től N-ig Ha X[i]>0 akkor DBY :=DBY +1 : Y[DB>] :=X[i] különben DBZ:=DBZ+1 : Z[DBZ]:=X[i] b, Szétválogatás egy tömbbe Egy X tömb elemeit válogatjuk át egy Y tömbbe. A tömb elején lesznek azok az elemek, amelyek nullánál nagyobbak, a végén pedig a kisebbek: Eljárás Szétválogatás_egy_tömbbe DB:=0 : DBY:=0 Ciklus i:=1-től N-ig 4

Ha X[i]>0 akkor DB :=DB +1 : Y[DB]:=X[i] különben DBZ:=DBZ+1 : Y[N+1-DBZ]:=X[i] c, Szétválogatás helyben Egy X tömb elemeit válogatjuk át helyben. A tömb elején lesznek azok az elemek, amik nullánál nagyobbak, a végén pedig a kisebbek: Eljárás Szétválogatás_helyben Y:=X[1] : A:=1 : B:=N Ciklus amíg A<B Ciklus amíg A<B és X[B]<=0 U:=U-1 Ha A<B, akkor X[A]:= X[B] : A:=A+1 Ciklus amíg A<B és X[A]>0 A:=A+1 Ha A<B akkor X[B]:=X[A] : B:=B-1 Feltétel vége X[A]:=Y Ha Y>0 akkor DB:=A különben DB:=A-1 10. Metszet A metszet képzés gyakorlatilag a halmazműveletnek felel meg. Két tömb, X és Y, közös elemeit kiválogatjuk egy harmadik, Z tömbbe: Eljárás Metszet DB:=0 Ciklus i:=1-től N-ig j:=1 Ciklus amíg j<=m és X[i]<>Y[j] j:=j+1 Ha j<=m akkor DB:=DB+1 : Z[DB]:=X[i] 5

11. Unió Az unió is halmazművelet. Két tömb elemeit egyesítjük egy harmadikban: Eljárás Unió Z:=X : DB:=N Ciklus i:=1-től M-ig j:=1 Ciklus amíg j<=n és X[j]<>Y[i] j:=j+1 Ha j>m akkor DB:=DB+1 : Z[DB]:=Y[i] 12. Összefuttatás, összefésülés Összefutatás és összefésülés során két vagy több rendezett tömb elemeit tesszük át egy harmadikba úgy, hogy ott is rendezett marad a sorrend. a, Összefuttatás Eljárás Összefuttatás i:=1 : j:=1 : k:=0 Ciklus amíg i<=n és j<=m k:=k+1 Elágazás X[i]<Y[j] esetén: Z[k]:=X[i] : i:=i+1 X[i]=Y[j] esetén: Z[k]:=X[i] : i:=i+1 : j:=j+1 X[i]>Y[j] esetén: Z[k]:=Y[j] : j:=j+1 Elágazás vége Cilkus amíg i<=n k:=k+1 : Z[k]:=X[i] : i:=i+1 Cilkus amíg j<=m k:=k+1 : Z[k]:=Y[j] : j:=j+1 b, Összefésülés Eljárás Összefésülés i:=1 : j:=1 : k:=0 : X[N+1]:=+: Y[M+1]:=+ 6

Ciklus amíg i<n+1 vagy j<m+1 k:=k+1 Ha X[i]<=Y[j], akkor Z[k]:=X[i] : i:=i+1 különben Z[k]:=Y[j] : j:=j+1 13. Rendezés A rendezési algoritmusok igen fontosak a programozásban. Nagyon sok programnak része valamilyen rendezés. Azért van szükség többféle rendezési algoritmusra, mert a problémától függően mindig másik módszer a hatékonyabb. A következőkben a legfontosabb alap rendezésekkel ismerkedhetünk meg: a, Cserés rendezés: Az eljárás egy tömbön belül, helycserékkel oldja meg a rendezést. Eljárás Egyszerű_cserés_rendezés Ciklus i:=1-től N-1-ig Ciklus j:=i+1-től N-ig Ha X[j]<X[i], akkor s:=x[i] : X[i]:=X[j] : X[j]:=s b,buborék rendezés Az egyik legismertebb és legtöbbet használt rendezési algoritmus. A nevét az algoritmus működéséről kapta. A rendezés során először a legnagyobb (vagy legkisebb) elem kerül a helyére. Utána pedig sorban a következő legnagyobb és így tovább. Vagyis egymás után, mint a buborékok elfoglalják az elemek a rendezett helyüket. Eljárás Buborékelvű_rendezés Ciklus i:=n-1-től 1-ig -1-esével Ciklus j:=1-től i-ig Ha X[j]>X[j+1], akkor s:=x[j] : X[j]:=X[j+1] : X[j+1]:=s c,minimum kiválasztásos rendezés Az algoritmus szerint kiválasztjuk mindig a legkisebb elemet és ezt addig folytatjuk, amíg el nem fogy minden elem. 7

Eljárás Minimumkiválasztásos_rendezés Ciklus i:=1-től N-1-ig MIN:=i Ciklus j:=i+1-től N-ig Ha X[j]<X[MIN], akkor MIN:=j s:=x[min] : X[MIN]:=X[i] : X[i]:=s d, Beillesztéses rendezés Az algoritmus beilleszti egyenként az elemeket a rendezés szerinti megfelelő helyére. Eljárás Beillesztéses_rendezés Ciklus i:=1-től N-1-ig Y:=X[i+1] j:=i Ciklus amíg j>0 és X[j]>Y X[j+1]:=X[j] j:=j-1 X[j+1]:=Y 14. Logaritmikus keresés A logaritmikus keresés, vagy bináris keresés egy olyan keresőalgoritmus, amit egy elem rendezett tömbben való keresésére használnak. A keresés intervallum felezéssekkel történik. Minden alkalommal elfelezzük a maradék elemeket és abban a félben folytatjuk a felezéses keresést, amelyik tartalmazhatja a keresett elemet. A keresés során így egy n elemű tömbben O(log n) lépésben megtalálható a keresett elem. Az algoritmus innen kapta a nevét. Eljárás Logaritmikus_keresés A:=1 B:=N Ciklus k:=[[a+b]/2] Elágazás X[k]<Y esetén: A:=k+1 X[k]>Y esetén: B:=k-1 Elágazás vége Mígnem A>B vagy X[k]=Y VAN:=[A<=B] 8

Ha VAN, akkor S:=k 15., Visszalépéses keresés [BackTrack] A visszalépéses keresés olyan esetekben használható, amikor a keresés fastruktúraként képzelhető el, amiben a gyökérből kiindulva egy csúcsot keresünk. Az algoritmus lényege, hogy a kezdőpontból kiindulva megtesz egy utat, és ha valahol az derül ki, hogy már nem juthat el a célig, akkor visszalép egy korábbi döntési ponthoz, és ott más utat választ. Eljárás Visszalépéses_keresés i:=1 : S[1]:=0 Ciklus amig i>=1 és i<=n Ha VanJó(i) akkor i:=i+1: S[i]:=0 kül. i:=i-1 VAN:=[i>N] Függvény VanJó[i:szám]:logikai Ciklus S[i]:=S[i]+1 Mignem s[i]>m[i] vagy Rendben(i,S[i]) VanJó:=(S[i]<=M[i]) Függvény vége Függvény Rendben(i,S[i]):logikai j:=1 Ciklus amig j<i és T(i,S[i],j,S[j]) másként: (i,s[i]) nem zája ki (j,s[j])-t j:=j+1 ElemRendben:=(j=i) S[i]<>S[j] és i-j <> S[i]-S[j] Függvény vége 9

Összefoglalás Milyen alapvető tömbkezelő algoritmusokat ismer? Milyen kereső algoritmusokat ismer? Ismertessen néhány rendezési módszert! Ismertesse a visszalépéses keresés lényegét! TANULÁSIRÁNYÍTÓ A programozás tanulása során törekedjünk arra, hogy megértsük az algoritmusok működésének minden egyes részletét. Legyünk tisztában a változók feladataival, működésével. Az algoritmusok megértése után sokkal könnyebben meg tudjuk írni a megfelelő programot rá. A tanulás során próbáljuk meg a fent ismertetett algoritmusokat egy konkrét programozási nyelvre átültetni. Ha ez sikerült, akkor érdemes a programok bizonyos részletein változtatni és megfigyelni, hogy ez hogyan befolyásolta a program működését. Ha valaki megszereti a programozást, akkor gyakorlatilag egy teljesen új virtuális világ fog megnyílni előtte, ami szerintem az egyik legjobb logikai játék is a számítástechnika világában. 10

ÖNELLENÖRZŐ FELADATOK Ebben a részben találunk néhány feladatot, ami segít elmélyíteni a fenti ismereteket. A feladatokat itt kell megoldani a kijelölt helyen. Segítségképpen nyugodtan lapozzunk vissza kezdetben a tananyaghoz, de az lenne a végső cél, hogy teljesen önállóan tudjuk megoldani a feladatokat! Ha itt sikerült megírnunk egy algoritmust, akkor próbáljuk ki a számítógépünkön is! 1. feladat Készítsen szöveges algoritmus pszeudokód segítségével egy verseny résztvevőinek pontjai alapján történő rendezésére! Használjon két tömböt! Az egyikben a versenyzők neve, a másikban a szerzett pontszámok szerepeljenek! 11

2. feladat Készítsen szöveges algoritmus pszeudokód segítségével, amely egy tömb elemei közül kiválogatja a páros számokat egy másik tömbbe! 12

3. feladat Készítsen algoritmust egy ön által választott programnyelven, ami megszámlálja, hogy hány prímszám van egy tömb elemei között! 13

MEGOLDÁSOK 1. feladat Eljárás Feltöltés Ciklus i:1 től 10-ig Be X[i] Be Y[i] Eljárás Rendezés Ciklus i:=9-től 1-ig -1-esével Ciklus j:=1-től i-ig Ha X[j]>X[j+1], akkor s:=x[j] : X[j]:=X[j+1] : X[j+1]:=s z:=y[j] : Y[j]:=Y[j+1] : Y[j+1]:=z Ha vége 14

2. feladat Eljárás Kiválogatás DB:=0 Ciklus i:=1-től N-ig Ha (T[i]/2)=int(T[i]/2) akkor DB:=DB+1 : X[DB]:=T[i] 15

3. feladat program PRIM; var p,i,n:longint; k:boolean; t:array [1..10] of longint; begin p:=0; for j:=1 to 10 do begin i:=2;k:=true; repeat if t[j] mod i=0 then k:=false; i:=i+1; until (i>sqrt(n)) or not k; if k then p:=p+1; end; end. 16

IRODALOMJEGYZÉK FELHASZNÁLT IRODALOM KUROS, A. G. : Felsőbb algebra. Budapest (Tankönyvkiadó) 1978. KNUTH, Donald, E.: A számítógép-programozás művészete I-III. Budapest (Műszaki) 1987. OBÁDOVICS J. Gyula: Matematika. Budapest (Műszaki) 1978. REIMANN József: Matematika. Budapest 1982. WIRTH, Niklaus: Algoritmusok + Adatstruktúrák = Programok. Budapest (Műszaki) 1982. 17