Condiție preliminară: Matrice în C
O matrice multidimensională poate fi numită o matrice de matrice care stochează date omogene sub formă tabelară. Datele din matrice multidimensionale sunt în general stocate în ordinea rândurilor majore în memorie.
The formă generală de declarare a tablourilor N-dimensionale este prezentat mai jos.
Sintaxă:
data_type array_name[size1][size2]....[sizeN];>
- tip_date : Tipul de date care urmează să fie stocate în matrice.
- nume_matrice : Numele matricei.
- mărimea 1, mărimea 2,…, mărimea N : Dimensiunea fiecărei dimensiuni.
Exemple :
excepții java
Two dimensional array: int two_d[10][20]; Three dimensional array: int three_d[10][20][30];>
Dimensiunea tablourilor multidimensionale:
Numărul total de elemente care pot fi stocate într-o matrice multidimensională poate fi calculat prin înmulțirea dimensiunii tuturor dimensiunilor.
De exemplu:
- Matricea int x[10][20] poate stoca total (10*20) = 200 de elemente.
- În mod similar, matrice int x[5][10][20] poate stoca total (5*10*20) = 1000 de elemente.
Pentru a obține dimensiunea matricei în octeți, înmulțim dimensiunea unui singur element cu numărul total de elemente din matrice.
De exemplu:
- Dimensiunea matricei int x[10][20] = 10 * 20 * 4 = 800 de octeți. (unde int = 4 octeți)
- În mod similar, dimensiunea de int x[5][10][20] = 5 * 10 * 20 * 4 = 4000 de octeți. (unde int = 4 octeți)
Cele mai frecvent utilizate forme ale matricei multidimensionale sunt:
- Matrice bidimensională
- Matrice tridimensională
Matrice bidimensională în C
A matrice bidimensională sau matrice 2D în C este cea mai simplă formă a tabloului multidimensional. Putem vizualiza o matrice bidimensională ca o matrice de matrice unidimensionale aranjate una peste alta formând un tabel cu rânduri „x” și coloane „y” unde numărul rândului variază de la 0 la (x-1) și numărul coloanei. variază de la 0 la (y-1).

