Elemi programozási tételek középiskolásoknak, a Python 3 nyelvet alapul véve

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

Download "Elemi programozási tételek középiskolásoknak, a Python 3 nyelvet alapul véve"

Átírás

1 Elemi programozási tételek középiskolásoknak, a Python 3 nyelvet alapul véve Koós Antal, (CC BY-NC-SA 4.0) 2016 Ajánlott olvasmányok: A Python 3 dokumentációja angolul: docs.python.org A Python a gépben c. könyv: Tartalom FOGALMAK...2 KERESÉSI TÉTEL...5 MEGSZÁMLÁLÁSI TÉTEL...7 ÖSSZEGZÉSI TÉTEL...9 A MINIMUM KIVÁLASZTÁSÁNAK TÉTELE...10 KIVÁLOGATÁSI TÉTEL...12 RENDEZÉS BESZÚRÁSSAL...14 BUBORÉKRENDEZÉS...16 RENDEZÉS A MINIMUM KIVÁLASZTÁSÁVAL...17 RENDEZÉS A PYTHON 3-BAN...18 HALMAZMŰVELETEK A PYTHON 3-BAN...19 BINÁRIS KERESÉS...22 Érettségi feladatok megoldásai: sites.google.com/site/eutlantis/erettsegi

2 FOGALMAK Az általános programozási elvek tanításánál célszerűnek tűnik egy programnyelv specialitásaiban nem elmélyedve olyan ismereteket átadni, amelyek bármelyik másik nyelvben is hasznosíthatóak. Ilyen téma a tömbök és azok indexeléssel történő kezelése, ami egyaránt alkalmazható az alacsony és a magas szintű programozási nyelvekben. A magasabb szintű nyelvekből mostanra már igen sok létezik, s egyre újabbak megalkotására történnek próbálkozások. Ezekben a nyelvekben közös, hogy a tömbökön túlmenően, a nyelvhez tartozóan, olyan előre definiált objektumtípusokkal bírnak, amelyek a tömbökhöz képest sokkal több funkcionalitást hordoznak és így gyorsabb fejlesztést tesznek lehetővé, illetve megkönnyíthetik a logikai tervezést. Ezen objektumtípusoknak egy része (valószínűleg) az összes magas szintű nyelvben megtalálható, és bár más-más nevet viselnek, az alapvető tulajdonságaik azonosak, például ilyenek a szótárak, asszociatív tömbök, listák, karakterláncok, halmazok, készletek, sorok, vermek stb. Az ilyen objektumokkal kapcsolatos, az egyik nyelvben megszerzett összes ismeret ugyan nem vihető át egy az egybe egy másik nyelv tanulási folyamatába, de megkönnyítheti azt az alapvető tulajdonságok általánosításával. Ebben az írásban a Python 3 nyelvet alapul véve néhány példát mutatunk a középiskolában tanított elemi programozási elvek megfogalmazására, de nem célunk az összes tétel ismertetése. Az algoritmusok megadásánál nem valamilyen pszeudokódot használunk, hanem magát a Python 3-t, s ehhez előzetesen megadjuk bizonyos fogalmak és nyelvi elemek rövid magyarázatát. Kezdjük az objektumokkal: Iterálható objektum: Olyan objektum, amelyből más objektumokat tudunk kinyerni. A kiolvasott objektumokat a továbbiakban elemnek fogjuk nevezni. Az elemeket az objektumon történő iterálással, más kifejezéssel az objektum bejárásával egymásután sorban elérhetjük. Az iterálható objektumok sokfélék lehetnek: van amelyik 2/22

3 eleve tartalmazza az összes elemét, és van, amelyik csak a bejárás folyamán állítja azokat elő; némelyik indexelhető, némelyik nem; egyesekben módosíthatóak az elemek, másokban nem; és olyanok is léteznek, amelyek a bejárás után kiüresednek stb. A bejáráshoz mindig előállítható egy ún. iterátor objektum, de speciális esetekben alkalmazható az indexelés vagy az ún. kulcs szerinti hivatkozás is. Példák: listák, bájt-tömbök, karakterláncok, sokaságok, szótárak, generátorobjektumok stb. Indexelhető objektum: Az ilyen objektum elemeit a természetes számok sorozatának 0-val induló és eggyel növekedő tagjaival párosíthatjuk, s az ezekre történő hivatkozással (indexeléssel) az elemeket el is érhetjük. Ha egy objektum indexelhető, akkor iterálható is, de egy iterálható objektum nem feltétlen indexelhető, az indexelhetőség egy erősebb megszorítás. Példák: listák, karakterláncok (string), sokaságok (tuple-k), bájt-tömbök (bytes) stb. Ellenpéldák: készletek, szótárak, egész számok stb. Leképező (mapping) típusú objektum: Ezen objektum elemeit kulcs-érték párok alkotják. Egy elemhez tartozó értéket a kulcs indexszerű megadásával érhetünk el. Kulcs nagyon sokféle objektum lehet, például számok, karakterláncok stb., és ezek keverten is alkalmazhatók. Ezek az objektumok a kulcsok szerint iterálhatók. (Ha egy konkrét szótár kulcsai egymásután következő egész számok, 0-val kezdődően, és csak ezek, akkor úgy tűnhet, hogy ez a szótár indexelhető, de az elemek elérésének belső mechanizmusa ekkor is eltér a "valódi" indexeléstől.) Példa: szótár. Ellenpélda: listák, készletek stb. 3/22

