Programozási tételek általánosítása 2. Szlávi Péter 2015

Hasonló dokumentumok
ADATSZERKEZETEK TANTÁRGY, 1. FÉLÉV 2. ELŐADÁS 2009 (VÁZLAT)

kész OraHalmazProgram.exe programot a OraHalmaz_Keret.zip kicsomagolása után!

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

Adatszerkezetek I. 1. előadás

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

A feladat. A főprogram

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

1. kérdés: Mi a sor? Válaszok. a) szűkebb ( hagyományos ) válasz: egy típus, amelyre az alábbi jellegzetes műveletek alkalmazhatók:

Multihalmaz, intervallumhalmaz

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

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

Programozási alapismeretek 3. előadás

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

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

1. Bevezetés A C++ nem objektumorientált újdonságai 3

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

NAGYPONTOSSÁGÚ EGÉSZ-ARITMETIKA TARTALOM

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

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

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.

8. gyakorlat Pointerek, dinamikus memóriakezelés

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. Függvények. Függvények(2)

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

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

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

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

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

PROGRAMOZÁSMÓDSZERTAN 2. ELADÁS 2005 (VÁZLAT)

Algoritmizálás + kódolás C++ nyelven és Pascalban

Programozási tételek és C++

Felvételi tematika INFORMATIKA

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

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

Az első fájlos program

ELTE SAP Excellence Center Oktatóanyag 1

Halmaz típus Értékhalmaz:

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

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

14. Mediánok és rendezett minták

Struktúra nélküli adatszerkezetek

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

OOP #14 (referencia-elv)

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

Maximum kiválasztás tömbben

Java II. I A Java programozási nyelv alapelemei

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

Informatika terméktervezőknek

OOP: Java 8.Gy: Abstract osztályok, interfészek

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

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

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

Bevezetés a programozásba Előadás: A const

SZÁMÍTÓGÉPI GRAFIKA VÁGÁS

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

Matlab alapok. Baran Ágnes. Baran Ágnes Matlab alapok Elágazások, függvények 1 / 15

Programozási alapismeretek 2009/2010

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

Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben)

10. gyakorlat Struktúrák, uniók, típusdefiníciók

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

INFORMATIKAI ALAPISMERETEK

Operációs rendszerek gyak.

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

Objektumorientált programozás C# nyelven

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Java II. I A Java programozási nyelv alapelemei

Programozás alapjai (ANSI C)

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

1. A feladatról. 2. Az áramkör leírása. Mechatronika, Optika és Gépészeti Informatika Tanszék D528. Léptetőmotor vezérlése

Bevezetés az informatikába

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

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

INFORMATIKAI ALAPISMERETEK

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Hardver leíró nyelvek (HDL)

Aritmetikai kifejezések lengyelformára hozása

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Már megismert fogalmak áttekintése

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

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

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

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

Közismereti informatika 2.zh T-M szakirány

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

INFORMATIKAI ALAPISMERETEK

Összetett programozási tételek

OOP #1 (Bevezetés) v :39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

Webprogramozás szakkör











Átírás:

Programozási tételek általánosítása 2. Szlávi Péter szlavip@elte.hu 2015

Tartalom 1. Az általánosítás lehetőségei a) Sorozatok A Tömb-típuskonstrukcó b) Sorozatok A tömb indexmentesítése c) A Tulajdonság-függvények típusa függvényparaméter 2. Tömbök és függvények tételekben 3. A kódolás absztrakciójának mélyítése 2/17

A tömb megvalósítása az index- és az elemtípusokkal: Amikor erre gondolunk: akkor az előzőek után a tömböt így ábrázoljuk: Tehetjük, mivel Sorszám függvény, amely TI 0..Számosság TI-1. Sorozatok A Tömb-típuskonstrukció Típus TI = indextípus TE = elemtípus TI_Ek=Tömb(TI:TE) Típus TI = indextípus TE = elemtípus TI_Ek=Tömb(0..Számosság TI-1:TE) 3/17

