Összetett Összetett adattípusok adattípusok 8/b tétel 8/b tétel Készítette: Készítette: Kovács Nándor Kovács Nándor KONRACB.PTE KONRACB.PTE
Jan 04, 2016
Összetett Összetett adattípusokadattípusok
8/b tétel8/b tétel
Készítette: Készítette:
Kovács NándorKovács Nándor
KONRACB.PTEKONRACB.PTE
AdattípusokAdattípusokTípusok
Összetett típusok Elemi típusok
Iterált típusok Skalár típusok Mutató típusok
Diszkrét típusok Valós típusok
Felsorolási típusok
Egész típusok
Lebegőpontos típusok
Fixpontos típusok
Unio típusok
Direktszorzat típusok
Stb.
A C++-ban A C++-ban leggyakrabban használt leggyakrabban használt
alaptípusok:alaptípusok: Egész számok típusa: int, short int, Egész számok típusa: int, short int,
long intlong int Lebegopontos számok típusa: float, Lebegopontos számok típusa: float,
double, double, long doublelong double Logikai típus: boolLogikai típus: bool Karakter típus: charKarakter típus: char Karakterlánc típus: stringKarakterlánc típus: string
TípuskonstrukciókTípuskonstrukciók A típuskonstrukciós eszközök lehetőséget A típuskonstrukciós eszközök lehetőséget
biztosítanak arra, hogy az alap típusokból biztosítanak arra, hogy az alap típusokból újakat hozzunk létre.újakat hozzunk létre.
Nyelvenként nagyon eltérő, hogy milyen Nyelvenként nagyon eltérő, hogy milyen eszközöket használhatunk.eszközöket használhatunk.
Általában besorolhatóak az alábbi Általában besorolhatóak az alábbi csoportosításba:csoportosításba: Iterált típusIterált típus Unió típusUnió típus Direktszorzat típusDirektszorzat típus
Iterált típusIterált típus Egy meglévő típus elemeiből szeretnénk Egy meglévő típus elemeiből szeretnénk
halmazokat vagy sorozatokat készíteni.halmazokat vagy sorozatokat készíteni. A programozási nyelvek általában több A programozási nyelvek általában több
megoldást is kínálnak rá:megoldást is kínálnak rá: Vektor (egydimenziós tömb)Vektor (egydimenziós tömb) Többdimenziós tömbTöbbdimenziós tömb HalmazHalmaz ListaLista HasítótáblaHasítótábla FájlFájl
Iterált típusIterált típus VektorVektor
Sorszám (index) szerint akarunk Sorszám (index) szerint akarunk hivatkozni az elemekre.hivatkozni az elemekre.
Típusértékhalmaz eltérő a nyelvekben:Típusértékhalmaz eltérő a nyelvekben:
C jellegű nyelvek: Elemszámot kell C jellegű nyelvek: Elemszámot kell megadni. 0-tól indexelődik.megadni. 0-tól indexelődik.
Pascal jellegű nyelvek: Egy tetszőleges Pascal jellegű nyelvek: Egy tetszőleges diszkrét típus, tetszőleges nem üres diszkrét típus, tetszőleges nem üres részhalmaza lehet az indexhalmaz.részhalmaza lehet az indexhalmaz.
Iterált típusIterált típus
VektorVektor Műveletek:Műveletek:
Szelekció: Szelekció: V[i], amely viszont lehet balérték is, így rajta V[i], amely viszont lehet balérték is, így rajta
keresztül megváltoztatható a vektor.keresztül megváltoztatható a vektor. Értékadás:Értékadás:
Általában ciklusban kell átadni az egyes Általában ciklusban kell átadni az egyes értékeket.értékeket.
A Pascal jellegű nyelvek megengedik a vektorok A Pascal jellegű nyelvek megengedik a vektorok közötti értékadást is.közötti értékadást is.
A tömb típusA tömb típus
A A tömb típustömb típus a tömb absztrakt adatszerkezet a tömb absztrakt adatszerkezet megjelenése típus szinten. megjelenése típus szinten.
A tömb A tömb statikus statikus és és homogén homogén összetett típus, összetett típus, vagyis tartományának elemei olyan vagyis tartományának elemei olyan értékcsoportok, amelyekben az értékcsoportok, amelyekben az elemek száma azonos, elemek száma azonos, az elemek azonos típusúak.az elemek azonos típusúak.
A tömböt, mint típust meghatározza:A tömböt, mint típust meghatározza: - dimenzióinak száma- dimenzióinak száma - indexkészletének típusa és tartománya- indexkészletének típusa és tartománya - elemeinek a típusa- elemeinek a típusa
Iterált típusIterált típus
Egyes nyelvek (pl. a C) nem ismerik a Egyes nyelvek (pl. a C) nem ismerik a többdimenziós tömböket. Ezek a nyelvek a többdimenziós tömböket. Ezek a nyelvek a többdimenziós tömböket úgy képzelik el, mint többdimenziós tömböket úgy képzelik el, mint olyan olyan egydimenziós tömbökegydimenziós tömbök, amelyek , amelyek elemei elemei egydimenzi-ós tömbök.egydimenzi-ós tömbök.
C jellegű nyelvek:C jellegű nyelvek: Vektorok vektoraVektorok vektora int t[42][42]int t[42][42]
Pascal jellegű nyelvek:Pascal jellegű nyelvek: Valódi többdimenziós tömbök.Valódi többdimenziós tömbök.
Iterált típusIterált típus
Nyelvi specialitásokNyelvi specialitások C és C++:C és C++:
A mutatók és tömbök szoros kapcsoltban A mutatók és tömbök szoros kapcsoltban vannak egymással.vannak egymással.
A vektor tulajdonképpen az első elemre A vektor tulajdonképpen az első elemre mutató mutatóval érhető el, és így is mutató mutatóval érhető el, és így is tárolódik.tárolódik.
Tetszőleges méretű tömböket adhatunk át Tetszőleges méretű tömböket adhatunk át az alprogramoknak, mivel tulajdonképpen az alprogramoknak, mivel tulajdonképpen csak egy mutatót fogunk átadni. csak egy mutatót fogunk átadni.
A vektor nem ismeri a saját méretét, így azt A vektor nem ismeri a saját méretét, így azt nekünk kell kezelni.nekünk kell kezelni.
Iterált típusIterált típus HalmazHalmaz
Viszonylag ritkán támogatott Viszonylag ritkán támogatott típuskonstrukció.típuskonstrukció.
Ha egy nyelv támogatja is, akkor szigorú Ha egy nyelv támogatja is, akkor szigorú megkötésekkel él az elemtípussal szemben.megkötésekkel él az elemtípussal szemben. Diszkrét típusok.Diszkrét típusok. Maximált elemszámmal.Maximált elemszámmal. Pl.: hónapok neveiPl.: hónapok nevei
C-ben: C-ben: enum Monthsenum Months{ January, February, { January, February, March, April, May, June, July, August, March, April, May, June, July, August, September, October, November, December };September, October, November, December };
CímfüggvényCímfüggvény
Tömbök ábrázolásaTömbök ábrázolása Általában sorfolytonosan történik.Általában sorfolytonosan történik. CímfüggvényCímfüggvény segítségével tudjuk segítségével tudjuk
megmondani egy adott elem tényleges megmondani egy adott elem tényleges helyét a memóriában.helyét a memóriában.
pl.:pl.: C nyelven pl. egy tömb címe megegyezik a C nyelven pl. egy tömb címe megegyezik a
0-s indexű elem címével. 0-s indexű elem címével. Int tömb esetén a elemenként egy int-nyit Int tömb esetén a elemenként egy int-nyit
(4 byte) kell hozzáadni a pointer értékéhez.(4 byte) kell hozzáadni a pointer értékéhez.
Unió típusUnió típus
A struktúrához hasonlóan különböző típusú A struktúrához hasonlóan különböző típusú adatok tárolására alkalmas, de egy adott adatok tárolására alkalmas, de egy adott időpillanatban csak egy fajta adata lehet.időpillanatban csak egy fajta adata lehet.
Akkor használjuk, ha valamiről azonos és Akkor használjuk, ha valamiről azonos és különböző típusú adatokat is szeretnénk különböző típusú adatokat is szeretnénk tárolni.tárolni. Pl. kerekített ár, pontos ár(fillérrel).Pl. kerekített ár, pontos ár(fillérrel).
A modern programozási nyelvekben A modern programozási nyelvekben kiválthatóak az öröklődéssel és a kiválthatóak az öröklődéssel és a többalakúsággal.többalakúsággal.
Unió típusUnió típus
A nyelvek egy része ettől függetlenül A nyelvek egy része ettől függetlenül biztosít lehetőséget az unió típusok biztosít lehetőséget az unió típusok használatára.használatára.
Használatának helytakarékossági oka lehet, vagy valamilyen konverziós trükk.
Deklarációja és használata formailagmegegyezik a struktúrával.
Unió típusUnió típus
C nyelvenC nyelven
typedef union {
int forintos;
float filleres;
} egyenleg;
Unió típusUnió típus Jellemzői C-benJellemzői C-ben
A memóriában annyi helyet foglal, amennyit a A memóriában annyi helyet foglal, amennyit a nagyobbik komponens foglalna el.nagyobbik komponens foglalna el.
A szelektorok itt arra szolgálnak, hogy a memóriából A szelektorok itt arra szolgálnak, hogy a memóriából a szelektornak megfelelően olvassunk ki.a szelektornak megfelelően olvassunk ki.
Azaz nem arra, hogy eldöntsük, milyen típusú adattal van Azaz nem arra, hogy eldöntsük, milyen típusú adattal van dolgunk.dolgunk.
Nem kapunk támogatást arra, hogy eldöntsük, Nem kapunk támogatást arra, hogy eldöntsük, tényleg a megfelelő típusú objektum van-e a tényleg a megfelelő típusú objektum van-e a memóriában.memóriában.
Ez futási hibákhoz, vagy értelmezhetetlen – és Ez futási hibákhoz, vagy értelmezhetetlen – és nehezen felderíthető – hibákhoz vezethet.nehezen felderíthető – hibákhoz vezethet.
Direktszorzat típusDirektszorzat típus
Struktúra:Struktúra:A struktúra egy összetett adatszerkezet, A struktúra egy összetett adatszerkezet, ami arra szolgál, hogy különböző típusú, ami arra szolgál, hogy különböző típusú, de valamilyen oknál fogva összetartozó de valamilyen oknál fogva összetartozó adatokat egy egységként tudjuk kezelni. adatokat egy egységként tudjuk kezelni. A struktúrán belül tetszőleges típusokat A struktúrán belül tetszőleges típusokat alkalmazhatunk (kivéve a void és a alkalmazhatunk (kivéve a void és a függvény típust), még struktúrákat is. függvény típust), még struktúrákat is. Azaz bizonyos megszorításokkal egy Azaz bizonyos megszorításokkal egy struktúra lehet rekurzív is. struktúra lehet rekurzív is.
Direktszorzat típusDirektszorzat típusDeklaráció:Deklaráció:
struct struct struktúra_azonosító {struktúra_azonosító {típus1 tag1;típus1 tag1;típus2 tag2;típus2 tag2;típusN tagN;típusN tagN;}; };
Az adattagok deklarációja a C nyelv szokásos Az adattagok deklarációja a C nyelv szokásos deklarációs szabályai érvényesek:deklarációs szabályai érvényesek:
structstruct struktúra_azonosító struktúra_azonosító struktúra_változó;struktúra_változó;
Direktszorzat típusDirektszorzat típus
Mikor használjuk?Mikor használjuk? Ha valamiről több – akár típusaiban Ha valamiről több – akár típusaiban
eltérő – adatot akarunk tárolni.eltérő – adatot akarunk tárolni. Minden egyes hasonló dologról Minden egyes hasonló dologról
ugyanazokat az adatokat szeretnénk ugyanazokat az adatokat szeretnénk tárolni.tárolni.
Megkötés:Megkötés: Minden dolog esetén az összes tárolandó Minden dolog esetén az összes tárolandó
adatnak rendelkezésre kell állnia.adatnak rendelkezésre kell állnia.
Direktszorzat típusDirektszorzat típus
Direktszorzat ábrázolásaDirektszorzat ábrázolása Általában a komponensek megadásának Általában a komponensek megadásának
sorrendjében tároljuk őket.sorrendjében tároljuk őket. Az adott komponens típusának Az adott komponens típusának
megfelelő fizikai formában tároljuk.megfelelő fizikai formában tároljuk.
Direktszorzat típusDirektszorzat típus
Deklaráció C nyelven:Deklaráció C nyelven:
typedef struct account { typedef struct account {
int account_number; int account_number;
char *first_name; char *first_name;
char *last_name; char *last_name;
float balance; float balance;
} account; } account;
Direktszorzat típusDirektszorzat típus
Változó deklaráció:Változó deklaráció:
account szamla;account szamla;
Értékadás:Értékadás:
szamla.first_name=„Kovács”;szamla.first_name=„Kovács”;
szamla.balance=10000000;szamla.balance=10000000;