Bun...In aceasta lactie ne vom ocupa de matrice.
Cu siguranta acest termen nu va este necunoscut, intrucat se mai utilizeaza si in alte domanii, cum ar fi matematica.
Cum am invatat pana acuma (si ar trebuii sa stiti), fiecare tip prezentat poate pastra in memorie decat o valoare.
Exceptie la afirmatia de mai sus este sirul de careactere, care, ati ghicit, este de fapt o matrice (unidimensionala, as putea adauga).
Cum spuneam, intrucat programele au evoluat si vor urma sa evolueze, a aparut necesutatea unui astfel de tip,
pentru a usura munca programatorului. Ganditi-va cat ar dura sa declari 100 de variabile.
Acum totul este mult mai simplu si mai rapid.
In continuare vom invata despre trei tipuri de matrice:
a) Matrice Unidimensionale
b) Matrice Bidimensionale
c) Matrice Multidimensionale (aici vom preciza doar lucrurile esentiale despre matricele tridimensionale)
I Matrice Unidimensionale
Pentru cei care stiu Pascal, trebie sa precizez ca acest tip de matrice este ceea ce in Pascal si numeste vector.
In matricea unidimansionala se pot poate pastra un sir de valori.
O matrice se declare in felul urmator: la inceput se specifica tipul dorit (adica tipul elementelor pe care
doriti sa le la pastreze matricea), dupa care se da un nume matricei si bineinteles dimansiunile matricei.
Pentru a declara dimansiunile unei matrice se pune intre paranteze patrate numarul de elemente dorite.
Exemple :
int apartamante[100];
long placinte[20];
int, long - reprezinta tipul valorilor (dupa cum bine stiti);
apartament, placinte - reprezinta numele matricelor;
[100], [20] - reprezinta numarul de elemente.
Este foarte inportant de stiut, ca la fel ca la siruri, primul element al matricei este elementul
Deci matricea va fi mai lunga cu o valoare decat numarul de elemente declarat de voi.
Exemple:
apartamente[0]=44; (s-a dat o valoare primului element)
placinte[19]=3; (s-a dat o valoare ultimului element, priveste exemplul de mai sus)
Simplu, nu?
Acum sa trecem la lucruri mai "serioase".
As putea sa vorbesc despre memoria alocata de C pentru o matrice data, insa asta nu e chiar asa de important.
De retinut faptul ca pentru o matrice de 100 de tip int C aloca 100*2 octeti iar pentru float aloca 100*4 octeti, dar astea sunt decat amanunte.
Cum se initializeaza o matrice: se precizeaza tipul (int, float, long etc), numele, numarul de elemente, se pune semnul egal si intre acolade ({}), cu virgula intre ele, se insira valorile dorite.
Exemplu:
int colaci[666]={33, 55, 77, 88, 99};
float cepe[]={23.6, 33.9};
Puteti sesiza ca in exemplul nr. doi nu am mai introdus intre paranteze patrate numarul de elemente. In acest caz, C va crea matricea cu niste diminsiuni suficiente pentru a pastra valorile introduse intre paranteze.
Mai departe, cred ca este necesar sa arat cum putem afisa valorile unei matrice.
Va voi prezenta un program, dupa care il voi comanta.
Exemplu:
#include
int main()
{
int apartamente[100]={2, 8, 44, 62, 1};
printf("apartamente[0] = %d\n",apartamente[0]);
printf("apartamente[1] = %d\n",apartamente[1]);
printf("apartamente[2] = %d\n",apartamente[2]);
printf("apartamente[3] = %d\n",apartamente[3]);
printf("apartamente[4] = %d\n",apartamente[4]);
return 0;
}
Nu stiu daca ar trebui sa povestesc prea mult despre programul de mai sus, deoarece cu siguranta stiti si voi ce face. (afiseaza toate elementele matricei sub forma : apartamante[0] = 2).
Bun, sa trecem mai departe.
In continuare vreau (asa ca la final) neaparat sa va arat un program destul de dragut si foarte usor de inteles (asta daca ati fost atenti la lectiile din urma).
Programul urmator va afisa elementele unei matrice. Partea mai "dificila" (sau noua) este ca vom trensmite datele matricei uni functii, functie care va face toata treaba.
Exemplu:
#include
void afiseaza(int apar[], int n)
{
int k;
fot (k=0;k printf("%d\n",apar[k]);
}
int main(void)
{
int apartamente[7]={1,2,3,4,5,6,7};
afiseaza(apartemente, 7);
return 0;
}
A fost greu? Eu cred ca nu.
Si acum sa explic pe scurt acest program: functia primeste ca parametrii matricea si numarul de elemente ale matricei (n in programul nostru); functia face afisarea iar prin apelul functiei se face afisarea propriuzisa (pe ecrean).
Intrucat voi ar trebui sa stiti in mare parte programele prezentate de mine, nu cred ca este cazul sa le comentez foarte amanuntit, iar daca acum aflati lucruri noi (pe langa matrice) va recomand sa cititi mai intai celelalte lectii.
Sper ca ati priceput cat de cat ce am scris mai sus, daca nu m-am facut inteles, va sfatuiesc sa mai cititi o data.
II Matrice Bidimensionale
Pana acum am prezentat matricele unidimansionale, cele care au forma unui rand, insa mai exista si matrice bidimensionale.
Acestea pot fi reprezentate sub forma unui tabel (sunt sigur ca stiti ce e ala un tabel

), cu n linii si m coloane. M poate sa fie egal cu N, astfel, matricea devenind patratica.
Cum am spus mai sus, matricea este formata din linii si coloane, liniile merg de la stanga la dreapta iar coloanele merg de sus in jos.
Foarte impostant, si trebuie retinut, ca atunci cand declarati o matrice bidimensionala, prima data se specifica numarul de randuri, dupa care numarul de coloane.
Exemple:
int chestie[55][77];
float chestiee[66][3];
[55] si [66] reprezinta numarul de linii, iar [77] si [3] reprezinta nmarul de coloane.
Am sa va prezint mai jos, cum arata o matrice bidimensionala.
a00 a01 a02 a03 a04 a05
a10 a11 a12 a13 a14 a15
a20 a21 a22 a23 a24 a25
a30 a31 a32 a33 a34 a35
a40 a41 a42 a43 a44 a45
a50 a51 a52 a53 a54 a55
O astfel de matrice se declara astfel : int xxx[6][6];
Cred ca va amintiti cum am zis ca se initializeaza o matrice (cum se da valori la creare). Daca nu va amintiti va spun eu : dupa ce am declarat matrice, se pune semnul egal (=) iar intre acolade, cu virgula intre ele, se scriu valorile.
Nici aici nu este foarte diferit. Nou este faptul ca de aceasta data, valorile se vor scrie pe linie. Va intrebati ce vreau sa zic...Priviti exemplul de mai jos.
Exemplu:
int tab[3][2]={{44,55},
{11,88},
{33,77}};
Ati inteles? Deci, dupa ce declarati matricea, dupa semnul egal (=), se deschide o acolda (acolada principala), dupa care in acolade se scriu valorile viecarei linii si se inchide acolada principala. Nu o sa va povestesc mai mult pentru ca eu consider ca din exemplul dat se intelege destul de bine.
Acum haideti sa afisam valorile unei matrice. Vom face acest lucru cu ajutorul a doua cicluri for.
Exemplu:
#include
int main()
{
int linie, coloana;
int tab[2][4]={{2,3,4,5},
{6,7,8,9}};
for(linie=0;linie<2;linie++)
for(coloana=0;coloana<4;coloana++)
printf("linia %d , coloana %d = %d\n",linie,coloana,tab[linie][coloana]);
return 0;
}
Dupa cum puteti vedea, nu este foarte diferit de modul de afisare al matricei unidimansionale. Aici am folosit doua cicluri for, lucru care era lesne de inteles.
Primul ciclu merge pe elementele linilor, iaral doilea ciclu merge pe elementele coloanelor.
Deocamdata atat am avut sa va spun despre matricele bidimensionale (tabele).
III Matrice Tridimensionale
In sfarsit am ajuns la ultimul capitol al acestei scurte (dar educative, as putea sa adaug) lectii.
Aceasta parte este un pic mai greoaie, nu prin timpul de lucru, ci prin capacitatea fiecaruia de a intelege.
Este posibil sa nu intelegeti de prima data acest tip de matrice, dar asta nu este o problema. Va sfatuiesc sa cititi de cate ori este nevoie pentru a intelege, si sa fiti foarte atenti la exemple.
Pentru incepu sa descriu cum arata o astfel de matrice, si cum trebuie interpretata : ea ar putea avea forma mai multor pagini, iar pe fiecare pagina se afla cate o matrice bidimensionala.
In continuare va voi prezenta modul de initializare a acestui tip de matrice. O sa dau mai multe exemple, pentru a va usura munca.
Exemple :
int mattri[2][3][4]={
{ {1,2,3,4},
{5,6,7,8},
{9,10,11,12} },
{ {13,14,15,16},
{17,18,19,20},
{21,22,23,24} }
};
int mattri[3][2][5]={
{ {1,2,3,4,5},
{6,7,8,9,10} }
{ {11,12,13,14,15},
{16,17,18,19,20} }
{ {21,22,23,24,25},
{26,27,28,29,30} }
};
Ati inteles ideea?
Sa incep cu ultimul element : [4] si [5] reprezinta numarul de elemente de pe fiecare rand (linie); [3] si [2] (din mijloc) reprezinta numarul de coloane; [2] si [3] reprezinta numarul de linii.
Nu stiu daca ati priceput, dar nu e nici o problema, cu timpul veti intelege.
Ma simt indatorat, ca folosind unul din exemplele de mai sus, sa va prezint un program care afiseaza o astfel de matrice.
Exemplu:
#include
int main()
{
int i,j,k;
int mattri[2][3][4]={
{ {1,2,3,4},
{5,6,7,8},
{9,10,11,12} },
{ {13,14,15,16},
{17,18,19,20},
{21,22,23,24} }
};
for(i=0;i<2;i++)
for(j=0;j<3;j++)
for(k=0;k<4;k++)
printf("matricea[%d][%d][%d] = %d\n",i,j,k,mattri[i][j][k]);
return 0;
}
Lucruri noi, care necesita explicatii, banuiesc ca nu sunt.
Inca o data va spun si ma repet, daca nu ati inteles de prima data, nu va panicati, mai este timp.
Trebuie sa adaug ca aceasta a fost doar o "scurta" introducere in ceea ce se cheama matrice. O sa revin in lectii viitoare (daca se poate) cu aprofundari pe aceasta tema si unele metoade de sortere, explicate.
Acestea fiind zise, va urez un studiu placut !!! Sa cititi aceasta lectie de cate ori este nevoie, iar in continuare va las cu niste programele, pe care va rog sa la studiati.
I Matrice Unidimensionale
Exemplul 1 : Afisarea elementelor unei matrice cu ajutorul ciclului FOR.
#include
int main()
{
int chifle[5]={2,1,4,5,6};
int k;
for(k=0;k<5;k++)
printf("chifle[%d] = %d\n",k,chifle[k]);
return 0;
}
Privit programul, compilati-l si incercati sa folositi WHILE in loc de FOR.
Exemplul 2 : Afisarea elementelor unor matrice folosind o functie.
#include
void afiseaza(int apar[], int n)
{
int k;
fot (k=0;k printf("%d\n",apar[k]);
}
int main(void)
{
int apartamente[7]={1,2,3,4,5,6,7};
int castraveti[4]={4,9,2,88};
int masline[2]={100,200};
afiseaza(apartemente, 7);
afiseaza(castraveti, 4);
afiseaza(masline, 2);
return 0;
}
Programul nu e foarte complicat, de fapt seamana cu cel prezentat mai sus.
Incercati sa va jucati cu el si sa il intelegeti.
II Matrice Bidimensionale
Exemplul 1 : Afisarea elementelor unei matrice bidimensionale folosint o functie.
#include
void afiseaza(int apar[][5], int n)
{
int x,z;
for(x=0;x for(z=0;z<5;z++)
printf("tabel[%d][%d] = %d\n",x,z,apar[x][z]);
}
int main(void)
{
int apartamente[4][5]={{2,3,4,5,6},
{1,2,3,4,5},
{4,5,6,7,8},
{4,5,6,7,1}};
afiseaza(apartamente, 4);
return 0;
}
Acest program nu este foarte diferit de cel de mai sus.
Nu o sa explic nimic din el, va las pe voi sa va dati seama cum functioneaza.
III Matrice Tridimensionale
Exemplul 1 : Afisarea elementelor unei matrice tridimensionale folosint o functie.
#include
void afiseaza(int apar[][3][4], int i, int j, int k)
{
int x,y,z;
for(x=0;x for(y=0;y for(z=0;z printf("apartamente[%d][%d][%d] = %d\n",x,y,z,apar[x][y][z]);
}
int main(void)
{
int apartamente[2][3][4]={
{ {1,2,3,4},
{5,6,7,8},
{9,10,11,12} },
{ {13,14,15,16},
{17,18,19,20},
{21,22,23,24} }
};
afiseaza(apartamente,2,3,4);
return 0;
}
Cam asta a fost tot !!!
©oxi