Összetett adattípusok 8/b tétel

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

Upload: pandora-trevino

Post on 04-Jan-2016

51 views

Category:

Documents


0 download

DESCRIPTION

Összetett adattípusok 8/b tétel. Készítette: Kovács Nándor KONRACB.PTE. Adattípusok. A C++-ban leggyakrabban használt alaptípusok:. Egész számok típusa: int, short int, long int Lebegopontos számok típusa: float, double, long double Logikai típus: bool Karakter típus: char - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Összetett adattípusok 8/b tétel

Ö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

Page 2: Összetett adattípusok 8/b tétel

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.

Page 3: Összetett adattípusok 8/b tétel

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

Page 4: Összetett adattípusok 8/b tétel

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

Page 5: Összetett adattípusok 8/b tétel

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

Page 6: Összetett adattípusok 8/b tétel

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.

Page 7: Összetett adattípusok 8/b tétel

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.

Page 8: Összetett adattípusok 8/b tétel

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

Page 9: Összetett adattípusok 8/b tétel

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.

Page 10: Összetett adattípusok 8/b tétel

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.

Page 11: Összetett adattípusok 8/b tétel

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 };

Page 12: Összetett adattípusok 8/b tétel

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.

Page 13: Összetett adattípusok 8/b tétel

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.

Page 14: Összetett adattípusok 8/b tétel

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.

Page 15: Összetett adattípusok 8/b tétel

Unió típusUnió típus

C nyelvenC nyelven

typedef union {

int forintos;

float filleres;

} egyenleg;

Page 16: Összetett adattípusok 8/b tétel

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.

Page 17: Összetett adattípusok 8/b tétel

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.

Page 18: Összetett adattípusok 8/b tétel

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ó;

Page 19: Összetett adattípusok 8/b tétel

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.

Page 20: Összetett adattípusok 8/b tétel

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.

Page 21: Összetett adattípusok 8/b tétel

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;

Page 22: Összetett adattípusok 8/b tétel

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;