4 Az algoritmusok leírásában felhasznált nyelvi elemek: A blokkokat a sorok behúzásával jelöljük. A for és while szerkezetekhez tartozhat egy else ág is, amely akkor hajtódik végre, ha a ciklustörzsből nem történt kilépés a break utasítással. enumerate(bejárható): Az iterálható bejárható objektum elemeit szolgáltatja egymásután, és minden elemhez ad egy sorszámot is, a sorszámozás 0-val kezdődik. Ha az objektum indexelhető, akkor a sorszám megegyezik az indexszel. (A sorszám és az index kapcsolatának megvilágítására vegyük azt a példát, amikor egy hivatalban a szolgáltatást igénybe venni kívánó személyeknek sorszámot kell húzniuk, és akkor mehetnek az ügyintéző pultjához, ha az információs tábla megjeleníti azt. Addig azonban tetszés szerint leülhetnek a szabad székekre, illetve ácsoroghatnak a helyiségben bárhol. A sorszám tehát a személyek érkezési (korábbi-későbbi) idejének a leképezése, de nem ad semmilyen felvilágosítást a személyek elhelyezkedéséről. Ám, ha ez a hivatal egy szigorú intézmény, akkor megkövetelheti, hogy az emberek rögtön álljanak sorba amint megérkeznek, s ekkor a sorszám már a helyet is meghatározza, indexeli. Az enumerate() az elemek kiolvasásának idejét képezi le a sorszámra. Egy indexelhető objektum esetén az elemek az indexüknek megfelelően, 0-tól kezdve egyenként kerülnek felsorolásra, azaz a sorszám meg fog egyezni az indexszel.) len(bejárható): A bejárható objektum elemszámát adja meg. range(n): 0-tól n-1 -ig szolgáltatja az egész számokat egymásután. A range(m,n,l) kifejezésben az egész számok sorozata m-től indul, n-1-ig tart, és l a növekményük. A range(m,n) esetén a lépésköz 1 lesz. True, False: Az igaz és a hamis értékek. A következőkben a tulajdonság(elem)/kifejezés(elem) kifejezéseket ott szerepeltetjük, ahol vagy egy előzetesen definiált függvényt alkalmazhatunk, amelynek az elem az argumentuma, vagy ahová egy az elemet tartalmazó kifejezést közvetlenül beírhatunk. 4/22

5 KERESÉSI TÉTEL Egy iterálható objektumban keresünk egy adott tulajdonságú elemet. Nem szükséges, hogy az objektum indexelhető vagy módosítható legyen. A kimenet hamis lesz, ha az objektum nem tartalmaz a kívánt tulajdonságú elemből. Ha tartalmaz, akkor egy többelemű sokaság (tuple) az eredmény, amelynek első eleme az igaz értékű True, a többit pedig a feladat természetének megfelelően választhatjuk, például a második lehet maga a keresett elem, a harmadik pedig annak sorszáma, illetve indexe, ha az objektum indexelhető. Az algoritmus első változatában nem vagyunk kíváncsiak a sorszámra (indexre), a másodikban igen: for elem in bejárható: if tulajdonság(elem): kimenet= True,elem break else: kimenet= False for sorszám,elem in enumerate(bejárható): if tulajdonság(elem): kimenet= True,elem,sorszám break else: kimenet= False Ha nincs szükségünk magára az elemre, csak arra az információra, hogy van-e ilyen tulajdonságú az objektumban, akkor elegendő csak a True-False értékeket használnunk kimenetként (döntési tétel). Ha bizonyosak vagyunk benne, hogy a keresett tulajdonságú elemből legalább egy van az objektumban, akkor elhagyhatjuk az else blokkot és a kimenetből a True értéket (kiválasztási tétel). (Megjegyzés: Amennyiben valamely programnyelvben nem lehetséges egynél több értéket adni egy változónak vagy egy függvény visszatérési értékének, akkor ott egy olyan adatstruktúra címét kell megadni, amit feltölthetünk a kívánt értékekkel.) 5/22

6 Az alábbiakban bemutatjuk a fenti algoritmus indexeléses változatát is, amely nyilván csak indexelhető objektumokkal használható: for index in range(len(bejárható)): if tulajdonság(bejárható[index]): kimenet= True,bejárható[index],index break else: kimenet= False Példák: # lista: iterálható, indexelhető, módosítható bejárható= [1,2,3,4,5,6,16] for elem in bejárható: if elem%3==1 and elem>5: kimenet= True,elem break else: kimenet= False print(kimenet) # befagyasztott készlet: # iterálható, nem indexelhető, nem módosítható bejárható= frozenset({1,3,42,2.7,5,42,42,3.14}) for sorszám,elem in enumerate(bejárható): if elem>3 and elem<4: kimenet= True,elem,sorszám break else: kimenet= False print(kimenet) Amennyiben egy elemnek csak az objektumbeli meglétére vagyunk kíváncsiak, akkor a Pythonban elegendő az in operátor használata (for nélkül), amire példákat a halmazműveletekről szóló fejezetben találhatunk. 6/22

7 MEGSZÁMLÁLÁSI TÉTEL A keresési tételnél egy iterálható objektumban kerestünk egy adott tulajdonságú elemet, s ha találtunk ilyent, akkor megálltunk. Most megszámláljuk ezeket, a kimenet a darabszám lesz. Nem szükséges, hogy az objektum indexelhető vagy módosítható legyen, de megadjuk a hagyományos indexelős változatát is az algoritmusnak. darab=0 for elem in bejárható: if tulajdonság(elem): darab=darab+1 darab=0 for index in range(len(bejárható)): if tulajdonság(bejárható[index]): darab=darab+1 Példák: bejárható= [ 2,4,6,5,7,8] párosak=0 for elem in bejárható: if elem%2==0: párosak+=1 print(párosak) bejárható= ["alma","körte","meggy","alma","alma"] darab=0 for elem in bejárható: if elem=="alma": darab+=1 print(darab) 7/22

