algoritmizálás és adatmodellezés tanítása 4....
TRANSCRIPT
Algoritmizálás és adatmodellezés
tanítása
4. előadás
Típusok osztályozása
Összetettség (strukturáltság) szempontjából:
skalár (más szóval elemi vagy strukturálatlan)
összetett (más szóval strukturált)
Strukturálási módok
Keresztszorzat AxB
Unió AB
Sokaság sok azonos típusú elem
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 2/34
Típusok osztályozása
Sokaság osztályozása rákövetkezés szerint
Halmaz: nincs rákövetkezési reláció
Sorozat: minden elemet egy elem követ és egy előz meg
(kivéve esetleg a két szélső elemet)
Hierarchikus struktúra: minden elemet egy előz meg, de több
is követhet
Hálós struktúra: minden elemet több előzhet meg és több is
követhet
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 3/34
Típusok osztályozása
Sokaságtípusok néhány megjelenése
Halmaz: halmaz, multihalmaz, intervallumhalmaz, táblázat,
diszjunkt halmazfelbontás
Sorozat: tömb, verem, sor, prioritási sor, listák, szekvenciális
fájlok, függvény
Hierarchikus struktúra: bináris fa, nem bináris fa
Hálós struktúra: irányítatlan gráf, irányított gráf, programgráf,
háló
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 4/34
Típusok műveletei
A típusműveletek osztályozása:
értékadás (azonos típusúak közötti adatmozgatás)
konstrukciós műveletek (strukturált érték létrehozása)
szelekciós műveletek (strukturált érték részei kiválasztása)
azonosság és más relációk
számosság-függvény
Min és Max típusoperátor
Sorszám- (vagy Rend-) függvény
transzformációs (a típuson értelmezett, a
típusra képező függvények) 2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 5/34
Elemi típusok
1. Egész típusok (előjeles, előjel nélküli, különböző méretben)
2. Valós típusok (különböző méretben és pontossággal)
3. Logikai típus
4. Karakter típus (értékhalmaz problémák)
5. Felsorolás típus
6. (Rész)intervallum típus
7. Mutató típusok
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 6/34
Elemi típusok
Egész típus
Értékhalmaz: –231..+ 231 -1 (Min'Egész..Max'Egész)
Problémái: túlcsordulás ( asszociativitás, disztributivitás sértés)
Műveletek: +, – , *, Div (egészosztás), ^ (pozitív egészkitevős
hatványozás), Mod (osztási maradék), – (unáris mínusz)
Relációk: =, <, , , , >
Ábrázolás: kettes komplemens kódú
Változatai: méret és előjel szerint sokfélék
Pascal: byte, shortint, smallint, word,
integer, longint, longword, int64
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 7/34
Elemi típusok
Egész típus
Kettes komplemens ábrázolás:
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 8/34
Elemi típusok
Valós típus
Értékhalmaz: ????..???? (Min'Valós..Max'Valós nem definiáltak, vagy implementációfüggőek)
Problémái: túlcsordulás, alulcsordulás ( asszociativitás, disztributivitás sértés, egyenlőség kérdése)
Műveletek: +, –, *, /, ^, – (unáris mínusz)
Relációk: =, <, , , , >
Ábrázolás: lebegőpontos ábrázolás (pontosabb lenne, ha e típust racionálisnak neveznénk, mert csak racionális számot képes ábrázolni)
Pascal: real, single, double, extended
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 9/34
Elemi típusok
Valós típus
Lebegőpontos ábrázolás:
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 10/34
Elemi típusok
Logikai típus
Értékhalmaz: Hamis..Igaz (Min'Logikai..Max'Logikai: Hamis, illetve Igaz)
Műveletek: nem, és, vagy, kizáró vagy (a szokásos logikai
műveletek)
Relációk: =, <, , , , >
Ábrázolás: 0B = Hamis, –1B = Igaz (esetleg: 1B = Igaz)
… ahol xB=x érték „bináris egészként” ábrázolva
Megjegyzés: a rendezésnek nem nagy a gyakorlati jelentősége.
Pascal: Boolean
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 11/34
Elemi típusok
Karakter típus
Értékhalmaz: 0..255 - kódú jelek – ASCII (Min'Karakter..Max'Karakter: a 0, illetve a 255 kódú karakter)
Műveletek: karakter-specifikus nincs (esetleg a Kód:KarakterEgész függvény, és inverze a
Karakter:EgészKarakter függvény, amelyek a belső ábrázolással
hozza kapcsolatba)
Relációk: =, <, , , , > (a belső ábrázolásuk alapján → nem ABC-sorrend!)
Pascal: char
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 12/34
Elemi típusok
Részintervallum típus
Értékhalmaz: konstans1..konstans2
A származtatás által meghatározott bázistípus adott részhalmaza,
helyesebben részintervalluma.
Műveletek: a bázistípus műveletei
Relációk: a bázistípus relációi
Példa: Típus hónap=1..12
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 13/34
Elemi típusok
Felsorolás típus
Értékhalmaz: (konstans1, konstans2, ... , konstansN)
Műveletek: Következő(kifejezés), Előző(kifejezés),
Rend(kifejezés).
Példa: Típus Hét=(hétfő,kedd,szerda,csütörtök,péntek,
szombat,vasárnap)
Munkanap=hétfő..péntek
Változó tegnap, ma, holnap, h : Hét; i: egész
Konstans ünnepnap : Hét(vasárnap)
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 14/34
Elemi típusok
Felsorolás típus Be: ma
Ha ma=Min'Hét akkor tegnap:=Max'Hét
különben tegnap:=Előző(ma)
i:=Rend(ma)
Ha ma=Max'Hét akkor holnap:=Min'Hét
különben holnap:=Következő(ma)
Ciklus hHét
Ki: h
Ciklus vége
Pascal: for h in het do write(h);
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 15/34
Mutató típusok
Tulajdonságok:
A mutató típus memóriacímek, illetve azokon a címeken levő
értékek kezelésére szolgál.
Az ilyen típusú változók (ti. amire a mutató típus mutat)
automatikusan nem születnek meg (nem kerülnek be a
memóriába) és nem is szűnnek meg – erről magunknak kell
gondoskodni.
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 16/34
Mutató típusok
Tetszőleges (többnyire összetett) típushoz, mint bázistípushoz
(TB) szervesen tartozhat egy-egy ilyen típus. Egy konkrét
mutató típusú objektum csak egyfajta (nevezetesen TB-típusú)
elemek kezdőcímeit hordozhatja.
Kezdőérték: Sehova
Műveletek: Lefoglal(m), illetve Lefoglal(m,e)
Felszabadít(m)
tartalom(m) vagy TB(m)
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 17/34
Mutató típusok
Példa: Rendezzünk ábécé-sorrendbe N szöveget!
Alapmegoldás:
Ciklus i=1-től N—1-ig
Ciklus j=i+1-től N-ig
Ha S(j)<S(i) akkor Csere(S(i),S(j))
Ciklus vége
Ciklus vége
Eljárás vége.
Probléma: Szöveg cseréje hosszú szövegek esetén sokáig
tarthat.
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 18/34
Mutató típusok
Példa: Rendezzünk ábécé-sorrendbe N szöveget!
Ötlet: Vezessünk be N mutató típusú változót és beolvasáskor
a szövegeknek foglaljunk helyet!
Eljárás Beolvasás:
Ciklus i=1-től N-ig
Be: S; Lefoglal(M(i),S)
Ciklus vége
Eljárás vége.
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 19/34
Mutató típusok
Példa: Rendezzünk ábécé-sorrendbe N szöveget!
Eljárás Mutatós megoldás:
Ciklus i=1-től N—1-ig
Ciklus j=i+1-től N-ig
Ha tartalom(M(j))<tartalom(M(i))
akkor Csere(M(i),M(j))
Ciklus vége
Ciklus vége
Eljárás vége.
Itt tehát nem a hosszú szövegeket
cserélgetjük, hanem a rövid mutatókat.
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 20/34
Modul - típusmegvalósítás
Típus
értékhalmaz
művelethalmaz
Típusmegvalósítás
modul (fordítási egység)
specifikáció
reprezentáció
implementáció
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 21/34
Modul - típusmegvalósítás
Specifikáció – exportmodul ExportModul TípusModulNév(InputParaméterek):
Típus Tip
Konstans Konst1,Konst2,...
Függvény Fv1(FormParam): FvTip1
Eljárás Elj1(FormParam)
Operátor Op1(FormParam) név: OpTip1
...
Modul vége.
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 22/34
Modul - típusmegvalósítás
Reprezentáció és implementáció Modul TípusModulNév(InputParaméterek):
Reprezentáció
Típus Tip=típuskonstrukció
...
Implementáció
Eljárás Elj1(FormParam):
...
Eljárás vége.
...
Modul vége.
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 23/34
Modul - típusmegvalósítás
A modul Pascalban
a modul önálló fordítási egység
nincs modulparaméter
nincs külön exportmodul
a specifikáció és a reprezentáció nem választható
szét
a modul tartalmazhat inicializáló részt
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 24/34
Modul - típusmegvalósítás
Unit TípusModulNév;
Interface
Uses más modulok;
... {specifikáció és reprezentáció}
Implementation
... {műveletek megvalósítása}
Begin
... {kezdőértékek beállítása, ha szükséges}
End.
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 25/34
Modul - típusmegvalósítás
Problémák a modulbeli típusmegvalósítással
Ugyanaz a művelet név lehet több célra is? IGEN, ha a
paraméterekből kiderül, melyikről van szó.
Lehet a típust paraméterezni (másik típussal?) IGEN, ha
egyetlen paraméterezés kell (új modullal, ami csak a típust
tartalmazza); más megoldás kell rá, ha többféle is lehet.
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 26/34
Összetett típusok
Direkt szorzat
1. Rekord
Sokaság
2. Halmaz (+multihalmaz, intervallumhalmaz)
3. Tömb (vektor, mátrix)
4. Szekvenciális fájl (input, output)
(5. Sor
6. Verem)
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 27/34
Rekord típus
A rekord névvel ellátott részek (ún. mezők) direkt szorzata.
Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 2015.03.09. 28/34
Rekord típus
Értékhalmaz: a mezők értéktípusai által meghatározott
alaphalmazok direktszorzata.
Műveletek: szelekciós függvény ('.mezőszelektor' nevű) ,
konstrukciós függvény (Rekordtípus nevű),
elképzelhetők: transzformációs függvények, amelyek a teljes
rekordstruktúrát érintik.
Relációk: = (mezőnkénti egyezés-), .
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 29/34
Rekord típus
Típus Komplex=Rekord(re,im: Valós)
Dátum=Rekord
(év: 0..2100,
hó: 1..12,
nap: 1..31)
Változó a,b,c: Komplex; d: dátum;
Konstans egység1 : Komplex(re:1,im:0)
egység2 : Komplex(re:0,im:1)
karácsony: Dátum(év:0,hó:12,nap:24)
a.re:=1; d:=karácsony; d.év:=2014
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 30/34
Rekord típus
Művelet +(a,b: komplex) osszeg: komplex
osszeg:=komplex(a.re+b.re,a.im+b.im)
Művelet vége.
Eljárás ki(a: komplex)
Ki: a.re,’+i*’,a.im
Eljárás vége.
...
c:=a+komplex(0,1); ki(c)
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 31/34
Rekord típus
Típus Pont = Rekord(x,y: Egész)
SzínesPont = Rekord
(p: pont,
szín: (piros,fehér,zöld))
Változó a: Pont
b: SzínesPont
i: egész
a:=Pont(x:1,y:2); b.p:=a; b.szín:=piros
i:=b.p.x
Rövidítés: a:=Pont(1,2)
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 32/34
Rekord típus
Művelet <(a,b: Pont) kisebb: logikai
kisebb:=a.x<b.x és a.y<b.y
Művelet vége.
Változó p,q: Pont
...
ha p<q akkor ...
2015.03.09. Pap Gáborné – Zsakó László: Algoritmizálás, adatmodellezés 33/34
Algoritmizálás és adatmodellezés
tanítása
4. előadás vége