32
DINAMIKUS TÖMBÖK

Dinamikus tömbök

  • Upload
    atira

  • View
    59

  • Download
    3

Embed Size (px)

DESCRIPTION

Dinamikus tömbök. Dinamikus tömbök. Létrehozáskor megadott méretük a futás során változtatható Használatának lépései: Mutató létrehozása Memória allokálása (lefoglalás) – bárhol szerepelhet a programban; lehetőség van tömb átméretezésére Feldolgozás (esetleg átméretezés) - PowerPoint PPT Presentation

Citation preview

Page 1: Dinamikus tömbök

DINAMIKUS TÖMBÖK

Page 2: Dinamikus tömbök

Dinamikus tömbök Létrehozáskor megadott méretük a futás

során változtatható Használatának lépései:

Mutató létrehozása Memória allokálása (lefoglalás) – bárhol

szerepelhet a programban; lehetőség van tömb átméretezésére

Feldolgozás (esetleg átméretezés) Lefoglalt terület felszabadítása – a lefoglalt

terület nem szabadul fel automatikusan

Page 3: Dinamikus tömbök

Dinamikus tömbkezelés Memória dinamikus lefoglalása: malloc() és

calloc() malloc() – egy paramétert vár, mely

bájtokban adja meg, hogy mekkora legyen a lefoglalt memória terület.

calloc() – első paraméter, hogy hány elem jöjjön létre, második paraméter pedig a tömb egyetlen elemének méretét várja

Méretek megadásánál érdemes megadni a sizeof() operátort

Page 4: Dinamikus tömbök

Visszatérési értékük egy void * típusú mutató, ami a lefoglalt memóriaterületre mutat.

A visszakapott mutatót típuskényszeríteni kell a megfelelő típusra.

Példa: 10 elemű egészekből álló dinamikusan foglalt tömb:int *t, *t2;…t= (int*)malloc(sizeof(int)*10);t2=(int*)calloc(10, sizeof(int));

Page 5: Dinamikus tömbök

A realloc függvény Korábban lefoglalt dinamikus tömb

átméretezésére szolgál Paraméterei: első, hogy melyik az a

tömb, amelyiket át szeretnénk méretezni, második pedig a tömb új mérete egyetlen egészként

Visszatérési érték: void * mutató, tehát ezt is típuskényszeríteni kell

t2=(int*)realloc(t2, sizeof(int)*25);

Page 6: Dinamikus tömbök

A free függvény A dinamikusan foglalt memóriaterületek

falszabadítására szolgál Egyetlen paramétereként a mutatót kell

megadni, amely által mutatott területet fel szeretnénk szabadítani:

free(t);free(t2);

Page 7: Dinamikus tömbök

1. Feladat Készíts programot, melyben a

felhasználótól bekérsz egy számot, majd létrehozol a számnak megfelelő méretű dinamikus tömböt. A tömböt töltsd fel véletlen egészekkel 0 és 1000 között, majd írd a képernyőre a számok átlagát.

Page 8: Dinamikus tömbök

2. Feladat Írj olyan programot, mely a

felhasználótól 0 végjelig számokat olvas (előre nem tudjuk mennyit). A számok közül a párosak kerüljenek a paros tömbbe, a páratlanok a paratlan tömbbe. A program végül írja ki a beolvasott páros és páratlan számokat külön sorba.

Page 9: Dinamikus tömbök

3. Feladat Készíts olyan programot, melyben

létrehozol egy a felhasználó által megadott méretű dinamikus tömböt, ebbe páros számok kerüljenek véletlenszerűen generálva, és egy másikat ugyanígy páratlanokkal. A programból hívj meg egy általad írt függvényt, ami paraméterül kapja a két tömböt, majd felcseréli őket.

Page 10: Dinamikus tömbök

Parancssori argumentum

Page 11: Dinamikus tömbök

Lehetővé teszik, hogy egy programnak indításkor a terminálban paramétereket adjunk, s az automatikusan azokkal dolgozzon

Egyik előnye, hogy csökkenti a program interaktivitását, ami igen pozitív tulajdonság, ha a program futását automatizálni szeretnénk

A C nyelv a parancssori argumentumokat a main() függvény formális paramétereként megadott dinamikus tömbben tárolja el.

int main(int argc, char* argv[]){ }

Page 12: Dinamikus tömbök

argc – egy egész típusú szám, mely a parancssori argumentumok számát tárolja. A 0. parancssori argumentum mindig a futtatandó program neve.

argv – egy sztringet tároló tömb. A char* argv[] egy sztringet tároló tömböt jelöl. A mutató tömb minden eleme egy-egy karaktertömbre mutat és minden ilyen karaktertömb egy-egy parancssori argumentumot tartalmaz

Page 13: Dinamikus tömbök

Az argumentumok feldolgozása Ne felejtsük el ellenőrizni, hogy

megkaptuk-e a szükséges argumentumokat. Pl.: téglalap két oldalát várjuk:if (argc<3){

printf(„Túl kevés argumentum…”);return -1;

}

Page 14: Dinamikus tömbök

Ha stringen kívül más típussal is dolgozni akarunk, akkor használhatjuk a ctype.h fejlécállomány atoi() és atof() függvényeit.a=atof(argv[1]);b=atof(argv[2]);

A parancssori argumentumok értékének megadása:./program 12.4 3.3

Page 15: Dinamikus tömbök

1. Feladatok Írj programot, mely parancssori