8 Megjegyzés: Az ún. asszociatív tömbök segítségével könnyen megtehetjük, hogy egy bejárható objektumban nem csak az egy adott tulajdonsággal bíró elemek számát határozzuk meg, hanem több tulajdonság alapján végzünk számlálást. Nem kell előre megbecsülnünk a változatok számát, azaz nem szükséges előzetesen helyet foglalni a darabszámokat nyilvántartó változóknak. A Pythonban ezt a szótár (dictionary) objektummal kivitelezhetjük. Nézzük a példát: bejárható= ["alma","körte","meggy",1,2,3,"alma","alma",-10] darabok=dict() for elem in bejárható: if type(elem)== int: darabok["egész_számok"]= darabok.get("egész_számok",0)+1 else: darabok[elem]= darabok.get(elem,0)+1 print(darabok) A kimenet: { 'meggy': 1, 'körte': 1, 'alma': 3, 'egész_számok': 4 } A get() metódus az első argumentumként megadott kulcshoz tartozó értéket olvassa ki a szótárból, de ha még nincs ilyen kulcs, akkor a második argumentum kerül a kifejezésbe helyettesítő értékként. Listák esetében a count(elem) metódussal egyszerűen megkaphatjuk a megadott elem darabszámát. 8/22

9 ÖSSZEGZÉSI TÉTEL Egy bejárható és csak számokat tartalmazó objektum elemeiből származtatott értékek összegét képezzük. Nem szükséges, hogy az objektum indexelhető vagy módosítható legyen. Megadjuk az indexelős változatot is. eredmény=0 for elem in bejárható: eredmény=eredmény+kifejezés(elem) eredmény=0 for index in range(len(bejárható)): eredmény= eredmény+kifejezés(bejárható[index]) Példa: bejárható= [1,2,3,4] eredmény=0 for elem in bejárható: eredmény+= elem*elem print(eredmény) # eredmény+= elem print(sum(bejárható)) Megjegyzés: Amikor csupán az elemek összegére vagyunk kíváncsiak, használhatjuk a Python sum() függvényét bármely bejárható objektumon. 9/22

10 A MINIMUM KIVÁLASZTÁSÁNAK TÉTELE Egy bejárható, nem üres objektum elemei közül kiválasztjuk a legkisebbet. Nem szükséges, hogy az elemek számok legyenek, elegendő ha az elemek között értelmezhető a kisebb-nagyobb viszony. Például két karakterlánc közül kisebb az, amelyik az ábécé szerinti sorba rendezésnél előbbre kerül (lexikografikus összehasonlítás). minimum= kifejezés(bejárható) for elem in bejárható: if elem<minimum: minimum= elem minimum=bejárható[0] for index in range(1,len(bejárható)): if bejárható[index]<minimum: minimum= bejárható[index] minimum,index= bejárható[0],0 for index in range(1,len(bejárható)): if bejárható[index]<minimum: minimum,index= bejárható[index],index Megadtuk az algoritmus indexeléses verzióit is, amelyek közül a második nem csak a minimumot, hanem annak indexét is előállítja. Az indexelésnek most megvan az az előnye, hogy a minimum nevű változónak könnyű kezdeti értéket adni. A nem indexelős algoritmus általánosabban van megfogalmazva, de ha az objektum indexelhető, akkor a kifejezés(bejárható) szerkezet lecserélhető az indexeléses változatban szereplő kezdeti értékadásra. Kezdőértékként mindig megadhatunk egy elég nagy véges értékű konstanst is, ami biztosan nagyobb lesz a bejárható objektum bármely eleménél. Sok nyelvben eleve rendelkezésre áll olyan 10/22

11 konstans vagy objektum, amely a műveletekben úgy viselkedik, mintha végtelen nagy lenne, a Pythonban ezt így állíthatjuk elő: float('inf') (a legkisebbhez pedig a float('-inf') szükséges). A Pythonban a kezdeti értékadást a nem indexelhető esetben egy ún. iterátor objektummal is elvégezhetjük: a minimum=next(iter(bejárható)) kifejezés a felsorolás első elemét állítja be. Ha nincs szükségünk a minimális elem indexére, akkor a Pythonban a standard min() függvény mindent elvégez helyettünk. (Természetesen a min() alkalmazása után, a minimum ismeretében, egy második bejárás során az indexet, sőt az összes minimális értékkel bíró elem indexét is meghatározhatjuk). A függvénynek bemeneti értékként megadhatjuk, ha szükséges, hogy a bejárható objektum elemeihez hogyan kell képezni az összehasonlításhoz szükséges értékeket (kulcsokat). Ezt egy ún. kulcsfüggvény megadásával tehetjük meg, amire az alábbiakban példát mutatunk. (A maximum megkeresésének végiggondolását az olvasóra bízzuk.) bejárható= [10,1,5,0.2,3] print(min(bejárható)) # diákok=[ ("János",17,4.9),("Etel",18,4.2),("Viola",19,4.1) ] def hasonlítandó(elem): név,kor,átlag= elem return átlag #return elem[2] #return név A kimenet az alábbi lesz: 0.2 ('Viola', 19, 4.1) print(min(diákok,key=hasonlítandó)) 11/22

12 KIVÁLOGATÁSI TÉTEL Adott egy bejárható Abej nevű objektum és egy meghatározott tulajdonság, az Abej-ben lévő és az adott tulajdonsággal bíró elemekről másolatot kell készíteni egy másik bejárható Bbej objektumba. Nem szükséges hogy az Abej indexelhető legyen, de megadjuk az algoritmus indexelős változatát is. Az sem szükséges, hogy az Abej módosítható legyen, de a Bbej-nek értelemszerűen annak kell lennie. A nem indexelős, általánosabb érvényű változatban a Bbej egy lista típusú objektum lesz, amelyhez az append() metódussal lehet elemeket hozzáfüggeszteni. Az algoritmus indexelős változatában a feltöltendő objektum létrehozását nem mutatjuk be, csak az írási indexének adunk kezdőértéket. Bbej=[] for elem in Abej: if tulajdonság(elem): Bbej.append(elem) bindex=0 for index in range(len(abej)): if tulajdonság(abej[index]): Bbej[bindex]= Abej[index] bindex=bindex+1 Példák: # Abej: indexelhető lista Abej=[0,1,1,2,3,5,8] Bbej=[] # Bbej: indexelhető lista for elem in Abej: if elem*elem>20: Bbej.append(elem) A kimenet: [5, 8] print(bbej) 12/22

13 # Abej egy set: nem indexelhető Abej= {"alma","körte","meggy","kiwi"} Bbej=[] for elem in Abej: if len(elem)==4: Bbej.append(elem) A kimenet: ['kiwi', 'alma'] print(bbej) Abej= ["alma","körte","alma","meggy","kiwi"] # Az írandó objektum nem indexelhető, de nincs is rá szükség: Bbej=set() for elem in Abej: if len(elem)==4: Bbej.add(elem) A kimenet: {'kiwi', 'alma'} print(bbej) A fenti utolsó példában az írandó objektumot listáról készletre cseréltük, az append() metódust pedig a megfelelő add()-ra. Az alábbi példa bemutatja, hogy a Python ún. listaépítő (list comprehension) szerkezetével milyen tömören lehet a kiválogatást kódolni (ugyanez készletépítés lesz, ha a [] helyett {} használunk): Abej=[0,1,1,2,3,5,8] Bbej= [ elem for elem in Abej if elem*elem>20 ] print(bbej) 13/22

14 RENDEZÉS BESZÚRÁSSAL Egy módosítható és indexelhető objektum elemeinek a sorrendjét szeretnénk megváltoztatni úgy, hogy a legkisebb elem a 0-s indexű helyre kerüljön, majd azt kövesse a második legkisebb stb. Amint a minimum kiválasztásának tételénél megemlítésre került, itt sem szükséges, hogy az elemek számok legyenek, elegendő ha az elemek között értelmezhető a kisebb-nagyobb viszony. Az alábbi algoritmusokban az objektumot A-val jelöltük: N=len(A) for k in range(1,n): T= A[k] i=k-1 while i>=0 and T<A[i]: A[i+1]=A[i] i=i-1 A[i+1]=T N=len(A) for k in range(1,n): i=k-1 while i>=0 and A[i+1]<A[i]: A[i],A[i+1]=A[i+1],A[i] i=i-1 Tekintsük előbb a bal oldali eljárást. Az algoritmusban az objektumot két tartományra bontva képzeljük el: az alsó tartományban, a 0-s indextől kezdve az elemek valameddig már rendezve vannak, a felső tartomány még rendezetlen. Ekkor vesszük a felső tartomány legalsó elemét, aminek az értéke bármilyen nagy vagy kicsi is lehet, és megnézzük, hogy az alsó rendezett tartományba hová szúrhatjuk be, hogy ott a rendezettség fenn is maradjon. A beszúrás helye a már rendezett tartományt két részre bontja: az alsó részt változatlanul hagyjuk, utána beírjuk a beszúrandó elemet, de előtte a felső részt feltoljuk egy pozícióval, hogy az a 14/22

15 beszúrandó elem eredeti helyét, ami még a rendezetlen tartományban van, magába foglalja. Így a felső rendezetlen tartomány eggyel kevesebb elemmel fog bírni, és az eljárást ismételve az egész objektum rendezett lesz. A külső (k) ciklus az 1-es indexel kezdődik, mert úgy vesszük, hogy a 0-s indexű elem önmagában már egy rendezett tartományt képez. A beszúrás helye fölötti rendezett rész eltolását nem egyben végezzük, hanem egyesével, mert ezt megtehetjük lépésenként, amikor a beillesztendő elem új helyét keressük, és így nem kell kétszer bejárni ezt a részt. A jobb oldali algoritmusban nem emeljük ki a beszúrandó elemet (például egy T változóba), hanem a lépésenkénti összehasonlítás során megcseréljük a nála nagyobbakkal, azaz az eljárást akár egyfajta cserélő algoritmusnak is nevezhetjük. Nézzünk néhány példát: a=[10,3,8,1,2,8,5,-1] b=["xyz","efgh","abc","ab","ab"] c=[] def rendez(a): N=len(A) for k in range(1,n): i=k-1 while i>=0 and A[i+1]<A[i]: A[i],A[i+1]=A[i+1],A[i] i=i-1 A kimenet: [-1, 1, 2, 3, 5, 8, 8, 10] ['Ab', 'ab', 'abc', 'efgh', 'xyz'] [] rendez(a) rendez(b) rendez(c) print("\n",a,"\n",b,"\n",c) 15/22

16 BUBORÉKRENDEZÉS Egy módosítható és indexelhető objektumról van szó. A buborékos rendezés egy nem túl hatékony cserélő algoritmus, de az elve érdekes. Minden lépésben egy elemet a helyére viszünk, az első lépésben a legnagyobb elemet, a másodikban a második legnagyobbat stb. Így a k-adik lépés után az objektum legnagyobb első k eleme már a helyén lesz, és ha N elem van, akkor a külső ciklust N-szer kell végrehajtani. A belső ciklusban mindig a 0-ás elemtől indulunk (technikailag a range az i=1-től kezdődik, de utána A[i-1]-re történik hivatkozás), amelyet összehasonlítunk a következővel, és ha az előbbi a nagyobb, akkor megcseréljük őket, majd ezt folytatjuk az 1-es és a 2-es indexűekkel stb. Így mindig a nagyobb elem száll felfelé, mint egy buborék. Az első lépésben, k=0 és még egyetlen elem sincs a helyén, most buborékoltatjuk az elsőt, a második (k=1) lépésben már a legnagyobb elem az objektum legtetején van és az összehasonlításokkal meg lehet előtte állni, a k-adik lépésben pedig csak az első N-k elemmel kell foglalkoznunk. N=len(A) for k in range(0,n): for i in range(1,n-k): if A[i-1]>A[i]: A[i],A[i-1]= A[i-1],A[i] 16/22

