» Utilizator
Salut, vizitatorule!

SkullBox este o comunitate formata din programatori si administratori de sisteme sau retele care iti sta la dispozitie cand ai o problema legata de calculatoare. Daca esti un utilizator existent, autentifica-te.

Daca nu te-ai inregistrat inca pe forum, alatura-te noua astfel marind comunitatea si ajutandu-i pe cei care au nevoie de informatii.

Daca te-ai inregistrat dar inca nu ai primit codul de activare, il poti cere aici.




Autentifica-te cu numele de utilizator si parola pentru a putea posta pe forum sau pentru a accesa ariile disponibile doar utilizatorilor inregistrati.
 » Concurs
GameDev
 » Statistici
  • 46957 de mesaje.
  • 5871 de topicuri.
  • 825 de utilizatori.
  •  
  • cdoryn74 e ultimul utilizator inregistrat.
[Detalii]

 » Parteneri » Sponsori

 » Recomandăm
HostVision

» Avem un concurs pentru bloggeri si forumisti. Participi? «
Pagini: [1]
Print
[Curs C] - Matrice [1480 afisari]
oxi
*


Mesaje: 236
OfflineOffline


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 :
Code:
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
  • (zero).
Deci matricea va fi mai lunga cu o valoare decat numarul de elemente declarat de voi.

Exemple:
Code:
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:
Code:
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:
Code:
#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:
Code:
#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 Smile ), 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:
Code:
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.

Code:
     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:
Code:
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:
Code:
#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 :
Code:
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:
Code:
#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.
                     

Code:
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
Logged

Daca un cuvant este scris gresit in dictionar, cum ne dam seama ?
28-02-2007, 06:32 
 
Andreya
*


Mesaje: 277
OfflineOffline


Frumos tuturial  Smile  Smile la cat mai multe!!!!  Am facut si yo la fac..matrici bidimensionale si multidimensionale si nu prea le-am inteles,imi place cum explici tu aici.  Smile  Smile
Logged
17-03-2007, 21:14 
 
oxi
*


Mesaje: 236
OfflineOffline


mersi frumos de apreciere ! (a fost primul meu "tutorial")
Logged

Daca un cuvant este scris gresit in dictionar, cum ne dam seama ?
17-03-2007, 22:21 
 
Agkelos
*


Mesaje: 6024
OfflineOffline

WWW

Quote
Am facut si yo la fac..matrici bidimensionale si multidimensionale si nu prea le-am inteles,imi place cum explici tu aici.

Aici se vede diferenta intre un om care face ceva pentru ca e platit si unul care o face din pasiune Winking
Logged

Blog | Twitter

De nu va zice omul intru inima sa "Eu singur si Dumnezeu suntem in lume" nu va avea odihna. - Avva Alonie
17-03-2007, 22:49 
 
Andreya
*


Mesaje: 277
OfflineOffline


Asa este  Big grin
Logged
18-03-2007, 09:40 
 
tot_zeu
*


Mesaje: 152
OfflineOffline


Andreea..eu sunt doar intra noua si am facut decat matricea unidimensionala si ceea bidiminesionala..dar cum sunt genul care e mereu mai inainte in acest domeniu...o sa incerc sa te ajut..doar apeleaza-ma!
Logged
01-05-2007, 19:42 
 
tercot
*


Mesaje: 1256
OfflineOffline


Sal'tare! Se pare ca la fiecare lectie se iveste cate o problema la mine..... incerc sa compilez codul
Code:
#include
   
   void afiseaza(int apar[], int n)
   {
      int k;
      fot (k=0;k        printf("%dn",apar[k]);
   }
   void main(void)
   {
      int apartamente[7]={1,2,3,4,5,6,7};
      afiseaza(apartemente, 7);
   }

si imi apar urmatoarele erori:
Code:
matric.c: In function `afiseaza':
matric.c:6: error: syntax error before ';' token
matric.c:6: error: syntax error before ')' token
matric.c: In function `main':
matric.c:12: error: `apartemente' undeclared (first use in this function)
matric.c:12: error: (Each undeclared identifier is reported only once
matric.c:12: error: for each function it appears in.)

Stiti cumva care este greseala...?multumesc!
Logged

Crezi in Dumnezeu si nu vei fi dezamagit.
Pasarila's Blog
20-07-2007, 08:20 
 
AnaKonD
*


Mesaje: 461
OfflineOffline


Din pacate nu esti atent si am impresia ca ai trecut cam repede prin procesul de invatare al bazei C++ si a cerintelor compilatorului.Daca am dreptate atunci vei avea foarte des astfel de probleme care te vor trage inapoi.Uite codul corect (care nu da erori la compilarea cu Mingw32) :
Code:

#include
   
   void afiseaza(int apar[], int n)
   {
      int k;
      for (k=0;k        printf("%dn",apar[k]);
   }
   int main()
   {
      int apartamente[7]={1,2,3,4,5,6,7};
      afiseaza(apartamente, 7);
   }


Bafta!
Logged

"Sa nu te opresti niciodata din a-ti pune intrebari, curiozitatea sta la baza existentei."(Albert Einstein)
cross the line
20-07-2007, 09:05 
Pages: [1]
Print
SkullBox Forum  |  Development  |  Java / C / C++ / C# (Moderators: AnaKonD, astan)  |  Topic: [Curs C] - Matrice
Jump to: