LDinamikus tömbök, kétdimenziós tömbök Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./0. lVektorok létrehozása futásidőben, dinamikusan.

Slides:



Advertisements
Hasonló előadás
„Esélyteremtés és értékalakulás” Konferencia Megyeháza Kaposvár, 2009
Advertisements

Tömbök C#-ban.
LEgyméretű tömbök, vektorok Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA I. dr.Dudás László 17./0. lVektorok definiálása lVektorok definiálása kezdőértékekkel.
Típusok, változók, konstansok
Kifejezések, operandusok, operátorok
LFüggvények Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 20./0. lFüggvények deklarációja és prototípusa lA függvénydefiníció lHivatkozás.
LRendezés minimális elem kiválasztással Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 19./0. lAz algoritmus működése lRávezető feladat.
8. előadás (2005. április 19.) Pozicionálás fájlban (folyt.) I/O mechanizmus váltás Hibakezelő függvények Változók tárolási osztályai Parancssor-argumentumok.
Koordináta transzformációk
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A programozás alapjai 1. (VIEEA100) 9. előadás.
Matematika II. 3. előadás Geodézia szakmérnöki szak 2010/2011. tanév Műszaki térinformatika ágazat tavaszi félév.
Dinamikus tömbök.
Bevezetés a Java programozásba
6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1.
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Táblázatkezelés alapjai MS Excel, OpenOffice Calc
Mutatók, tömbök, függvények
Borland C/C++ mintapéldák
Borland C/C++ mintapéldák függvényekre. 1. példa Írjunk olyan függvényt amely egy számot kiirat.
Borland C/C++ mintapéldák mutatókra
3. LOGIKAI ADATSZERKEZETEK
Programozás I. Horváth Ernő.
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Utasítások, elágazás- és ciklusszervezés C nyelvi utasítások
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
1 Programozás alapjai GEIAL312B (ANSI C) BSc (Bachelor of Science) / Alap képzés 2005/2006. őszi félév Miskolci Egyetem Általános Informatikai Tanszék.
Programozás I. Ciklusok
Programozás I. Adatállományok dr Póder Margit f. docens Rendszer és Szoftvertechnológia Tanszék.
További vektor, mátrix algoritmusok
Bevezetés a C++ programozási nyelvbe
dr. Szalkai István Pannon Egyetem, Veszprém
Tömbök Csernoch Mária.
Megszámlálás, kiválasztás alapalgoritmusok
Összetett adattípusok
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
A REKORD TIPUS Páll Boglárka. Ismétlés: Feladat Készítsünk kimutatást a XI.B osztály tanulóiról. Minden tanuló esetén a következő adatokat tartjuk nyilván:
Struktúra nélküli adatszerkezetek
Adatszerkezetek 1. előadás
Összetett adattípusok
Készítette: Csíki Gyula
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Objektum orientált programozás
Programozás I. Típus algoritmusok
CUDA C/C++ programozás
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
CUDA C/C++ programozás CUDA C bevezetés A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
Írja fel a tizes számrendszerbeli
Algoritmizálás, adatmodellezés
© Tóth Ákos, Óbudai Egyetem, 2010
Memóriakezelés feladatok Feladat: 12 bites címtartomány. 0 ~ 2047 legyen mindig.
Programtervezés, programozás I. 2.5 tömbök,stringek
Struktúrák a C nyelvben 1 Akkor használjuk, ha az egy egyedre jellemző különböző típusú adatokat együtt akarjuk tárolni. Lényegében típusdeklaráció. A.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
Informatikai gyakorlatok 11. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
A C++ programozási nyelv
a programegységek között
Nevezetes algoritmusok
A C++ programozási nyelv
Készítette: Révész Lajos Bálint
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
A struct, az union és az enum típus
Könyvtári függvények I. Input / output kezelés függvényei
Típusok, változók, konstansok
Cache példák 2019 (IMSC).
Előadás másolata:

lDinamikus tömbök, kétdimenziós tömbök Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./0. lVektorok létrehozása futásidőben, dinamikusan zajló helyfoglalással Kétdimenziós tömbök lMintapélda mátrix-vektor szorzására lKapcsolat a mátrixok indexes és mutatós hivatkozása között lVáltozó elemszámú tömbök dinamikus helyfoglalással

lVektorok létrehozása futásidőben, dinamikusan zajló helyfoglalással Egy tömb lehet ideiglenes, ha a program futási idejének csak egy részében létezik, azaz foglalja a memóriát. A blokkokban definiált tömbök csak a blokkban élnek, azaz a programnak a blokkból való kilépésekor automatikusan felszabadulnak. Problémát okozhat azonban, hogy a számukra a veremben rendelkezésre álló memóriahely korlátozott. Kikerülhetjük dinamikus memóriakezeléssel ezt a problémát, ha a nagyméretű tömböknek mi magunk foglalunk le helyet a vermen kívüli területen, és használat után a tömbök által foglalt memóriahelyet felszabadítjuk. A dinamikus vektordefiniálás két lépése a mutatódefiniálás és memóriafoglalás (allokálás): * ;... = ( *) calloc(, sizeof( )); Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./1.

Pl.: float * vektmut ; vektmut = (float*) calloc(200, sizeof(float)); A calloc() függvény a lefoglalt területet nullákkal fel is tölti. Ha nincs elég hely, a függvényérték 0. Példa a lefoglalt vektor használatára: vektmut [19] = 3*14.56 ; printf("%f",vektmut [19]); Dinamikusan lefoglalt vektor helyének felszabadítása: free( ); Pl.: free ( vektmut ); Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21/2.

lKétdimenziós tömbök, vagy másnéven mátrixok definiálása: [ ] [ ] ; Pl.: int beepules[4][3]; A mátrixok definiálhatók kezdőértékmegadással (inicializálás) is. Pl.: int beepules[4][3] = { 25, 32, 45, 18, 23, 32, 1, 2, 3, 1, 1, 2 }; A mátrixok feltöltése, feldolgozása, kiíratása elvégezhető egymásba- tokozott kettős for ciklussal. Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21 /3.

lMintapélda mátrix-vektor szorzására: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21 /4. Az alkatrészféleségek fenti beépülési mátrixának és a rendelés vektorának ismeretében határozzuk meg az alkatrészigény-vektort!

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./5. #include int beepules[ 4 ][ 3 ], rendeles[ 3 ], alkigeny[ 4 ]; main() { int i, j ; clrscr(); printf("Alkatrészigény számítás\n\n"); printf("Adja meg a beépülési mátrixot : \n"); // folytatás a következő lapon

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21 /6. for ( i = 0 ; i < 4 ; i++) for ( j = 0 ; j < 3 ; j++) { printf("\nA %d. alkatrészböl a %d. termékbe", i +1, j +1 ); printf(" beépülö darabszám= " ); scanf("%d", &beepules[ i ][ j ] ); } printf("\n\nAdja meg a rendelést:\n" ); for ( j = 0; j < 3; j++) { printf("\naz %d. termékböl (db)= ", j +1 ); scanf("%d", &rendeles[ j ] ); } for ( i = 0 ; i < 4; i++) for ( alkigeny[ i ] = 0, j = 0; j < 3; j++) alkigeny[ i ] += beepules[ i ][ j ] * rendeles[ j ]; for ( i = 0; i < 4; i++) printf("\nA %d. alkatrészböl %d db kell.", i +1, alkigeny[ i ] ); getch(); }

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21 /7. A fenti példában is alkalmazhattuk volna a tömbök pointeres megfelelőit az alábbiak szerint: beepules [ i ][ j ] helyett * (beepules[ i ] + j ), vagy * ( * (beepules+i ) + j ), rendeles[ j ] helyett * (rendeles + j ), alkigeny[ i ] helyett * (alkigeny + i ).