Reprezentarea grafică a matricei bidimensionale de dimensiune 3 x 3
Declarația matricei bidimensionale în C
Forma de bază de declarare a unui tablou 2D cu X rânduri și și coloanele din C este prezentată mai jos.
Sintaxă:
data_type array_name[x][y];>
Unde,
- tip_date: Tipul de date care urmează să fie stocate în fiecare element.
- nume_matrice: numele matricei
- X: Număr de rânduri.
- și: Numar de coloane.
Putem declara o matrice întregă bidimensională spune „x” cu 10 rânduri și 20 de coloane astfel:
Exemplu:
int x[10][20];>
Notă: În acest tip de declarație, matricei i se alocă memorie în stivă, iar dimensiunea matricei ar trebui să fie cunoscută la momentul compilării, adică dimensiunea matricei este fixă. De asemenea, putem crea o matrice dinamic în C folosind metodele menționate Aici.
Inițializarea rețelelor bidimensionale în C
Diversele moduri în care o matrice 2D poate fi inițializată sunt următoarele:
- Utilizarea Listei de inițializare
- Folosind bucle
1. Inițializarea matricei 2D utilizând Lista de inițializare
Putem inițializa o matrice 2D în C folosind o listă de inițializare așa cum se arată în exemplul de mai jos.
Prima metoda:
int x[3][4] = {0, 1 ,2 ,3 ,4 , 5 , 6 , 7 , 8 , 9 , 10 , 11}> Matricea de mai sus are 3 rânduri și 4 coloane. Elementele din acolade de la stânga la dreapta sunt stocate în tabel și de la stânga la dreapta. Elementele vor fi completate în matrice în ordine: primele 4 elemente din stânga vor fi completate în primul rând, următoarele 4 elemente în al doilea rând și așa mai departe.
A doua metodă (mai bună) :
int x[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};> Acest tip de inițializare folosește acolade imbricate. Fiecare set de bretele interioare reprezintă un rând. În exemplul de mai sus, există un total de trei rânduri, așa că există trei seturi de bretele interioare. Avantajul acestei metode este că este mai ușor de înțeles.
Notă: numărul de elemente din lista de inițializare trebuie să fie întotdeauna mai mic sau egal cu numărul total de elemente din matrice.
De asemenea, putem declara matricea fără a defini dimensiunea rândului dacă folosim inițializarea listei. Compilatorul va deduce automat dimensiunea matricei în acest caz:
data_type array_name[][y] = {...} ;> Este încă obligatoriu să se definească numărul de coloane.
2. Inițializarea matricei 2D folosind bucle
Putem folosi orice buclă C pentru a inițializa fiecare membru al unui tablou 2D unul câte unul, așa cum se arată în exemplul de mai jos.
Exemplu:
set dactilografiat
int x[3][4]; for(int i = 0; i <3; i++){ for(int j = 0; j < 4; j++){ x[i][j] = i + j; } }> Această metodă este utilă atunci când valorile fiecărui element au o relație secvențială.
Accesarea elementelor matricelor bidimensionale în C
Elementele din tablourile 2D sunt accesate folosind indecși de rând și indici de coloane. Fiecare element dintr-o matrice 2D poate fi referit prin:
Sintaxă:
array_name[i][j]>
Unde,
- eu: Indexul de rând.
- j: Indexul coloanei.
Exemplu:
int x[2][1];>
Exemplul de mai sus reprezintă elementul prezent în al treilea rând și a doua coloană.
Notă : În matrice, dacă dimensiunea unui tablou este N. Indicele acestuia va fi de la 0 la N-1. Prin urmare, pentru indexul de rând, numărul rândului 2 este 2+1 = 3. Pentru a scoate toate elementele unui tablou bidimensional putem folosi bucle imbricate for. Vom avea nevoie de două pentru ‘ bucle. Unul pentru a parcurge rândurile și altul pentru a traversa coloanele.
Pentru imprimarea întregii matrice, accesăm fiecare element unul câte unul folosind bucle. Ordinea de parcurgere poate fi ordinea rând-major sau ordinea coloană-major, în funcție de cerință. Exemplul de mai jos demonstrează traversarea rândurilor majore a unui tablou 2D.
Exemplu:
C
// C Program to print the elements of a> // Two-Dimensional array> #include> int> main(>void>)> {> >// an array with 3 rows and 2 columns.> >int> x[3][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };> >// output each array element's value> >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <2; j++) {> >printf>(>'Element at x[%i][%i]: '>, i, j);> >printf>(>'%d
'>, x[i][j]);> >}> >}> >return> (0);> }> // This code is contributed by sarajadhav12052009> |
>
>Ieșire
Element at x[0][0]: 0 Element at x[0][1]: 1 Element at x[1][0]: 2 Element at x[1][1]: 3 Element at x[2][0]: 4 Element at x[2][1]: 5>
Complexitatea timpului: O(N*M) , unde N(aici 3) și M(aici 2) sunt numere de rânduri și, respectiv, de coloane.
Complexitatea spațiului: O(1)
Cum sunt stocate matricele 2D în memorie?
Elementele matricei 2-D trebuie să fie stocate contiguu în memorie. Deoarece computerele au adrese de memorie liniare, matricele 2-D trebuie să fie liniarizate astfel încât să permită stocarea lor. Există două moduri de a realiza liniarizarea elementelor matricei:
- Rând-major- Tehnica de liniarizare stochează în primul rând primul rând al matricei, apoi al doilea rând al matricei, apoi al treilea rând și așa mai departe. (adică elementele sunt stocate pe rând. Rândurile sunt listate pe baza coloanelor)
- Coloana-major – Această tehnică de liniarizare stochează mai întâi prima coloană, apoi a doua coloană, apoi a treia coloană și așa mai departe, adică (elementele sunt stocate pe coloană. Coloanele sunt listate pe baza de rânduri)
Calculatorul nu ține evidența adreselor tuturor elementelor matricei, dar ține evidența adresei de bază (adresa de pornire a primului element) și calculează adresele elementelor atunci când este necesar.
Pentru a afla mai multe, consultați articolul - Calculul adresei elementului 1-D, 2-D și 3-D
Matrice tridimensională în C
A Matrice tridimensională sau 3D array în C este o colecție de tablouri bidimensionale. Poate fi vizualizat ca mai multe matrice 2D stivuite una peste alta.