17 RENDEZÉS A MINIMUM KIVÁLASZTÁSÁVAL Egy módosítható és indexelhető objektumot fogunk rendezni. Az első lépésben kiválasztjuk a legkisebb elemet és az objektum 0-s indexű pozíciójába írjuk, a második lépésben a második legkisebbet keressük meg és írjuk az 1-es indexű helyre stb. A k-adik lépésben már az első k darab legkisebb elem a helyén van, elegendő a következő legkisebbet a k+1-es és magasabb indexűek között keresni. Figyeljük meg, hogy a belső ciklusban nem végzünk elemcserét, amivel hatékonyabbá válik az eljárás: N=len(A) for k in range(0,n-1): minindex=k for i in range(k+1,n): if A[i]<A[minindex]: minindex=i A[k],A[minindex] = A[minindex],A[k] 17/22

18 RENDEZÉS A PYTHON 3-BAN A Python legrugalmasabban használható objektumának, a listának van egy sort() metódusa, amivel helyben lehetséges a rendezést végrehajtani. A felhasználásához nem szükséges tudnunk (bár utána lehet nézni), hogy ez milyen algoritmus szerint működik, és az eljárás mibenléte érdektelen (amennyiben a tudásvágyunk kielégítésétől eltekintünk), ha a megoldandó feladatokkal számunkra megfelelő idő alatt végez. Az előzőekben megadott rendezési algoritmusokat csak olyan objektumokra tudjuk alkalmazni, amelyek egyidejűleg módosíthatóak és indexelhetőek. Más típusú, de bejárható objektumok elemeit egy külön listában tudjuk rendezetten előállítani. Egyrészt készíthetünk az objektumból egy listát, amit a sort()-tal már tudunk kezelni, vagy a sorted() alapfüggvényt is alkalmazhatjuk. Mindkét esetben megadhatunk egy kulcsfüggvényt, illetve fordított sorrendet is kérhetünk. Íme néhány példa: diákok=frozenset( { ("Etel",18,4.2),("János",17,4.9),("Viola",19,4.1)} ) def hasonlítandó(elem): név,kor,átlag= elem return átlag #return név ldiák= list(diákok) ldiák.sort(key=hasonlítandó) # (key=hasonlítandó, reverse=true) print(ldiák) ldiák2= sorted(diákok, key=hasonlítandó, reverse=true) print(ldiák2) A kimenet: [('Viola', 19, 4.1), ('Etel', 18, 4.2), ('János', 17, 4.9)] [('János', 17, 4.9), ('Etel', 18, 4.2), ('Viola', 19, 4.1)] 18/22

19 HALMAZMŰVELETEK A PYTHON 3-BAN A Python azon objektumaira, amelyek más objektumokat, azaz elemeket tartalmaznak, halmazokként is tekinthetünk. Érdemes megjegyezni, hogy ezek közül a készlet típusú (set) objektumoknak az az alapvető tulajdonsága, hogy nincs bennük két azonos értékű elem, a hozzájuk adott duplikátumokat szó nélkül kidobják. Az alábbiakban bemutatjuk néhány halmazművelet kivitelezését: A= [ 1, 2, 99,99,99, 3,3, 5,5, "Python" ] # lista B= ( "Python", 99, 5,5,5, 42,42 ) # sokaság C= "Python 3" # karakterlánc D= { "Python", 99, 5, 42, "3" } # készlet print("lista:",a,"\nsokaság:",b,"\nkarakterlánc:",c,"\nkészlet:",d,"\n") # Tartalmazás: print("tartalmazás:") van= "t" in C print(van) print( 99 in A ) print( "Python" in B ) print( "Python" in C ) print( 2016 in A ) print() # Két lista uniója: U1= A+list(B) print(" Unió listaként:",u1) U2= set(u1) # U2= set(a+list(b)) print(" Unió készletként:",u2) print() 19/22

20 # Metszetek, amelyek az ismétlődésekben különbözhetnek: M1= [ elem for elem in A if elem in B ] print(" Metszet ismétlődésekkel(1) listában:",m1) M2= [ elem for elem in B if elem in A ] print(" Metszet ismétlődésekkel(2) listában:",m2) M3= { elem for elem in A if elem in B } print(" Metszet ismétlődések nélkül, készletben:",m3) M4= list(m3) print(" Metszet ismétlődések nélküli listában:",m4) print() # Különbségek, amelyek az ismétlődésekben eltérhetnek: S= [ elem for elem in A if elem not in B ] print(" A-B ismétlődésekkel listában:",s) S= [ elem for elem in B if elem not in A ] print(" B-A ismétlődésekkel listában:",s) print() # Készletek uniója készletként: U= set(a) set(b) D print(" Készletek uniója készletként:",u) # Készletek metszete készletként: U= set(a) & set(b) & D print(" Készletek metszete készletként",u) 20/22

21 A kimenet: Lista: [1, 2, 99, 99, 99, 3, 3, 5, 5, 'Python'] Sokaság: ('Python', 99, 5, 5, 5, 42, 42) Karakterlánc: Python 3 Készlet: {'Python', '3', 99, 42, 5} Tartalmazás: True True True True False Unió listaként: [1, 2, 99, 99, 99, 3, 3, 5, 5, 'Python', 'Python', 99, 5, 5, 5, 42, 42] Unió készletként: {1, 2, 3, 5, 'Python', 42, 99} Metszet ismétlődésekkel(1), listában: [99, 99, 99, 5, 5, 'Python'] Metszet ismétlődésekkel(2), listában: ['Python', 99, 5, 5, 5] Metszet ismétlődések nélkül, készletben: {'Python', 99, 5} Metszet ismétlődések nélküli listában: ['Python', 99, 5] A-B ismétlődésekkel, listában: [1, 2, 3, 3] B-A ismétlődésekkel, listában: [42, 42] Készletek uniója készletként: {1, 2, 3, 5, 'Python', 42, '3', 99} Készletek metszete készletként {'Python', 99, 5} A készletekkel még további halmazműveletek is végezhetők (például szimmetrikus differencia, részhalmaz tartalmazása stb.), de ezek bemutatására itt nem térünk ki. 21/22

