DVODIMENZIONALNI NIZOVI - MATRICE U PROGRAMSKOM JEZIKU C
Pretpostavimo da želimo da ispišemo niz od prvih 100 prirodnih brojeva, ali da budu ispisani u 10 redova i 10 kolona, kao na slici ispod:
Da bi smo ovo ispisali koristimo ugnježdenu for petlju:
Da bi ove brojeve stavili u memoriju, morali bi smo da uvedemo ili 10 nizova po 10 elemenata ili ako želimo da sve podatke upamtimo u jednoj promenljivoj, onda bi upotrebili dvodimenzioni niz(matricu)
int matrica[ 10 ][ 10 ] ;
Ovo je matrica celih brojeva koja ima 10 redova i 10 kolona.
Pristup određenom elementu koji se recimo, nalazi u 3 redu i 5. koloni bi bio:
matrica[3][5]
Prethodni primer bi bio malo izmenjen
int matrica[ 10 ][ 10 ] ;
Ovo je matrica celih brojeva koja ima 10 redova i 10 kolona.
Pristup određenom elementu koji se recimo, nalazi u 3 redu i 5. koloni bi bio:
matrica[3][5]
Prethodni primer bi bio malo izmenjen
int matrica[10][10];
for( int i = 0; i<10; i++)
{
for(int j = 0; j<10; j++)
{
int a=10 * i +(j+1);
matrica[i][j]=a;
printf("%2d ",a);
}
cout<<endl;//Nov red
}
for( int i = 0; i<10; i++)
{
for(int j = 0; j<10; j++)
{
int a=10 * i +(j+1);
matrica[i][j]=a;
printf("%2d ",a);
}
cout<<endl;//Nov red
}
U svakom ciklusu izračunat broj a se smešta u matricu u i-ti red i j-tu kolonu.
Ukoliko unapred znamo brojeve koje treba staviti u matricu
Npr. ocene iz nekih predmeta za više učenika mogle bi se smestiti u matricu:
int ocene[3 ][ 5]={ {2,3,2,2,4,5,5,4}, {2,3,2,2,4,5,5,4}, {2,3,2,2,4,5,5,4} }
U uglastim zagradama je potrebno staviti dimenzije, iako su one određene sa nizovima kojim smo inicijalizovali matricu.
Dakle, 3 reda i 8 kolona. Ovde se može zaključiti da je matrica zapravo niz elemenata gde su ti elementi takođe nizovi.
Svaka kolona i red imaju svoj indeks pomoću koga se može pristupiti elementu matrice. U prethodnom primeru redovi su numerisani indeksima 0-2, a kolone indeksima 0-7.
Primer: Izračunati prosečnu ocenu svih učenika iz prethodno zadatih nizova
Da bi izračunali prosek moramo prethodno sabrati sve elemente matrice i podeliti sa brojem elemenata. Potrebna nam je ugnježdena for petlja:
void prosek(){
int ocene[3][8]={ {2,3,2,2,4,5,5,4}, {2,5,2,5,4,5,5,4}, {2,4,4,2,4,3,5,4} };
int zbir=0;
double prosek;
for(int i=0; i<3; i++){
for(int j=0; j<8; j++){
zbir=zbir+ocene[i][j];
cout<<ocene[i][j]<<" ";
}
cout<<endl;
}
cout<<"Prosek:"<<endl;
prosek=zbir/(3.0*8.0);
cout<<prosek;
}
Posle pokretanja
Primer: Izračunati prosečnu ocenu za svakog učenika ponaosob iz prethodno zadatih nizova
Da bi izračunali prosek po svakom učeniku, onda moramo posebno sabrati svaki red ocena i podeliti sa brojem elemenata svakog unutrašnjeg niza jer red svaki ocena predstavlja ocene jednog učenika. Prosek će sada biti niz brojeva:
int ocene[3][8]={ {2,3,2,2,4,5,5,4}, {2,5,2,5,4,5,5,4}, {2,4,4,2,4,3,5,4} };
double zbir=0;
double prosek[3];
for(int i=0; i<3; i++){
for(int j=0; j<8; j++){
zbir=zbir+ocene[ i ][ j ];
cout<<ocene[ i ][ j ]<<" ";
}
prosek[ i ]=zbir/8;
zbir=0;
cout<<endl;
}
cout<<"Prosek:"<<endl;
for(int i=0; i<3; i++)
cout<< i +1<<" . "<<prosek[ i ]<<endl;
Posle pokretanja:
Učitavanje matrice
U prethodnom primeru, matrica ocena je bila zadata. Da bi korisnik učitao matricu, prethodno treba da se učita broj redova i kolona.
int matrica[10][10],m,n;
cin>>m>>n;
for( int i = 0; i<m; i++)
{
for(int j = 0; j<n; j++)
{
cin>>matrica[i][j];
}
}
U prethodnom primeru, matrica ocena je bila zadata. Da bi korisnik učitao matricu, prethodno treba da se učita broj redova i kolona.
int matrica[10][10],m,n;
cin>>m>>n;
for( int i = 0; i<m; i++)
{
for(int j = 0; j<n; j++)
{
cin>>matrica[i][j];
}
}
Primer: Skakač napada
Učitati poziciju skakača u šahu m i n i odrediti koja polja skakač napada. Ako su kolone obeležene 1-8 a redovi A-H, obeležiti šiframa polja koja skakač napada. Ostala polja obeležiti zvezdicom, osim polja gde se nalazi skakač. Ulaz Red i kolona koji predstavljaju poziciju skakača 1<=m<=8, 1<=n<=8 Izlaz Šifre polja na onim poljima koji skakač napada, prazno na polju gde se nalazi skakač, zvezdice na ostalim |
Uputstvo:
Da bi smo ispisali odgovarajući tekst na odgovarajuće polje koristićemo matricu čiji su elementi tipa string. Pošto je šahovska tabla dimenzija 8*8, a indeks u matrici počinje od nule, kreiraćemo matricu reda 9*9. string tabla[9][9]; Treba redom proći kroz sve elemente matrice. Pošto je poslednji red u matrici prvi red u šahovskoj tabli treba formirati ugnježdenu for petlju na sledeći način: for(int i=8; i>=1; i--) { for(int j=1; j<=8; j++) { ... } } Kada se naiđe na poziciju i=m, j=n, odatle treba ispisati šifre na poljima koju napada skakač. Npr. pozicija i=m+2, j=n-1 i j=n+1 itd. |
Primer:
Ulaz 4 4 Izlaz |
Prethodno
|< Stringovi u C/C++ jeziku |
Sledeće
Dvodimenzioni dinamički nizovi-matrice >| |