Reprezentarea grafică a matricei tridimensionale de dimensiune 3 x 3 x 3
Declarația matricei tridimensionale în C
Putem declara o matrice 3D cu X tablouri 2D având fiecare și rânduri și Cu coloane folosind sintaxa prezentată mai jos.
Sintaxă:
data_type array_name[x][y][z];>
- tip_date: Tip de date care trebuie stocate în fiecare element.
- nume_matrice: numele matricei
- X: Numărul de tablouri 2D.
- și: Numărul de rânduri din fiecare matrice 2D.
- Cu: Numărul de coloane din fiecare matrice 2D.
Exemplu:
int array[3][3][3];>
Inițializarea matricei tridimensionale în C
Inițializarea într-o matrice 3D este aceeași cu cea a matricelor 2D. Diferența este pe măsură ce numărul de dimensiuni crește, astfel încât și numărul de bretele imbricate va crește.
O matrice 3D în C poate fi inițializată utilizând:
- Lista de inițializare
- Bucle
Inițializarea matricei 3D utilizând Lista de inițializare
Metoda 1 :
int x[2][3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};> Metoda 2 (mai bună) :
int x[2][3][4] = { { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} }, { {12,13,14,15}, {16,17,18,19}, {20,21,22,23} } };> Din nou, la fel ca și matricele 2D, putem declara și matricele 3D fără a specifica dimensiunea primelor dimensiuni dacă folosim lista de inițializare pentru inițializare. Compilatorul va deduce automat dimensiunea primei dimensiuni. Dar mai trebuie să precizăm restul dimensiunilor.
data_type array_name[][y][z] = {....};> Inițializarea matricei 3D folosind bucle
Este, de asemenea, similar cu cel al matricei 2D, cu încă o buclă imbricată pentru accesarea încă o dimensiune.
int x[2][3][4]; for (int i=0; i<2; i++) { for (int j=0; j<3; j++) { for (int k=0; k<4; k++) { x[i][j][k] = (some_value); } } }> Accesarea elementelor în matrice tridimensională în C
Accesarea elementelor din 3D Arrays este, de asemenea, similară cu cea din 2D Arrays. Diferența este că trebuie să folosim trei bucle în loc de două bucle pentru o dimensiune suplimentară în 3D Arrays.
Sintaxă:
array_name[x][y][z]>
Unde,
- X: Indexul matricei 2D.
- și: Indexul acelui rând de matrice 2D.
- Cu: Indexul acelei coloane matrice 2D.
C
funcțiile arduino
// C program to print elements of Three-Dimensional Array> #include> int> main(>void>)> {> >// initializing the 3-dimensional array> >int> x[2][3][2] = { { { 0, 1 }, { 2, 3 }, { 4, 5 } },> >{ { 6, 7 }, { 8, 9 }, { 10, 11 } } };> >// output each element's value> >for> (>int> i = 0; i <2; ++i) {> >for> (>int> j = 0; j <3; ++j) {> >for> (>int> k = 0; k <2; ++k) {> >printf>(>'Element at x[%i][%i][%i] = %d
'>, i,> >j, k, x[i][j][k]);> >}> >}> >}> >return> (0);> }> |
>
>Ieșire
Element at x[0][0][0] = 0 Element at x[0][0][1] = 1 Element at x[0][1][0] = 2 Element at x[0][1][1] = 3 Element at x[0][2][0] = 4 Element at x[0][2][1] = 5 Element at x[1][0][0] = 6 Element at x[1][0][1] = 7 Element at x[1][1][0] = 8 Element at x[1][1][1] = 9 Element at x[1][2][0] = 10 Element at x[1][2][1] = 11>
În moduri similare, putem crea matrice cu orice număr de dimensiuni. Cu toate acestea, complexitatea crește și pe măsură ce crește numărul de dimensiuni. Cea mai utilizată matrice multidimensională este matricea bidimensională.
Matricele sunt, de asemenea, strâns legate de pointerii în limbajul C. Pentru a afla mai multe despre relația tablourilor cu pointerii în C, consultați acest articol.