Dinamikus t mb k
Download
1 / 32

Dinamikus tömbök - PowerPoint PPT Presentation


  • 129 Views
  • Uploaded on

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)

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Dinamikus tömbök' - atira


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

Dinamikus t mb k1
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


Dinamikus t mbkezel s
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


  • 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));


A realloc f ggv ny
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);


A free f ggv ny
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);


1 feladat
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.


2 feladat
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.


3 feladat
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.



  • 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[]){ }


  • argc terminálban paramétereket adjunk, s az automatikusan azokkal dolgozzon – 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


Az argumentumok feldolgoz sa
Az argumentumok feldolgozása terminálban paramétereket adjunk, s az automatikusan azokkal dolgozzon

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

    }


  • Ha terminálban paramétereket adjunk, s az automatikusan azokkal dolgozzonstringen 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


1 feladatok
1. Feladatok terminálban paramétereket adjunk, s az automatikusan azokkal dolgozzon

  • Í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.


2 feladat1
2. Feladat terminálban paramétereket adjunk, s az automatikusan azokkal dolgozzon

  • Í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.


3 feladat1
3. Feladat terminálban paramétereket adjunk, s az automatikusan azokkal dolgozzon

  • 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.


4 feladat
4. Feladat terminálban paramétereket adjunk, s az automatikusan azokkal dolgozzon

  • 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.


Strukt r k
Struktúrák terminálban paramétereket adjunk, s az automatikusan azokkal dolgozzon


Strukt r k1
Struktúrák terminálban paramétereket adjunk, s az automatikusan azokkal dolgozzon

  • 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ú


C strukt r k
C struktúrák terminálban paramétereket adjunk, s az automatikusan azokkal dolgozzon

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

    struct ember{

    int ID;

    };



  • 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á


Typedef
typedef következőképp alakul:

  • 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.

    typedefstruct ember_temp{

    int ID;

    } ember;


  • Deklaráláskor már nem kell kirakni a következőképp alakul:struct szót

    typedefstruct{

    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.


Strukt r k haszn lata
Struktúrák használata következőképp alakul:

  • 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


typedef következőképp alakul:struct{

int ID;

int kor;

doublemagassag

} ember;

int main(){

ember osztaly[30];

}

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


1 feladat1
1. Feladat következőképp alakul:

  • 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.


2 feladat2
2. Feladat következőképp alakul:

  • 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.


3 feladat2
3. Feladat következőképp alakul:

  • 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.


4 feladat1
4. Feladat következőképp alakul:

  • Egy fájlban lemezek adatai vannak elmentve azonosítókiadás_évedalok_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.


5 feladat
5. Feladat következőképp alakul:

  • 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.


ad