DVODIMENZIONALNI NIZOVI - MATRICE U PROGRAMSKOM JEZIKU C++
Dvodimenzionalni nizovi, ili matrice, predstavljaju ključni koncept u C++ programiranju, omogućavajući efikasno skladištenje i manipulaciju podacima u tabelarnom formatu. Ova stranica pruža sveobuhvatan uvod u rad sa dvodimenzionalnim nizovima, uključujući deklaraciju, inicijalizaciju i praktične primere koji ilustruju njihovu primenu u realnim situacijama.
Primer 1: Ispisivanje po redovima i kolonama
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:
#include <iostream>
using namespace std;
// Program za ispis prvih 100 prirodnih brojeva u 10 redova i 10 kolona
int main() {
for (int i = 0; i < 10; i++) {
return 0; // Kraj programa
}
using namespace std;
// Program za ispis prvih 100 prirodnih brojeva u 10 redova i 10 kolona
int main() {
for (int i = 0; i < 10; i++) {
// i predstavlja red (počinje od 0 i ide do 9)
for (int j = 0; j < 10; j++) {
cout << endl; // Prelazak u novi red nakon što se završi kolona
}for (int j = 0; j < 10; j++) {
// j predstavlja kolonu (počinje od 0 i ide do 9)
int broj = 10 * i + (j + 1); // Računanje broja u zavisnosti od reda i kolone
cout << broj << " "; // Ispis broja u istoj liniji
}int broj = 10 * i + (j + 1); // Računanje broja u zavisnosti od reda i kolone
cout << broj << " "; // Ispis broja u istoj liniji
cout << endl; // Prelazak u novi red nakon što se završi kolona
return 0; // Kraj programa
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
#include <iostream>
using namespace std;
// Program za popunjavanje i ispis dvodimenzionalnog niza (matrice)
int main() {
using namespace std;
// Program za popunjavanje i ispis dvodimenzionalnog niza (matrice)
int main() {
int matrica[10][10]; // Deklaracija matrice sa 10 redova i 10 kolona
// Popunjavanje matrice
for (int i = 0; i < 10; i++) {
// Ispis matrice
for (int i = 0; i < 10; i++) {
return 0; // Kraj programa
}
// Popunjavanje matrice
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
}
matrica[i][j] = 10 * i + (j + 1); // Računanje vrednosti i smeštanje u matricu
}// Ispis matrice
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
cout << endl; // Prelazak u novi red
}
cout << matrica[i][j] << " "; // Ispis elemenata u redu
}cout << endl; // Prelazak u novi red
return 0; // Kraj programa
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.
Da bi izračunali prosek moramo prethodno sabrati sve elemente matrice i podeliti sa brojem elemenata. Potrebna nam je ugnježdena for petlja:
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.
Da bi izračunali prosek moramo prethodno sabrati sve elemente matrice i podeliti sa brojem elemenata. Potrebna nam je ugnježdena for petlja:
Primer 2: Izračunati prosečnu ocenu svih učenika iz prethodno zadatih nizova
#include <iostream>
using namespace std;
// Funkcija za izračunavanje prosečne ocene svih učenika
void prosek() {
int main() {
using namespace std;
// Funkcija za izračunavanje prosečne ocene svih učenika
void prosek() {
int ocene[3][8] = { {2, 3, 2, 2, 4, 5, 5, 4}, // Ocene prvog učenika
{2, 5, 2, 5, 4, 5, 5, 4}, // Ocene drugog učenika
{2, 4, 4, 2, 4, 3, 5, 4} }; // Ocene trećeg učenika
int zbir = 0; // Promenljiva za sabiranje svih ocena
double prosek; // Promenljiva za čuvanje proseka
// Petlja za prolazak kroz sve ocene u matrici
for (int i = 0; i < 3; i++) {
cout << "Prosek: ";
prosek = zbir / (3.0 * 8.0); // Izračunavanje proseka (3 reda x 8 ocena)
cout << prosek; // Ispis proseka
}{2, 5, 2, 5, 4, 5, 5, 4}, // Ocene drugog učenika
{2, 4, 4, 2, 4, 3, 5, 4} }; // Ocene trećeg učenika
int zbir = 0; // Promenljiva za sabiranje svih ocena
double prosek; // Promenljiva za čuvanje proseka
// Petlja za prolazak kroz sve ocene u matrici
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 8; j++) {
cout << endl; // Novi red nakon svakog reda ocena
}
zbir = zbir + ocene[i][j]; // Dodavanje trenutne ocene u zbir
cout << ocene[i][j] << " "; // Ispis trenutne ocene
}cout << ocene[i][j] << " "; // Ispis trenutne ocene
cout << endl; // Novi red nakon svakog reda ocena
cout << "Prosek: ";
prosek = zbir / (3.0 * 8.0); // Izračunavanje proseka (3 reda x 8 ocena)
cout << prosek; // Ispis proseka
int main() {
prosek(); // Poziv funkcije za izračunavanje proseka
return 0; // Kraj programa
}
return 0; // Kraj programa
Objašnjenje:
1. Deklaracija matrice:
2. Prolazak kroz matricu:
3. Izračunavanje proseka:
4. Ispis:
- Matrica ocene[3][8] sadrži ocene tri učenika, svaki sa po osam ocena.
2. Prolazak kroz matricu:
- Ugnježdena for petlja prolazi kroz sve redove i kolone matrice.
- Svaka ocena se sabira u promenljivu zbir.
3. Izračunavanje proseka:
- Prosek se računa deljenjem ukupnog zbira ocena sa brojem svih elemenata matrice (3 x 8).
4. Ispis:
- Ocene se ispisuju red po red, a nakon prolaska kroz sve ocene, ispisuje se prosečna ocena.
Posle pokretanja
Primer 3: 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:
#include <iostream>
using namespace std;
// Funkcija za izračunavanje prosečne ocene za svakog učenika
void proseciPoUceniku() {
int main() {
using namespace std;
// Funkcija za izračunavanje prosečne ocene za svakog učenika
void proseciPoUceniku() {
int ocene[3][8] = { {2, 3, 2, 2, 4, 5, 5, 4}, // Ocene prvog učenika
{2, 5, 2, 5, 4, 5, 5, 4}, // Ocene drugog učenika
{2, 4, 4, 2, 4, 3, 5, 4} }; // Ocene trećeg učenika
double zbir = 0; // Promenljiva za sabiranje ocena jednog učenika
double prosek[3]; // Niz za čuvanje proseka za svakog učenika
// Petlja za prolazak kroz ocene svakog učenika
for (int i = 0; i < 3; i++) {
// Ispis proseka za svakog učenika
cout << "Proseci po učeniku:" << endl;
for (int i = 0; i < 3; i++) {
}{2, 5, 2, 5, 4, 5, 5, 4}, // Ocene drugog učenika
{2, 4, 4, 2, 4, 3, 5, 4} }; // Ocene trećeg učenika
double zbir = 0; // Promenljiva za sabiranje ocena jednog učenika
double prosek[3]; // Niz za čuvanje proseka za svakog učenika
// Petlja za prolazak kroz ocene svakog učenika
for (int i = 0; i < 3; i++) {
// Prolazak kroz sve ocene trenutnog učenika
for (int j = 0; j < 8; j++) {
prosek[i] = zbir / 8; // Računanje proseka za trenutnog učenika
zbir = 0; // Resetovanje zbira za sledećeg učenika
cout << endl; // Novi red nakon ocena jednog učenika
}for (int j = 0; j < 8; j++) {
zbir += ocene[i][j]; // Dodavanje trenutne ocene u zbir
cout << ocene[i][j] << " "; // Ispis trenutne ocene
}cout << ocene[i][j] << " "; // Ispis trenutne ocene
prosek[i] = zbir / 8; // Računanje proseka za trenutnog učenika
zbir = 0; // Resetovanje zbira za sledećeg učenika
cout << endl; // Novi red nakon ocena jednog učenika
// Ispis proseka za svakog učenika
cout << "Proseci po učeniku:" << endl;
for (int i = 0; i < 3; i++) {
cout << "Učenik " << i + 1 << ": " << prosek[i] << endl;
}int main() {
proseciPoUceniku(); // Poziv funkcije za izračunavanje proseka po učeniku
return 0; // Kraj programa
}
return 0; // Kraj programa
Objašnjenje:
1. Deklaracija matrice i nizova:
2. Računanje proseka:
3. Ispis proseka:
- Matrica ocene[3][8] sadrži ocene učenika.
- Niz prosek[3] čuva prosečne ocene svakog učenika.
2. Računanje proseka:
- Prva for petlja prolazi kroz učenike.
- Unutrašnja petlja prolazi kroz ocene trenutnog učenika i sabira ih u zbir.
- Nakon računanja proseka za jednog učenika, zbir se resetuje.
3. Ispis proseka:
- Na kraju programa ispisuju se proseci svakog učenika.
Posle pokretanja:
Učitavanje matrice
U prethodnom primeru, matrica ocena je bila zadata. Da bi korisnik mogao samostalno da unese matricu, potrebno je prvo učitati broj redova i kolona matrice. Ovaj proces se može postići sledećim koracima:
int matrica[10][10], m, n;
cin >> m >> n; // Učitavanje dimenzija matrice
for (int i = 0; i < m; i++) {
cin >> m >> n; // Učitavanje dimenzija matrice
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
}
cin >> matrica[i][j]; // Učitavanje elemenata matrice
}Kompletno rešenje:
#include <iostream>
using namespace std;
// Funkcija za unos matrice od strane korisnika
void ucitajMatricu() {
int main() {
using namespace std;
// Funkcija za unos matrice od strane korisnika
void ucitajMatricu() {
int matrica[10][10]; // Matrica maksimalne veličine 10x10
int m, n; // Broj redova i kolona
cout << "Unesite broj redova i kolona matrice (maksimalno 10x10): ";
cin >> m >> n; // Učitavanje dimenzija matrice
if (m > 10 || n > 10 || m <= 0 || n <= 0) {
cout << "Unesite elemente matrice:" << endl;
for (int i = 0; i < m; i++) {
cout << "Uneta matrica je:" << endl;
for (int i = 0; i < m; i++) {
}int m, n; // Broj redova i kolona
cout << "Unesite broj redova i kolona matrice (maksimalno 10x10): ";
cin >> m >> n; // Učitavanje dimenzija matrice
if (m > 10 || n > 10 || m <= 0 || n <= 0) {
cout << "Nevalidne dimenzije matrice!" << endl;
return; // Završetak funkcije ako su dimenzije nevalidne
}return; // Završetak funkcije ako su dimenzije nevalidne
cout << "Unesite elemente matrice:" << endl;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
}
cin >> matrica[i][j]; // Učitavanje elementa matrice
}cout << "Uneta matrica je:" << endl;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << endl; // Novi red za sledeći red matrice
}
cout << matrica[i][j] << " "; // Ispis elementa matrice
}cout << endl; // Novi red za sledeći red matrice
int main() {
ucitajMatricu(); // Poziv funkcije za unos matrice
return 0; // Kraj programa
}
return 0; // Kraj programa
Primer 5: 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 |
Rešenje:
#include <iostream>
#include <string>
using namespace std;
int main() {
#include <string>
using namespace std;
int main() {
int m, n;
string tabla[9][9]; // Matrica za šahovsku tablu
cout << "Unesite poziciju skakača (red i kolona): ";
cin >> m >> n;
for (int i = 8; i >= 1; i--) {
cout << "Šahovska tabla:" << endl;
for (int i = 8; i >= 1; i--) {
return 0;
}
string tabla[9][9]; // Matrica za šahovsku tablu
cout << "Unesite poziciju skakača (red i kolona): ";
cin >> m >> n;
for (int i = 8; i >= 1; i--) {
for (int j = 1; j <= 8; j++) {
}
if (i == m && j == n) {
(i == m - 2 && (j == n - 1 || j == n + 1)) ||
(i == m + 1 && (j == n - 2 || j == n + 2)) ||
(i == m - 1 && (j == n - 2 || j == n + 2))) {
}
tabla[i][j] = " "; // Polje skakača ostaje prazno
} else if ((i == m + 2 && (j == n - 1 || j == n + 1)) ||(i == m - 2 && (j == n - 1 || j == n + 1)) ||
(i == m + 1 && (j == n - 2 || j == n + 2)) ||
(i == m - 1 && (j == n - 2 || j == n + 2))) {
tabla[i][j] = "S"; // Polje koje skakač napada
} else {
tabla[i][j] = "*"; // Ostala polja su zvezdice
}cout << "Šahovska tabla:" << endl;
for (int i = 8; i >= 1; i--) {
for (int j = 1; j <= 8; j++) {
cout << endl; // Novi red nakon svakog reda table
}
cout << tabla[i][j] << " ";
}cout << endl; // Novi red nakon svakog reda table
return 0;
Objašnjenje:
- Unos korisnika: Unose se red i kolona na kojima se nalazi skakač.
- Logika šahovske table:
- Matrica tabla predstavlja šahovsku tablu.
- Ugnježdene petlje prolaze kroz sve redove i kolone table.
- Određuju se polja koja skakač napada pomoću pravila kretanja u šahu.
- Ispis rezultata: Prikazuje šahovsku tablu sa označenim poljima:
- " " za polje na kojem je skakač.
- "S" za polja koja skakač napada.
- "*" za ostala polja.
Zadaci za vežbanje
Kako biste bolje razumeli rad sa dvodimenzionalnim nizovima u C++, pripremili smo nekoliko praktičnih zadataka koji će vam pomoći da savladate osnovne koncepte.
1. Kreiranje tabele za evidenciju ocena učenika
Opis zadatka:
Napravite program koji koristi dvodimenzionalni niz za čuvanje ocena učenika iz nekoliko predmeta.
Napravite program koji koristi dvodimenzionalni niz za čuvanje ocena učenika iz nekoliko predmeta.
- Niz treba da ima redove koji predstavljaju učenike i kolone koje predstavljaju predmete.
- Program treba da omogući unos ocena, ispis ocena svakog učenika i računanje prosečne ocene za svakog učenika i svaki predmet.
Unesite ocene za 3 učenika i 4 predmeta:
Učenik 1: 5 4 3 5
Učenik 2: 4 3 4 4
Učenik 3: 5 5 5 4
Prosečna ocena po učeniku:
Učenik 1: 4.25
Učenik 2: 3.75
Učenik 3: 4.75
Prosečna ocena po predmetu:
Predmet 1: 4.67
Predmet 2: 4.00
Predmet 3: 4.00
Predmet 4: 4.33
Učenik 1: 5 4 3 5
Učenik 2: 4 3 4 4
Učenik 3: 5 5 5 4
Prosečna ocena po učeniku:
Učenik 1: 4.25
Učenik 2: 3.75
Učenik 3: 4.75
Prosečna ocena po predmetu:
Predmet 1: 4.67
Predmet 2: 4.00
Predmet 3: 4.00
Predmet 4: 4.33
2. Izračunavanje prosečne vrednosti elemenata u matrici
Opis zadatka:
Napravite program koji koristi dvodimenzionalni niz za unos brojeva u matricu dimenzija N×MN \times MN×M.
Primer ulaza i izlaza:
Napravite program koji koristi dvodimenzionalni niz za unos brojeva u matricu dimenzija N×MN \times MN×M.
- Program treba da izračuna prosečnu vrednost svih elemenata u matrici.
- Dodajte opciju za unos dimenzija matrice od strane korisnika.
Primer ulaza i izlaza:
Unesite dimenzije matrice (redovi i kolone): 2 3
Unesite elemente matrice:
1 2 3
4 5 6
Prosečna vrednost elemenata matrice: 3.5
Unesite elemente matrice:
1 2 3
4 5 6
Prosečna vrednost elemenata matrice: 3.5
3. Implementacija igre "Iks-Oks" (Tic-Tac-Toe)
Opis zadatka:
Kreirajte jednostavnu verziju igre "Iks-Oks" za dva igrača.
Kreirajte jednostavnu verziju igre "Iks-Oks" za dva igrača.
- Igra se odvija na matrici 3×3.
- Program treba da omogući igračima da naizmenično unose poteze, prikaže trenutni status table i proveri da li je neko pobedio ili je igra završena nerešeno.
Trenutno stanje table:
_ _ _
_ _ _
_ _ _
Igrač 1 (X) bira polje (red, kolona): 1 1
Trenutno stanje table:
X _ _
_ _ _
_ _ _
Igrač 2 (O) bira polje (red, kolona): 1 2
Trenutno stanje table:
X O _
_ _ _
_ _ _
Igrač 1 (X) bira polje (red, kolona): 2 2
...
Igrač 1 (X) je pobedio!
_ _ _
_ _ _
_ _ _
Igrač 1 (X) bira polje (red, kolona): 1 1
Trenutno stanje table:
X _ _
_ _ _
_ _ _
Igrač 2 (O) bira polje (red, kolona): 1 2
Trenutno stanje table:
X O _
_ _ _
_ _ _
Igrač 1 (X) bira polje (red, kolona): 2 2
...
Igrač 1 (X) je pobedio!
Višedimenzionalni nizovi – Proširenje koncepta
Dvodimenzionalni nizovi su korisni za predstavljanje matrica, tabela i sličnih struktura. Međutim, ponekad su potrebni složeniji modeli podataka, gde dolazimo do višedimenzionalnih nizova, poput trodimenzionalnih nizova.
Šta su trodimenzionalni nizovi?Trodimenzionalni nizovi su nizovi sa tri indeksa. Možemo ih zamisliti kao niz "matrica" ili kao prostornu strukturu, poput kocke, gde svaki element ima:
Šta su trodimenzionalni nizovi?Trodimenzionalni nizovi su nizovi sa tri indeksa. Možemo ih zamisliti kao niz "matrica" ili kao prostornu strukturu, poput kocke, gde svaki element ima:
- red,
- kolonu,
- "dubinu".
int niz[dim1][dim2][dim3];
Primer:
int trodimenzionalniNiz[2][3][4];
Ovaj niz ima:
- 2 "sloja" (ili dubine),
- 3 reda po sloju,
- 4 kolone u svakom redu.
- Podataka o temperaturi u različitim gradovima (sloj = grad, red = dan, kolona = vreme).
- Boja piksela slike u RGB formatu (sloj = komponenta boje R, G, B).
#include <iostream>
using namespace std;
int main() {
}
using namespace std;
int main() {
// Deklaracija trodimenzionalnog niza za temperature (grad, dan, vreme)
float temperature[2][3][4] = {
// Prikaz temperature za drugi grad, prvi dan, drugo vreme
cout << "Temperatura u drugom gradu, prvog dana, u drugom vremenu: "
return 0;float temperature[2][3][4] = {
{ {22.5, 23.1, 21.8, 22.0}, {24.2, 25.0, 23.5, 24.1}, {19.8, 20.0, 18.7, 19.5} },
{ {28.5, 27.9, 29.0, 28.7}, {26.5, 25.8, 27.0, 26.9}, {30.0, 31.2, 29.8, 30.5} }
};{ {28.5, 27.9, 29.0, 28.7}, {26.5, 25.8, 27.0, 26.9}, {30.0, 31.2, 29.8, 30.5} }
// Prikaz temperature za drugi grad, prvi dan, drugo vreme
cout << "Temperatura u drugom gradu, prvog dana, u drugom vremenu: "
<< temperature[1][0][1] << "°C" << endl;
}
Rezultat:
Temperatura u drugom gradu, prvog dana, u drugom vremenu: 27.9°C
Dalje učenje
Ako želite detaljnije da naučite o trodimenzionalnim nizovima i njihovoj primeni, posetite našu stranicu:
👉 Detaljno objašnjenje trodimenzionalnih nizova
Ako želite detaljnije da naučite o trodimenzionalnim nizovima i njihovoj primeni, posetite našu stranicu:
👉 Detaljno objašnjenje trodimenzionalnih nizova
Prethodno
|< Stringovi u C/C++ jeziku |
Sledeće
Dvodimenzioni dinamički nizovi-matrice >| |