22 BINÁRIS KERESÉS A keresést jelentősen meggyorsítja, ha az objektum, amiben keresünk rendezve van. Az objektumnak indexelhetőnek kell lennie, maga a keresés nem igényli a módosíthatóságot, de az előzetes rendezés igen. Az eljárás végén az elem megtalálása esetén a True értéket és az elem indexét fogjuk megkapni, az elem hiányában pedig a False értéket. Az első lépésben az objektum közepén lévő elemet vetjük össze a keresett elemmel, és ha egyeznek, akkor az algoritmus véget ér, egyébként az összehasonlítástól függően a keresés alsó vagy felső indexének határát módosítjuk és ezen szűkített tartományban megismételjük az eljárást stb. Az algoritmus a legrosszabb esetben is log 2 N lépésben véget ér, ahol N az elemek száma. N=len(A) # Csak rendezett objektumon működik jól! alsó,felső=0,n-1 while alsó<=felső: k=(felső+alsó)//2 # a // egész számú hányadost ad if keresett < A[k]: felső=k-1 elif keresett > A[k]: alsó=k+1 else: kimenet=true,k break else: kimenet=false 22/22

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

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

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

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

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

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

Részletesebben

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

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

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

Python tanfolyam Python bevezető I. rész

Python tanfolyam Python bevezető I. rész Python tanfolyam Python bevezető I. rész Mai tematika Amiről szó lesz (most): Interpretált vs. fordított nyelvek, GC Szintakszis Alaptípusok Control flow: szekvencia, szelekció, iteráció... Függvények

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

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

Komputeralgebra Rendszerek

Komputeralgebra Rendszerek Komputeralgebra Rendszerek Programozás Czirbusz Sándor ELTE IK, Komputeralgebra Tanszék 2014. február 23. TARTALOMJEGYZÉK 1 of 28 TARTALOMJEGYZÉK I 1 TARTALOMJEGYZÉK 2 Értékadás MAPLE -ben SAGE -ben 3

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

Szövegek C++ -ban, a string osztály

Szövegek C++ -ban, a string osztály Szövegek C++ -ban, a string osztály A string osztály a Szabványos C++ könyvtár (Standard Template Library) része és bár az objektum-orientált programozásról, az osztályokról, csak később esik szó, a string

Részletesebben

Imperatív programozás

Imperatív programozás Imperatív programozás 6. Előadás Python típusok (folytatás) Függvények Típusok + műveleteik Listák - mutable (változtatható) - heterogén lista >>> lista = ["szo", 12, 3.5] >>> lista[1] 12 >>> lista[1:3]

Részletesebben

Programozási nyelvek Python

Programozási nyelvek Python Programozási nyelvek Python A nyelv története és jellemzői 2 A nyelv története Tervező Guido van Rossum (1956, Hollandia) Befolyásoló nyelvek ABC (pl. blokkok jelölése behúzással); Modula-3; C; C++; Unix

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

Struktúra nélküli adatszerkezetek

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

Részletesebben

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

2018, Diszkrét matematika

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

Részletesebben

Imperatív programozás

Imperatív programozás Imperatív programozás 2. Előadás Python alapok Elérhetőség Tejfel Máté Déli épület, 2.616 matej@elte.hu http://matej.web.elte.hu Python Script nyelv Értelmezett (interpretált) Dinamikus típusrendszer Gyors

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

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

Felvételi tematika INFORMATIKA

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

Részletesebben

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

van neve lehetnek bemeneti paraméterei (argumentumai) lehet visszatérési értéke a függvényt úgy használjuk, hogy meghívjuk

van neve lehetnek bemeneti paraméterei (argumentumai) lehet visszatérési értéke a függvényt úgy használjuk, hogy meghívjuk függvények ismétlése lista fogalma, használata Game of Life program (listák használatának gyakorlása) listák másolása (alap szintű, teljes körű) Reversi 2 Emlékeztető a függvények lényegében mini-programok,

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

Összetett programozási tételek

Összetett programozási tételek Összetett programozási tételek 3. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2011. szeptember 19. Sergyán (OE NIK) AAO 03 2011. szeptember

Részletesebben

INFORMATIKA javítókulcs 2016

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

Részletesebben

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

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

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

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

Részletesebben

Hálózatok építése és üzemeltetése

Hálózatok építése és üzemeltetése Hálózatok építése és üzemeltetése Python 1 Python nyelv Alapok 2 Általános jellemzők A Python programozási nyelv egy általános célú magas szintű nagyon széles körben elterjedt ingyenes program nyelv, amely

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

Smalltalk 2. Készítette: Szabó Éva

Smalltalk 2. Készítette: Szabó Éva Smalltalk 2. Készítette: Szabó Éva Blokkok Paraméter nélküli blokk [műveletek] [ x := 5. 'Hello' print. 2+3] Kiértékelés: [művelet] value az értéke az utolsó művelet értéke lesz, de mindet kiírja. x :=

Részletesebben

Objektum Orientált Programozás VII.

Objektum Orientált Programozás VII. Objektum Orientált Programozás VII. Összetett programozási tételek Programozási tételek összeépítése Feladatok ÓE-NIK, 2011 1 Hallgatói Tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk

Részletesebben

Egyszerű programozási tételek

