Algoritmizálás és adatmodellezés tanítása 6. előadás
Összetett típusok 1. Rekord 2. Halmaz (+multihalmaz, intervallumhalmaz) 3. Tömb (vektor, mátrix) 4. Szekvenciális file (input, output) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 2/51
Halmaz típus Értékhalmaz: Az alaphalmaz (amely az Elemtípus által van meghatározva) iteráltja ( mely elemek lehetnek benne a halmazban ). Az Elemtípus általában valamely véges diszkrét típus lehet, legtöbbször még az elemszámát is korlátozzák (<256). Ha nyelvi elemként nem létezik, akkor a megvalósításunkban lehet nagyobb elemszámú is és az Elemtípus sem feltétlenül diszkrét típus. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 3/51
Halmaz típus Műveletek metszet ( ) unió ( ) különbség ( ) komplemens eleme (egy elem benne van-e a halmazban) ( ) része (egyik halmaz részhalmaza-e a másiknak) ( ) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 4/51
Halmaz típus Műveletek Halmazba (elem hozzávétele egy halmazhoz): H:=H e} Halmazból (elem elhagyása egy halmazból): H:=H e} Beolvasás (halmaz beolvasása) Kiírás (halmaz kiírása), Üres (üres halmaz létrehozás eljárás), vagy Üres'Halmaztípus előre definiált konstans Üres? (logikai értékű függvény). Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 5/51
Halmaz típus ábrázolása Elemek felsorolása Halmaz(Elemtípus)=Rekord(db: Egész, elem: Tömb(1..MaxDb:Elemtípus)) A halmaz elemeinek felsorolásával adjuk meg a halmazt, annyi elemű tömbben, ahány elemű éppen a halmaz (pontosabban az első db darab elemében). Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 6/51
Halmaz típus ábrázolása Eljárás Üres(Változó a: Halmaz(Elemtípus)): a.db:=0 Eljárás vége. Nem függ a halmaz elemszámától. Függvény Üres?(Konstans a:halmaz(elemtípus)): Logikai Üres?:=(a.db=0) Függvény vége. Nem függ a halmaz elemszámától. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 7/51
Halmaz típus ábrázolása Eljárás Beolvasás(Változó a:halmaz(elemtípus)): Be: a.db [a halmaz elemszáma] Ciklus i=1-től a.db-ig Be: a.elem(i) Eljárás vége. A ciklus a halmaz elemeinek számaszor fut le, azaz a futási idő a halmaz elemszámával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 8/51
Halmaz típus ábrázolása Eljárás Kiírás(Konstans a: Halmaz(Elemtípus)): Ki: a.db [a halmaz elemszáma] Ciklus i=1-től a.db-ig Ki: a.elem(i) Eljárás vége. A ciklus a halmaz elemeinek számaszor fut le, azaz a futási idő a halmaz elemszámával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 9/51
Halmaz típus ábrázolása Eljárás Halmazba(Változó a: Halmaz(Elemtípus), Konstans e: Elemtípus): i:=1 Ciklus amíg i a.db és a.elem(i) e i:+1 Ha i>a.db akkor a.db:+1; a.elem(a.db):=e Eljárás vége. A ciklus a halmaz elemeinek számaszor fut le, azaz a futási idő a halmaz elemszámával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 10/51
Halmaz típus ábrázolása Eljárás Halmazból(Változó a:halmaz(elemtípus), Konstans e: Elemtípus): i:=1 Ciklus amíg i a.db és a.elem(i) e i:+1 Ha i a.db akkor a.elem(i):=a.elem(a.db) a.db:-1 Eljárás vége. A ciklus a halmaz elemeinek számaszor fut le, azaz a futási idő a halmaz elemszámával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 11/51
Halmaz típus ábrázolása Függvény eleme(konstans e:elemtípus, a:halmaz(elemtípus)): Logikai i:=1 Ciklus amíg i a.db és e a.elem(i) i:+1 eleme:=i a.db Függvény vége. A ciklus a halmaz elemeinek számaszor fut le, azaz a futási idő a halmaz elemszámával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 12/51
Halmaz típus ábrázolása Függvény része(konstans a,b:halmaz(elemtípus)): Logikai i:=1 Ciklus amíg i a.db és eleme(a.elem(i),b) i:+1 része:=i>a.db Függvény vége. A ciklus az A halmaz elemszámaszor fut le, az eleme függvény pedig a B halmaz elemszámaszor, azaz a futási idő a két halmaz elemszámának szorzatával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 13/51
Halmaz típus ábrázolása Művelet unió(konstans a,b: Halmaz(Elemtípus)) er:halmaz(elemtípus) c:=a Ciklus i=1-től b.db-ig Ha nem eleme(b.elem(i),a) akkor c.db:+1; c.elem(c.db):=b.elem(i) er:=c Művelet vége. A külső ciklus a B halmaz elemszámaszor fut le, az eleme függvény pedig az A halmaz elemszámaszor, azaz a futási idő a két halmaz elemszámának szorzatával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 14/51
Halmaz típus ábrázolása Művelet metszet(konstans a,b:halmaz(elemtípus)) er:halmaz(elemtípus) c.db:=0 Ciklus i=1-től a.db-ig Ha eleme(a.elem(i),b) akkor c.db:+1; c.elem(c.db):=a.elem(i) er:=c Művelet vége. A külső ciklus az A halmaz elemszámaszor fut le, a belső legrosszabb esetben a B halmaz elemszámaszor, azaz a futási idő a két halmaz elemszámának szorzatával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 15/51
Halmaz típus ábrázolása Megjegyzések: A megoldás alapvető problémája, hogy sehol sem ellenőrizhető, hogy a halmazban valóban csak a benne előfordulható (alaphalmazbeli) elemek vannak. Az így ábrázolt halmazok elemtípusára semmilyen megkötést nem kell tennünk, hiszen egy tömbben bármilyen elem elhelyezhető. Arra sincs korlátozás, hogy mekkora lehet az alaphalmaz elemszáma, amiből a halmaz elemei származnak. Csak annyi a megkötésünk, hogy a konkrét halmazok elemszámát korlátozzuk. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 16/51
Halmaz típus ábrázolása Bittérkép logikai vektor Halmaz(Elemtípus)=Tömb(Min'Elemtípus.. Max'Elemtípus:Logikai) A halmazt {igaz,hamis} elemekből álló vektorként értelmezzük, ahol indexként használjuk az Elemtípusbeli értéket. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 17/51
Halmaz típus ábrázolása Eljárás Üres(Változó a: Halmaz(Elemtípus)): Ciklus i=min'elemtípus-tól Max'Elemtípus-ig a(i):=hamis Eljárás vége. A ciklus a halmaz lehetséges elemeinek számaszor fut le, azaz a futási idő a halmaz elemtípusának számosságával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 18/51
Halmaz típus ábrázolása Függvény Üres?(Konstans a:halmaz(elemtípus)): Logikai i:=min'elemtípus Ciklus amíg i Max'Elemtípus és nem a(i) i:+1 Üres?:=(i>Max'Elemtípus) Függvény vége. A ciklus a halmaz lehetséges elemeinek számaszor fut le, azaz a futási idő a halmaz elemtípusának számosságával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 19/51
Halmaz típus ábrázolása Eljárás Beolvasás(Változó a: Halmaz(Elemtípus)): Be: N [a halmaz elemszáma] Üres(a) Ciklus i=1-től N-ig Be: e; a(e):=igaz Eljárás vége. A ciklus a halmaz elemeinek számaszor fut le, azaz a futási idő a halmaz elemszámával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 20/51
Halmaz típus ábrázolása Eljárás Kiírás(Konstans a: Halmaz(Elemtípus)): Ciklus i=min'elemtípus-tól Max'Elemtípus-ig Ha a(i) akkor Ki: i Eljárás vége. A ciklus a halmaz lehetséges elemeinek számaszor fut le, azaz a futási idő a halmaz elemtípusának számosságával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 21/51
Halmaz típus ábrázolása Eljárás Halmazba(Változó a: Halmaz(Elemtípus), Konstans e: Elemtípus): a(e):=igaz Eljárás vége. Nem függ a halmaz elemszámától. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 22/51
Halmaz típus ábrázolása Eljárás Halmazból(Változó a: Halmaz(Elemtípus), Konstans e: Elemtípus): a(e):=hamis Eljárás vége. Nem függ a halmaz elemszámától. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 23/51
Halmaz típus ábrázolása Függvény eleme(konstans e:elemtípus, a:halmaz(elemtípus)): Logikai eleme:=a(e) Függvény vége. Nem függ a halmaz elemszámától. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 24/51
Halmaz típus ábrázolása Függvény része(konstans a,b:halmaz(elemtípus)): Logikai i:=min'elemtípus Ciklus amíg i Max'Elemtípus és (nem a(i) vagy b(i)) i:+1 része:=i>max'elemtípus Függvény vége. A ciklus a halmaz lehetséges elemeinek számaszor fut le, azaz a futási idő a halmaz elemtípusának számosságával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 25/51
Halmaz típus ábrázolása Művelet unió(konstans a,b: Halmaz(Elemtípus)) er:halmaz(elemtípus) Ciklus i=min'elemtípus-tól Max'Elemtípus-ig c(i):=a(i) vagy b(i) er:=c Művelet vége. A ciklus a halmaz lehetséges elemeinek számaszor fut le, azaz a futási idő a halmaz elemtípusának számosságával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 26/51
Halmaz típus ábrázolása Művelet metszet(konstans a,b:halmaz(elemtípus)) er: Halmaz(Elemtípus) Ciklus i=min'elemtípus-tól Max'Elemtípus-ig c(i):=a(i) és b(i) er:=c Művelet vége. A ciklus a halmaz lehetséges elemeinek számaszor fut le, azaz a futási idő a halmaz elemtípusának számosságával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 27/51
Halmaz típus ábrázolása Megjegyzések: Ennél az ábrázolásnál szigorú megkötés az, hogy a halmaz lehetséges elemei indexként használhatók legyenek! Emiatt így például nem definiálható síkbeli pontok halmaza, szavak halmaza, Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 28/51
Multihalmaz típus Értékhalmaz: Az alaphalmaz (amely az Elemtípus és egy darabszám direktszorzata által van meghatározva) iteráltja ( mely elem hányszoros multiplicitással van benne a multihalmazban ). Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 29/51
Multihalmaz típus Műveletek metszet ( ) (értékek metszete, multiplicitások minimuma) unió ( ) (értékek uniója, multiplicitások összege) max (értékek uniója, multiplicitások maximuma), különbség ( ) (értékek különbsége, multiplicitások különbsége; nincs benne egy elem, ha a multiplicitások különbsége 1-nél kisebb) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 30/51
Multihalmaz típus Műveletek eleme (egy elem benne van-e a multihalmazban) ( ) benne (egy elem legalább adott multiplicitással benne van-e a multihalmazban) multiplicitás (egy elem hányszoros multiplicitással van benne a multihalmazban) része (egyik multihalmaz részhalmaza-e a másiknak) ( ) mindközös? (a két multihalmaz az elemek multiplicitásától eltekintve azonos-e) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 31/51
Multihalmaz típus Műveletek Multihalmazba (elem hozzávétele egy multihalmazhoz): H:=H e,1} Multihalmazból (elem elhagyása egy multihalmazból): H:=H e,1} Beolvasás (multihalmaz beolvasása) Kiírás (multihalmaz kiírása), Üres (üres multihalmaz létrehozás eljárás), vagy Üres multihalmaz előre definiált konstans Üres? (logikai értékű függvény). Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 32/51
Multihalmaz típus Példák Típus Fajta=Rekord(érték: Szöveg, multi: Egész) Állomány=Multihalmaz(Fajta) Változó A: Állomány A:=Állomány(("nyúl",3),("kecske",5)) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 33/51
Multihalmaz típus ábrázolása Elemek felsorolása Típus Halmazelem=Rekord(érték: Elemtípus, multi: Egész) Multihalmaz(Elemtípus)= Rekord(db: Egész,elem: Tömb(1..MaxDb:Halmazelem)) Egy felsorolásként adjuk meg a multihalmazt, annyi elemű tömbben, ahány elemű éppen a multihalmaz (pontosabban az első db darab elemében). Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 34/51
Multihalmaz típus ábrázolása Eljárás Üres(Változó a:multihalmaz(elemtípus)): a.db:=0 Eljárás vége. Nem függ a multihalmaz elemszámától. Függvény Üres?(Konstans a:multihalmaz(elemtípus)):logikai Üres?:=(a.db=0) Függvény vége. Nem függ a multihalmaz elemszámától. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 35/51
Multihalmaz típus ábrázolása Eljárás Beolvasás(Változó a:multihalmaz(elemtípus)): Be: a.db [a multihalmaz elemszáma] Ciklus i=1-től a.db-ig Be: a.elem(i).érték,a.elem(i).multi Eljárás vége. A ciklus a multihalmaz elemértékeinek számaszor fut le, azaz a futási idő a multihalmaz elemszámával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 36/51
Multihalmaz típus ábrázolása Eljárás Kiírás(Konstans a:multihalmaz(elemtípus)): Ki: a.db [a multihalmaz elemszáma] Ciklus i=1-től a.db-ig Ki: a.elem(i).érték,a.elem(i).multi Eljárás vége. A ciklus a multihalmaz elemértékeinek számaszor fut le, azaz a futási idő a multihalmaz elemszámával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 37/51
Multihalmaz típus ábrázolása Eljárás Multihalmazba(Változó a: Multihalmaz(Elemtípus),Konstans e:elemtípus): i:=1 Ciklus amíg i a.db és a.elem(i).érték e i:+1 Ha i a.db akkor a.elem(i).multi:+1 különben a.db:+1; a.elem(a.db).érték:=e a.elem(a.db).multi:=1 Elágazás vége Eljárás vége. Arányos a multihalmaz elemszámával. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 38/51
Multihalmaz típus ábrázolása Eljárás Multihalmazból(Változó a: Multihalmaz(Elemtípus),Konstans e: Elemtípus): i:=1 Ciklus amíg i a.db és a.elem(i).érték e i:+1 Ha i a.db akkor Ha a.elem(i).multi=1 akkor a.elem(i):=a.elem(a.db); a.db:-1 különben a.elem(i).multi:-1 Elágazás vége Elágazás vége Eljárás vége. Arányos a multihalmaz elemszámával. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 39/51
Multihalmaz típus ábrázolása Függvény eleme(konstans e: Elemtípus, a:multihalmaz(elemtípus)):logikai i:=1 Ciklus amíg i a.db és e a.elem(i).érték i:+1 eleme:=i a.db Függvény vége. Arányos a multihalmaz elemszámával. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 40/51
Multihalmaz típus ábrázolása Függvény multiplicitás(konstans e: Elemtípus, a: Multihalmaz(Elemtípus)):Egész i:=1 Ciklus amíg i a.db és e a.elem(i).érték i:+1 Ha i a.db akkor multiplicitás:=a.elem(i).multi különben multiplicitás:=0 Elágazás vége Függvény vége. Arányos a multihalmaz elemszámával. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 41/51
Multihalmaz típus ábrázolása Függvény benne(konstans e: Halmazelem, a:multihalmaz(elemtípus)): i:=1 Ciklus amíg i a.db és e.érték a.elem(i).érték i:+1 benne:=i a.db és e.multi a.elem(i).multi Függvény vége. Arányos a multihalmaz elemszámával. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 42/51
Multihalmaz típus ábrázolása Függvény része(konstans a,b:multihalmaz(elemtípus)):logikai i:=1 Ciklus amíg i a.db és benne(a.elem(i),b) i:+1 része:=i>a.db Függvény vége. A külső ciklus az A, a benne műveletben levő belső ciklus a B multihalmaz elemszámaszor fut le, azaz a futási idő a két multihalmaz elemszáma szorzatával arányos. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 43/51
Multihalmaz típus ábrázolása Művelet unió(konstans a,b:multihalmaz(elemtípus)) er:multihalmaz(elemtípus): c:=a Ciklus i=1-től b.db-ig j:=1 Ciklus amíg j a.db és b.elem(i).érték a.elem(j).érték j:+1... Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 44/51
Multihalmaz típus ábrázolása... Ha j>a.db akkor c.db:+1; c.elem(c.db):=b.elem(i) különben c.elem(j).multi:+b.elem(i).multi Elágazás vége er:=c Művelet vége. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 45/51
Multihalmaz típus ábrázolása Művelet max(konstans a,b:multihalmaz(elemtípus)) er:multihalmaz(elemtípus) c:=a Ciklus i=1-től b.db-ig j:=1 Ciklus amíg j a.db és b.elem(i).érték a.elem(j).érték j:+1... Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 46/51
Multihalmaz típus ábrázolása... Ha j>a.db akkor c.db:+1;c.elem(c.db):=b.elem(i) különben Ha b.elem(i).multi>c.elem(j).multi akkor c.elem(j).multi:=b.elem(i).multi Elágazás vége Elágazás vége er:=c Művelet vége. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 47/51
Multihalmaz típus ábrázolása Művelet metszet(konstans a,b: Multihalmaz(Elemtípus)) er:multihalmaz(elemtípus) c.db:=0 Ciklus i=1-től a.db-ig j:=1 Ciklus amíg j b.db és b.elem(j).érték a.elem(i).érték j:+1... Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 48/51
Multihalmaz típus ábrázolása... Ha j b.db akkor c.db:+1; c.elem(c.db):=a.elem(i) Ha b.elem(j).multi<a.elem(i).multi akkor c.elem(c.db).multi:=b.elem(j).multi Elágazás vége Elágazás vége er:=c Művelet vége. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 49/51
Multihalmaz típus ábrázolása Darabszám vektor Multihalmaz(Elemtípus)=Tömb(Min'Elemtípus.. Max'Elemtípus:Egész) Vegyünk fel egy annyi elemből álló sorozatot, amennyi az Elemtípus számossága! Legyen az i. elem x értékű, ha az i. lehetséges elem x-szer van benne a multihalmazban, illetve 0, ha nincs benne! Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2016.03.22. 50/51
Algoritmizálás és adatmodellezés tanítása 6. előadás vége