Példák: 1..10 indexű 1..10 értékű tömb: Sorozatok A Tömb-típuskonstrukció Típus TI_1_10_E_1_10k=Tömb(0..Számosság TI_1_10:TE_1_10) Konstans nevekkel indexelt ugyanazon neveket tartalmazó tömb: Típus TI_Név_E_Névk=Tömb(0..Számosság TI_Név:TE_Név) Feladat: Készítse el a Tömb(Típus TIndex:Típus TElem) tömb-típuskonstrukció megvalósítási modulját! Bővítse tömbbeolvasó és tömb-kiíró műveletekkel! (L. a Tömb exportmodulját.) 4/17

Sorozatok A Tömb-típuskonstrukció Megoldás (a hiba kezeléssel csak elnagyoltan foglalkozunk): Modul Tömb(Típus TIndex: Típus TElem): Reprezentáció Implementáció Típus Eljárás Operátor Létrehoz(Változó AzonosE(Konstans t:tömb) t,tt:tömb):logikai Tömb=Rekord(elemek:Tömb(0..Számosság'TIndex-1:TElem) elemek(0..számosság'tindex-1):=min'telem; Másnéven Eljárás t=ttbe(konstans kérdés:szöveg, Változó t:tömb) hiba:=hamis Eljárás hiba:logikai) vége. Változó Változó Eljárás Lerombol(Változó i:egészi:tindex t:tömb) [automatikus Ha t.hiba Ki:kérdés az algoritmikus vagy tt.hiba nyelvben] akkor Eljárás vége. AzonosE:=Hamis Ciklus i=tindex'min-től TIndex'Max-ig Függvény ElemSzám(Konstans különbenciklus amíg Be(TIndex2Szöveg(i)+'-->',elemek(Sorszám(i))) t:tömb):egész ElemSzám:=Számosság'TIndex i=0 [visszavezetés TElem-beli Be függvényre] Ciklus Ciklus i<számosság'tindex vége és t.elemek(i)=tt.elemek(i) Operátor ElemÉrték(Konstans i:+1 Ciklus vége t:tömb, i:tindex):telem Másnéven t(i) Ciklus Eljárás végevége. ElemÉrték:=elemek(Sorszám(i)) AzonosE:=i=Számosság'TIndex Eljárás Ki(Konstans cím:szöveg, t:tömb) [Sorszám fv része a TIndex-nek] Operátor vége. Elágazás Változó vége Operátor Operátor ElemMódosít(Változó vége. i:tindex t:tömb, Konstans i:tindex, e:telem) Másnéven Operátor t(i):=e LegyenEgyenlő(Változó Ki:kérdés t:tömb, Konstans tt:tömb) elemek(sorszám(i)):=e MásnévenCiklus t:=tti=tindex'min-től TIndex'Max-ig Operátor vége. Változó Ki(TIndex2Szöveg(i)+'-->',elemek(Sorszám(i)),CrLf) i:egész [visszavezetés TElem-beli Ki eljárásra] Ciklus i=0-tól Ciklus vége Számosság'TIndex-1-ig t.elemek(i):=tt.elemek(i) Eljárás vége. Ciklus Modul vége vége. t.hiba:=tt.hiba Operátor vége. 6/17

Letölt Letölt Feladatok: Sorozatok A Tömb-típuskonstrukció Készítse el a tömb modul unitját (OTomb_Sablon_Unit.pas) építve a generic fogalomra! Definiálja a generic tömböt OTomb<OIndex,OElem> osztálysablon néven! Írjon egy próbaprogramot az előbbi unit kipróbálására! Feladata lehetne ez is: a kurzus minden hallgatója nyilatkozik arról, hogy melyik társára adja voksát egy személyre vonatkozó kérdésben; igaz-e, hogy kölcsönösen egymásra szavaztak (X Y-ra és Y X-re). A hallgatók tömbjének osztálya lehetne: OI_Nev_E_Nevk. (Indextípus: OI_Nev, elemtípus: OE_Nev.) Készítsen egy egészeket tartalmazó OE_Egész modult és Pascalban írt megvalósító OE_Egesz_Unit.pas unitot, benne a OE_Egesz exportált típussal, elemtípus céljára! Az előbbi programot bővítse az alábbi feladattal: az egyes tagokra hány szavazat esett. Nyilván ehhez szükséges egy újabb tömb-típus (OI_Nev_E_Egeszk), azaz specializálni kell az OTomb_Sablon_Unit.pas-beli OTomb<OIndex,OElem> osztálysablont OTomb<OI_Nev,OE_Egesz> osztály létrehozásához. 9/17

Sorozatok A tömb indexmentesítése Indexmentes változat általánosított sorozatok: Bemeneti sorozat típusa: ExportModul TInputSorozat(Típus TE): Függvény Első(Változó s:tsorozat):te Köv(Változó s:tsorozat):te Vége?(Konstans s:tsorozat):logikai Modul vége. Kimeneti sorozat típusa: ExportModul TOutputSorozat(Típus TE): Eljárás Üres(Változó s:tsorozat) Végére(Változó s:tsorozat, Konstans e:te) Modul vége. Ez egy későbbi témakörben szóba kerül. Most nem valósítjuk meg. 10/17

A Tulajdonság-függvények típusa függvényparaméter Tulajdonság-függvények programozási tételekben Feladat: soroljon föl néhány tételt, amelyben előfordul egy Tulajdonság-függvény! Függvény-típus fogalma: Reprezentálás: adott szignatúrájú függvény memóriacíme Implementálás: azonosság és értékadás művelet elegendő Definiálás: Deklarálás: Felhasználási példa: Típus FvTípusNév=Függvény(paraméterek):ÉrtékTípus Változó fvnév:fvtípusnév Típus T1VáltFv=Függvény(Konstans x:egész):egész Függvény fv1(konstans x:egész):egész Függvény fv2(konstans x:egész):egész Változó f1,f2:t1váltfv f1:=fv1; f2:=fv2; y1:=f1(1) Ha f1 f2 akkor y2:=f2(1) 11/17

Tömbök és függvények tételekben Példák típusfogalmak felhasználására: Adatleírás, általánosított tömbös változat: Típus TI = indextípus TE = elemtípus TEk=Tömb(TI:TE) TKeresettI=Rekord(vanE:Logikai, melyik:ti) [index-kereséshez] TTulFv=Függvény(Konstans e:te):logikai Keresés, általánosított tömbös változat (a hagyományos megoldással összevetve): Függvény Keresés1(Konstans t:tek, tfv:ttulfv):tkeresetti Változó i:ti k:tkeresetti i:=min TI Ciklus amíg i Max TI és nem tfv(t(i)) i:=köv(i) Ciklus vége k.vane:=i Max TI [baj lesz!!!] Ha k.vane akkor k.melyik:=i Keresés1:=k Függvény Keresés1(Konstans t:tek):tkeresetti Változó i:egész k:tkeresetti i:=1 Ciklus amíg i N és nem T(t(i)) i:=i+1 Ciklus vége k.vane:=i N [miért nincs baj???] Ha k.vane akkor k.melyik:=i Keresés1:=k 12/17

Tömbök és függvények tételekben Példák típusfogalmak felhasználására: Adatleírás, általánosított tömbös változat: Típus TI = indextípus TE = elemtípus TEk=Tömb(TI:TE) TKeresettI=Rekord(vanE:Logikai, melyik:ti) [index-kereséshez] TTulFv=Függvény(Konstans e:te):logikai Keresés, általánosított tömbös változat (a hagyományos megoldással összevetve): Függvény Keresés1(Konstans t:tek, tfv:ttulfv):tkeresetti Változó i:ti k:tkeresetti i:=min TI Ciklus amíg i<max TI és nem tfv(t(i)) i:=köv(i) Ciklus vége k.vane:=tfv(t(i)) Ha k.vane akkor k.melyik:=i Keresés1:=k Függvény Keresés1(Konstans t:tek):tkeresetti Változó i:egész k:tkeresetti i:=1 Ciklus amíg i<n és nem T(t(i)) i:=i+1 Ciklus vége k.vane:=t(t(i)) Ha k.vane akkor k.melyik:=i Keresés1:=k 13/17

Tömbök és függvények tételekben Példák típusfogalmak felhasználására: Adatleírás, általánosított sorozatokhoz: Típus TI = indextípus TE = elemtípus TEk=TInputSorozat(TE) TKeresettE=Rekord(vanE:Logikai, melyik:te) [elem-kereséshez] TTulFv=Függvény(Konstans e:te):logikai Keresés, általánosított sorozatokra megfogalmazott változat (és a hagyományos megoldás): Függvény Keresés2(Konstans t:tek, tfv:ttulfv):tkeresette Változó e:te k:tkeresette e:=első(t) Ciklus amíg nem Vége?(t) és nem tfv(e) e:=köv(t) Ciklus vége k.vane:=nem Vége?(t) Ha k.vane akkor k.melyik:=e Keresés2:=k Függvény Keresés2(Konstans t:tek):tkeresette Változó i:egész k:tkeresette i:=1 Ciklus amíg i<n i N és nem T(t(i)) i:=i+1 Ciklus vége k.vane:=t(t(i)) k.vane:=i N Ha k.vane akkor k.melyik:=e Keresés2:=k 14/17

A kódolás absztrakciójának mélyítése A sorozat-típusok (Free)Pascal megvalósítása (összefoglalás) Program AltalanosTomb; Unit OI_I 2 _Unit; Uses {$mode Unit OI_I objfpc}{$h+} 1 _Unit;,OI_I 1 _Unit{=>OI_I 1 },OE_E 1 _Unit{=>OE_E 1 }, Interface {$mode objfpc}{$h+} OI_I 2 _Unit{=>OI_I 2 },OE_E 2 _Unit{=>OE_E 2 }, Type Interface OI_I Type 2 =Class OTomb_Sablon_Unit{=>OTomb<OIndex,OElem>}; OI_I OI_I 1 =Class 2 mezők Type Public OI_I 1 mezők OI_I 1 _E_E 1 k=specialize OTomb<OI_I 1,OE_E 1 >; Public OI_I 2 osztály-függvények OI_I 2 _E_E 2 k=specialize OTomb<OI_I 2,OE_E 2 >; (Class OI_I 1 Function osztály-függvények Min ) Constructor (Class Function Create; Min ) Var Constructor OI_I 2 további Create; műveletek t 1 :OI_I 1 _E_E 1 k; End; OI_I 1 további műveletek t 2 :OI_I 2 _E_E 2 k; Implementation End; Implementation OI_I 2 műveletek kifejtése Begin OI_I 1 műveletek kifejtése t 1 :=OI_I 1 _E_E 1 k.create; Unit OE_E 2 _Unit; End. {$mode Unit OE_E objfpc}{$h+} 1 _Unit; Interface {$mode objfpc}{$h+} Type Interface Unit OTomb_Sablon_Unit Type OE_E {$mode objfpc}{$h+} 2 =Class OE_E OE_E 1 Interface 2 =Class mezők Public OE_E 1 mezők Type Constructor Public Create; Generic OTomb<OIndex,OElem>=Class(TObject) Constructor OE_E OTomb mezők 2 további Create; műveletek End; OE_E 1 további műveletek műveletek Implementation End; Implementation OE_E 2 műveletek kifejtése 15/17 OE_E 1 műveletek kifejtése

A kódolás absztrakciójának mélyítése A (Free)Pascal tulajdonság-függvénytípusa: A korábban elmondottak a kódra is érvényesek. Azaz Típusdefiniálás: Type TTulFv=Function(Const e:te):boolean; Típusdeklarálás: Felhasználás: Var t:ttulfv; Function Eldontes(Const s:tek; Const tfv:ttulfv):boolean; Var i:ti; Begin i:=min TI; While (i<max TI) and not tfv(s[i]) do End; Function ParosE(Const e:te):boolean; Function PrimE(Const e:te):boolean; t:=@parose; vane:=eldontes(s,t); vane:=eldontes(s,@prime); 16/17

A kódolás absztrakciójának mélyítése Házi feladat: Az elemi tételek közül 2 elemi tétel algoritmusának megfogalmazása általánosított tömbre és általános sorozatra. 17/17