Egyszerű programozási tételek Egyszerű programozási tételek Sorozatszámítás tétele Például az X tömbben kövek súlyát tároljuk. Ha ki kellene számolni az összsúlyt, akkor az S = f(s, X(i)) helyére S = S + X(i) kell írni. Az f0 tartalmazza

Részletesebben

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1 Halmazelmélet 1. előadás Farkas István DE ATC Gazdaságelemzési és Statisztikai Tanszék Halmazelmélet p. 1/1 A halmaz fogalma, jelölések A halmaz fogalmát a matematikában nem definiáljuk, tulajdonságaival

Részletesebben

1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata.

1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata. 1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata. HLMZOK halmaz axiomatikus fogalom, nincs definíciója. benne van valami a halmazban szintén axiomatikus fogalom,

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

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

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

Részletesebben

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

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása Tömbök kezelése Példa: Vonalkód ellenőrzőjegyének kiszámítása A számokkal jellemzett adatok, pl. személyi szám, adószám, taj-szám, vonalkód, bankszámlaszám esetében az elírásból származó hibát ún. ellenőrző

Részletesebben

Apple Swift kurzus 3. gyakorlat

Apple Swift kurzus 3. gyakorlat Készítette: Jánki Zoltán Richárd Dátum: 2016.09.20. Apple Swift kurzus 3. gyakorlat Kollekciók: Tömb: - let array = [] - üres konstans tömb - var array = [] - üres változó tömb - var array = [String]()

Részletesebben

Vezérlési szerkezetek

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

Részletesebben

Programozás alapjai. 5. előadás

Programozás alapjai. 5. előadás 5. előadás Wagner György Általános Informatikai Tanszék Cserélve kiválasztásos rendezés (1) A minimum-maximum keresés elvére épül. Ismétlés: minimum keresés A halmazból egy tetszőleges elemet kinevezünk

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve

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

Ismerkedés a Python programnyelvvel. és annak micropython változatával

Ismerkedés a Python programnyelvvel. és annak micropython változatával Ismerkedés a Python programnyelvvel és annak micropython változatával A Python programozási nyelv története Az alapötlet 1980-ban született, 1989 decemberében kezdte el fejleszteni Guido van Rossum a CWI-n

Részletesebben

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. HA 1 Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) HA 2 Halmazok HA 3 Megjegyzések A halmaz, az elem és az eleme fogalmakat nem definiáljuk, hanem alapfogalmaknak

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

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

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n). Edényrendezés Tegyük fel, hogy a rendezendő H = {a 1,...,a n } halmaz elemei a [0,1) intervallumba eső valós számok. Vegyünk m db vödröt, V [0],...,V [m 1] és osszuk szét a rendezendő halmaz elemeit a

Részletesebben

A Python programozási nyelv

A Python programozási nyelv A Python programozási nyelv Takács Gábor Széchenyi István Egyetem Matematika és Számítástudomány Tanszék 1 / 47 Jellemzők + értelmezett nyelv + típusai dinamikusak + szintaxisa tömör,

