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 tar@dcs.vein.hu 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