lKapcsolat a mátrixok indexes és mutatós hivatkozása között Indexes formában definiált mátrixok tartalma egyaránt elérhető indexekkel, vagy mutatókkal. A mutatókkal, pointeraritmetikával történő elérés gyorsabb, mert nem tartalmazza az indexes alak fordító általi átírásakor használt *( ( *) + * + ) kifejezésben levő szorzást. Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21 /8.

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21 /9. A memóriában sorfolytonosan elhelyezkedő tömb-elemek tekinthetők a sorokból, mint vektorelemekből álló vektor, vagy a szokásos sor-oszlop tagolású mátrix alakban is: *( (int*) matrix + 3*0 + 2 ) Pl.: int matrix [ 4 ] [ 3 ];

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21 /10. #include int matrix[ 4 ][ 3 ] = {0,1,2, 10,11,12, 20,21,22, 30,31,32}; main() { int i, j ; clrscr(); printf("Kapcsolat a mátrixok indexes és mutatós formája között\n\n"); printf("Az int matrix[4][3] definició háromféle tipusú és \n"); printf(" méretü (helyfoglalás byte-okban) kifejezést is \n"); printf(" meghatároz egyszerre: matrix[ ][ ], matrix[ ] és matrix.\n"); printf("Miután a definiálás során már meghatározásra került \n"); printf(" és eltárolódott a méretük,\n"); printf(" egyaránt használhatjuk az indexes és a mutatós \ hivatkozást, \n"); printf(" a következö egyenlöségeknek megfelelöen:\n");

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21 /11. printf("\nsizeof( matrix[0][0] )= %d = sizeof( **matrix ) = %d", sizeof( matrix[0][0] ), sizeof( **matrix ) ); // 2 2 printf("\nsizeof( matrix[0] )= %d = sizeof( *matrix ) = %d", sizeof( matrix[0] ), sizeof( *matrix ) ); // 6 6 printf("\nsizeof( matrix )= %d = sizeof( matrix ) = %d", sizeof( matrix ), sizeof( matrix ) ); // printf("\n\nFontos, hogy a pointeraritmetikai kifejezésekben a \n"); printf(" definiáláskor eltárolt méretek adják az elemméretet, \n"); printf(" azaz pl: a matrix[ i ][ j ] elemet pointeresen a \n"); printf(" *(*(matrix + i ) + j ) adja, amely \n"); printf(" i db *matrix tipusú elemmel (i db sorral), és \n"); printf(" j db **matrix tipusú elemmel léptet a mátrixban.\n\n"); printf(" Pl.: matrix[1][2] = %d = *( *( matrix + 1 ) + 2 ) = %d", matrix[ 1 ][ 2 ], *(*(matrix+1)+2) ); getch(); }

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21 /12. Amennyiben csak futás közben derül ki egy adatszerkezetről, hogy hány sora, és soronként hány oszlopa (eleme) van, dinamikusan kell helyet lefoglalnunk az elemek számára. Csak az egy calloc függvénnyel foglalt memóriahelyek tárolnak sorfolytonos elemeket, egyébként azok sorfolytonossága nem garantált. Az adatszerkezet ábrája a következő lehet: lVáltozó elemszámú tömbök dinamikus helyfoglalással

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21 /13. A fenti adatszerkezetet létrehozó program: #include main() { long** matr ; // egyetlen mutatót definiálunk csak int sor, oszl[20], i, j ; // meg néhány segédváltozót clrscr(); printf("A programban foglalunk helyet \n"); printf("megadható számú sornak, és \n"); printf("soronként megadható számú elemnek \n\n"); printf("Sorok száma = "); scanf("%d", &sor ); matr = (long**) calloc( sor, sizeof(long*) );

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21 /14. for (i = 0 ; i < sor ; i++) { printf("\nA %d. sor elemeinek száma= ", i ); scanf("%d", &oszl[ i ] ); matr[ i ] = (long*) calloc(oszl[ i ], sizeof(long) ); for (j = 0; j < oszl[ i ]; j++) { printf("A %d. sor %d. eleme =", i, j ); scanf("%ld",&matr[ i ][ j ] ); } for (i = 0; i < sor; i++) // Kiíratás { for (j = 0; j < oszl[ i ]; j++) printf("%8ld ", matr[ i ][ j ] ); printf("\n"); } for (i = 0; i < sor; i++) free(matr[i]); // tárolóhelyek felszabadítása free(matr); // mutatóvektor felszabadítása getch(); }