Programozás I. - 11. gyakorlat Struktúrák, gyakorlás Tar Péter
1
Pannon Egyetem M¶szaki Informatikai Kar Rendszer- és Számítástudományi Tanszék
Utolsó frissítés: November 16, 2009
1
[email protected]
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
1 / 18
1
Struktúrák struct union biteld enum
2
Láncolt listák
3
Feladatok
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
2 / 18
Struktúrák
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
3 / 18
Alapok
Deníció A struktúra több tetsz®leges típusú elem együttese
Használata Összetett adatszerkezetek tárolására Változók hierarchiába rendezésére Struktúrált programok készítésére
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
4 / 18
Struktúra deniálása és létrehozása
Deniálás struct konyv{ int sorszam; int ertek; char nev[40]; };
Létrehozás
struct konyv micimacko;
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
5 / 18
Typedef használata
Deniálás typedef struct konyv{ int sorszam; int ertek; char nev[40]; }konyvType;
Létrehozás
konyvType micimacko;
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
6 / 18
Struktúra deklarálása Struktúrák kölcsönös egymásra hivatkozása esetén szükség van azok deklarálására.
Létrehozás
struct ember; struct kutya; struct ember{ char nev[20]; struct kutya* kutyaja; }; struct kutya{ char nev[20]; struct ember* gazdaja; }; Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
7 / 18
Hivatkozás az adattagokra
Adattagokra való hivatkozáshoz a . operátort használjuk.
Példa
konyvType micimacko; micimacko.sorszam=12; micimacko.ertek=2000; strcpy(micimacko.nev,"Micimacko kalandjai");
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
8 / 18
Struktúrák és mutatók A struktúrák tartalmazhatnak dinamikus adattagokat Memória foglalás és felszabadítás szükséges dinamikus adattagok esetén A dinamikus adattagokra való hivatkozás kétféleképp történhet * és . operátorok együttes használatával -> operátorral
Példa struct kutya {char* nev}; struct kutya* kutyam; kutyam=(struct kutya*)malloc(sizeof(struct kutya)); kutyam->nev=(char*)malloc(sizeof(char)*40); (*kutyam).nev="Pityu"; printf("%s",kutyam->nev); Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
9 / 18
Struktúrák inicializálása
A struktúra typedef struct {int a[2],b,c} adatok;
Els® példa adatok adataim={{1},2};
Második példa adatok adattomb[2]={{1,2},{1,2,3}};
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
10 / 18
Az union típus Deníció Olyan összetett típus, amelyben az adattagok egy megosztott memóriaterületen helyezkednek el.
Tulajdonságai Olyan esetekben hasznos, amikor egyszerre pontosan egy adattagra van szükség, de az különböz® típusú lehet A felhasznált memória mérete a legnagyobb adattag méretével egyezik meg Memóriát spórolhatunk meg vele Szintaktikája megegyezik a struct-al
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
11 / 18
A biteld
Deníció Olyan egész "típus", ami kisebb mint az alapvet® egész típusok.
Tulajdonságai Egy bájtban több adatot is tárolhatunk vele Memóriát spórolhatunk meg vele Egyaránt lehet el®jeles, vagy el®jel nélküli
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
12 / 18
A biteld Példa struct bitfield{ /* field 4 bits wide */ unsigned field1 :4; /* unnamed 3 bit field for padding */ unsigned :3; /* one-bit field can only be 0 or -1 in two's complement!*/ signed field2 :1; /* align next field on a storage unit */ unsigned :0; unsigned field3 :6; }full_of_fields;
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
13 / 18
Az enum típus
Deníció A programozó által létrehozott típus, amely felsorolást határoz meg.
Tulajdonságai Minden értéke string, "" használata nélkül Az értékekhez int értékek tartoznak Egyaránt lehet el®jeles, vagy el®jel nélküli
Példa enum jegyek{egyes, kettes, harmas, negyes, otos};
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
14 / 18
Láncolt listák
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
15 / 18
A láncolt lista Felépítése Minden elem két részb®l áll, egy adatból és egy mutatóból Minden elem mutatója a következ® elemre mutat A legels® elem mutatóját külön kell tárolni A legutolsó elem mutatója NULL
Tulajdonságai Dinamikus adatszerkezet, ügyelnünk kel a memóriafoglalásra Bármilyen adatokat tartalmazó lista tárolására alkalmas Az n. elem megkeresése m¶veletigényes
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
16 / 18
Beszúrás, törlés
Elem beszúrása Ügyelnünk kell az új elem létrehozására Be kell azt szúrni a listába a megfelel® helyre
Elem törlése Ügyelnünk kel a törlend® elem felszabadítására A többi listaelem mutatóját ha szükséges át kell állítanunk
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
17 / 18
1
Hozz létre egy struktúrát egy háromszög tárolására Legyenek benne oldalhossz, terület, kerület adatok A main függvényben hozz létre két háromszöget Írj függvényt, ami bekéri a háromszög adatait és letárolja azokat Írj függvényt, ami kiszámolja a kerületet Írj függvényt ami kiszámolja a területet Írassuk ki hogy a két háromszög közül az els®nek, vagy a másodiknak bekért területe-e a nagyobb Használj dinamikus memóriaterületeket a struktúrák tárolására
2
Valósíts meg egy láncolt listát hozzá tartozó insert és delete függvényekkel Készíts main függvényt, ami felépít egy 5 elem¶ láncolt listát, kiírja, majd lebontja azt Egészítsd ki a listát kétszersen láncolt listává
Tar Péter
(PE-MIK-DCS)
Programozás I. - 11. gyakorlat
November 16, 2009
18 / 18