Részletesebben

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1 Halmazok 1 Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 2 A fejezet legfontosabb elemei Halmaz megadási módjai Halmazok közti műveletek (metszet,

Részletesebben

Készítette: Nagy Tibor István

Készítette: Nagy Tibor István Készítette: Nagy Tibor István A változó Egy memóriában elhelyezkedő rekesz Egy értéket tárol Van azonosítója (vagyis neve) Van típusa (milyen értéket tárolhat) Az értéke értékadással módosítható Az értéke

Részletesebben

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

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

Részletesebben

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK, Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás OE-NIK, 2013 1 Hallgatói Tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk

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

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

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez Pásztor Attila Algoritmizálás és programozás tankönyv az emeltszintű érettségihez 3. ADATTÍPUSOK...26 3.1. AZ ADATOK LEGFONTOSABB JELLEMZŐI:...26 3.2. ELEMI ADATTÍPUSOK...27 3.3. ÖSSZETETT ADATTÍPUSOK...28

Részletesebben

Algoritmuselmélet 2. előadás

Algoritmuselmélet 2. előadás Algoritmuselmélet 2. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu 2002 Február 12. ALGORITMUSELMÉLET 2. ELŐADÁS 1 Buborék-rendezés

Részletesebben

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

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

Részletesebben

AAO 3. Csink László 2007

AAO 3. Csink László 2007 AAO 3 Csink László 2007 Algoritmus fogalma - ismétlés Az algoritmus egy eljárás (jóldefiniált utasítások véges halmaza), amelyet valamely feladat megoldására készítünk. A feladat egy adott kezdeti állapotból

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

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

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

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

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

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

Részletesebben

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

Láncolt listák Témakörök. Lista alapfogalmak

Láncolt listák Témakörök. Lista alapfogalmak Láncolt listák szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Lista alapfogalmai Egyirányú egyszerű láncolt lista Egyirányú rendezett láncolt lista Speciális láncolt listák Témakörök

Részletesebben

Web-programozó Web-programozó

Web-programozó Web-programozó Az Országos Képzési Jegyzékről és az Országos Képzési Jegyzékbe történő felvétel és törlés eljárási rendjéről szóló 133/2010. (IV. 22.) Korm. rendelet alapján. Szakképesítés, szakképesítés-elágazás, rész-szakképesítés,

Részletesebben

.Net adatstruktúrák. Készítette: Major Péter

.Net adatstruktúrák. Készítette: Major Péter .Net adatstruktúrák Készítette: Major Péter Adatstruktúrák általában A.Net-ben számos nyelvvel ellentétben nem kell bajlódnunk a változó hosszúságú tömbök, listák, sorok stb. implementálásával, mert ezek

Részletesebben

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

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

Részletesebben

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 3. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Antal Gábor 1 Primitív típusok Típus neve Érték Alap érték Foglalt tár Intervallum byte Előjeles egész 0 8 bit

Részletesebben

PYTHON. Avagy hosszú az út a BioPythonig

PYTHON. Avagy hosszú az út a BioPythonig PYTHON Avagy hosszú az út a BioPythonig Miért a Python? Mert ez áll a legközelebb az ember által beszélt nyelvhez. Mert ez a leggyorsabb az ismert script nyelvek közül Mert rengeteg modul érhető el hozzá

Részletesebben

Listák, szótárak, fájlok Listák, szótárak, fájlok

Listák, szótárak, fájlok Listák, szótárak, fájlok lista fogalma, használata listák másolása (alap szintű, teljes körű) szótárak fogalma, használata adatbázis alkalmazás fejlesztése műveletek fájlokkal (megnyítás, írás, olvasás, lezárás) rejtjelező alkalmazás

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

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

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

Részletesebben

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED AWK - szintaxis, vezérlési szerkezetek Operációs rendszerek 11. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik

Részletesebben

6. Függvények. Legyen függvény és nem üreshalmaz. A függvényt az f K-ra való kiterjesztésének

6. Függvények. Legyen függvény és nem üreshalmaz. A függvényt az f K-ra való kiterjesztésének 6. Függvények I. Elméleti összefoglaló A függvény fogalma, értelmezési tartomány, képhalmaz, értékkészlet Legyen az A és B halmaz egyike sem üreshalmaz. Ha az A halmaz minden egyes eleméhez hozzárendeljük

Részletesebben

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. február 18. Minimum és maximumkeresés u s i n g n a m e s p a c e s t d ; i n t main ( ) { c o u t

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

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

Halmaz típus Értékhalmaz:

Halmaz típus Értékhalmaz: Halmaz, multihalmaz Halmaz féleségek 1. Halmaz Gyümölcsök: {alma,körte,szilva,barack} 2. Multihalmaz Állatok: {(macska,4),(rigó,2),(galamb,3)} 3. Intervallumhalmaz diszjunkt Óráim: {[8-10],[13-14],[16-20)}

Részletesebben

4. Fuzzy relációk. Gépi intelligencia I. Fodor János NIMGI1MIEM BMF NIK IMRI

4. Fuzzy relációk. Gépi intelligencia I. Fodor János NIMGI1MIEM BMF NIK IMRI 4. Fuzzy relációk Gépi intelligencia I. Fodor János BMF NIK IMRI NIMGI1MIEM Tartalomjegyzék I 1 Klasszikus relációk Halmazok Descartes-szorzata Relációk 2 Fuzzy relációk Fuzzy relációk véges alaphalmazok

Részletesebben

Számjegyes vagy radix rendezés

Számjegyes vagy radix rendezés Számláló rendezés Amennyiben a rendezendő elemek által felvehető értékek halmazának számossága kicsi, akkor megadható lineáris időigényű algoritmus. A bemenet a rendezendő elemek egy n méretű A tömbben

Részletesebben

2018, Diszkrét matematika

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

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

14. Mediánok és rendezett minták

14. Mediánok és rendezett minták 14. Mediánok és rendezett minták Kiválasztási probléma Bemenet: Azonos típusú (különböző) elemek H = {a 1,...,a n } halmaza, amelyeken értelmezett egy lineáris rendezési reláció és egy i (1 i n) index.

Részletesebben

A C programozási nyelv III. Pointerek és tömbök.

A C programozási nyelv III. Pointerek és tömbök. A C programozási nyelv III. Pointerek és tömbök. Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv III. (Pointerek, tömbök) CBEV3 / 1 Mutató (pointer) fogalma A mutató olyan változó,

Részletesebben

Kereső függvények és használatuk a Microsoft Excel programban. dr. Nyári Tibor

Kereső függvények és használatuk a Microsoft Excel programban. dr. Nyári Tibor Kereső függvények és használatuk a Microsoft Excel programban dr. Nyári Tibor FKERES, VKERES melyik táblában kell keresni az értéket a tábla azon oszlopának táblán belüli sorszáma, amelyből az eredményt

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

Szkriptnyelvek. 1. UNIX shell

Szkriptnyelvek. 1. UNIX shell Szkriptnyelvek 1. UNIX shell Szkriptek futtatása Parancsértelmez ő shell script neve paraméterek shell script neve paraméterek Ebben az esetben a szkript tartalmazza a parancsértelmezőt: #!/bin/bash Szkriptek

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

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

Adatbáziskezelés. Indexek, normalizálás NZS 1

Adatbáziskezelés. Indexek, normalizálás NZS 1 Adatbáziskezelés Indexek, normalizálás NZS 1 Fáljszervezés módjai Soros elérés: a rekordok a fájlban tetszőleges sorrendben, például a felvitel sorrendjében helyezkednek el. A rekord azonosítója vagyis

Részletesebben

Algoritmusok és adatszerkezetek 2.

Algoritmusok és adatszerkezetek 2. Algoritmusok és adatszerkezetek 2. Varga Balázs gyakorlata alapján Készítette: Nagy Krisztián 1. gyakorlat Nyílt címzéses hash-elés A nyílt címzésű hash táblákban a láncolással ellentétben egy indexen

Részletesebben

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK Informatikai alapismeretek középszint 1021 ÉRETTSÉGI VIZSGA 2011. május 13. INFORMATIKAI ALAPISMERETEK KÖZÉPSZINTŰ ÍRÁSBELI ÉRETTSÉGI VIZSGA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ NEMZETI ERŐFORRÁS MINISZTÉRIUM

Részletesebben

Gyakorló feladatok Gyakorló feladatok

Gyakorló feladatok Gyakorló feladatok Gyakorló feladatok előző foglalkozás összefoglalása, gyakorlató feladatok a feltételes elágazásra, a while ciklusra, és sokminden másra amit eddig tanultunk Változók elnevezése a változók nevét a programozó

Részletesebben