argumentumként egy téglalap két oldalát várja, majd a képernyőre írja a téglalap területét és kerületét. A program ellenőrizze, hogy megkaptuk-e a szükséges argumentumokat.

Page 16: Dinamikus tömbök

2. Feladat Írj programot, mely parancssori

argumentumként egy egész számot vár. Ha kap, akkor 0 és a kapott szám közt egyébként 0 és 1000 közt a képernyőre ír egy véletlen egész számot.

Page 17: Dinamikus tömbök

3. Feladat Készíts programot, mely parancssori

argumentumként egy még nem létező fájl nevét várja, majd létrehozza a fájlt, úgy, hogy az a nevedet tartalmazza.

Page 18: Dinamikus tömbök

4. Feladat Módosítsd néhány feladatot úgy, hogy

ha lehet, parancssori argumentumként kérje be azokat az információkat, amit eddig szövegesen kértél be.

Page 19: Dinamikus tömbök

Struktúrák

Page 20: Dinamikus tömbök

Struktúrák Inhomogén (különböző típusú elemek), asszociatív

(minden elemét lehet névvel hivatkozni és közvetlenül elérni) adatszerkezet.

Használatát az teszi indokolttá, hogy vannak olyan speciális típusú adatok, melyek több különböző összetevőből állnak össze. Ezeket tárolhatnánk különböző változókban, ekkor azonban az információk közötti logikai összefüggés semmilyen fizikai módon nem lenne megvalósítva. Tipikus struktúrába szervezendő adat például egy személy lakcíme, ahol az irányítószám és a házszám szám, míg a helységnév és az utcanév szöveges típusú

Page 21: Dinamikus tömbök

C struktúrák

Legegyszerűbb módszer a struct kulcsszó önálló megadása, majd a név hozzárendelése:struct ember{

int ID;…

};

Page 22: Dinamikus tömbök

A struktúra létrehozásával lehetőségünk van azonnal változók létrehozására is az újonnan definiált típussal:

struct ember{int ID;…

}Dodi; Ezzel deklaráljuk azt, hogy Dodi változó

ember típusú

Page 23: Dinamikus tömbök

A továbbiakban a változók deklarálása a következőképp alakul:

struct ember Peti, Panni A C lehetőséget biztosít névtelen struktúrák

létrehozására is. struct {

int ID;…

}Jani; A típust magát nem őriztük meg, tehát nem tudunk

a későbbiekben hivatkozni rá

Page 24: Dinamikus tömbök

typedef Egy típusra valamilyen más névvel

hivatkozhatunk A main függvény előtt használatos:

typedef típusnév újnév; Az új nevet ugyanúgy használhatjuk, mint a

típusnevet.typedef struct ember_temp{

int ID;…

} ember;

Page 25: Dinamikus tömbök

Deklaráláskor már nem kell kirakni a struct szóttypedef struct{

int ID;…

} ember; Nagyon könnyen összetéveszthető a

fentebb már említett deklarálással, az ember ugyanis itt nem változó, hanem típus.

Page 26: Dinamikus tömbök

Struktúrák használata Struktúrát definiálni bárhol lehet az

előfordítónak szóló utasítások után A struktúra típusú változók tagjaira ponttal

történő minősítés segítségével hivatkozhatunk. Értékadás például: Dodi.ID = 5

Létrehozhatunk struktúra tömböket is. Ezek több olyan elemet fognak össze, melyek ugyanolyan jellemzőkkel bírnak. Jó példa erre egy osztály tárolása

Page 27: Dinamikus tömbök

typedef struct{int ID;int kor;double magassag

} ember;int main(){

ember osztaly[30];}

Elemre való hivatkozás: osztaly[17].ID

Page 28: Dinamikus tömbök

1. Feladat Hozz létre egy struktúrát komplex

számok tárolására, majd írd meg a komplex összeadás függvényét.

Page 29: Dinamikus tömbök

2. Feladat Készíts programot, melyben van egy

kétdimenziós pontok tárolására alkalmas struktúradefinició. A program kérje be két pont adatait, majd írja a képernyőre a két pont távolságát, valamint a felezőpont koordinátáit.

Page 30: Dinamikus tömbök

3. Feladat Készíts programot, melyben szerepel egy

12 tagú struktúratömb. A tömb elemei legyenek hónapok, melyek a következő tulajdonsággal rendelkeznek: napok száma, profit. Töltsd fel a tömböt adatokkal (a profit legyen véletlen 200000 és 500000 között). Majd írd a képernyőre, hogy az egyes negyedévekben mennyi volt a napi átlagos profit.

Page 31: Dinamikus tömbök

4. Feladat Egy fájlban lemezek adatai vannak

elmentve azonosító kiadás_éve dalok_száma formában. Készíts programot, melyben egy olyan struktúrát használsz, ami alkalmas a lemezek adatainak tárolására. A program kérjen be egy évszámot, majd írja ki az összes olyan lemez azonosítóját, mely az adott évben készült.

Page 32: Dinamikus tömbök

5. Feladat Bővítsd a 2. feladatot úgy, hogy a program

alkalmas legyen síkbeli transzformációk elvégzésére, azaz kérjen be egy pontot, majd a felhasználó utasításainak megfelelően tudja a pontot eltolni, forgatni egy másik pont körül, tükrözni egy pontra, illetve tükrözni valamelyik tengelyre. A programban minden transzformáció külön függvény legyen, s a függvények visszatérési értéke legyen az eredményül kapott pont.