DVODIMENZIONALNI NIZOVI - MATRICE U PROGRAMSKOM JEZIKU C++
Sadržaj stranice
Dobrodošli na stranicu posvećenu dvodimenzionalnim i višedimenzionalnim nizovima u C++! Ova stranica nudi sve ključne informacije, primere koda i praktične savete o radu sa matricama i višedimenzionalnim strukturama podataka. Pomoću tabele sadržaja možete brzo preskočiti na interesantne sekcije i pronaći sadržaj koji vas zanima.
Uvod
Formiranje matrice
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:
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++) {
for (int j = 0; j < 10; j++) {
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
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
using namespace std;
// Program za popunjavanje i ispis dvodimenzionalnog niza (matrice)
int main() {
// Popunjavanje matrice
for (int i = 0; i < 10; i++) {
// Ispis matrice
for (int i = 0; i < 10; i++) {
cout << endl; // Prelazak u novi red
return 0; // Kraj programa
Testirajte svoj kod ovde
Inicijalizacija matrice
Ukoliko unapred znamo brojeve koje treba staviti u matricu, možemo ih definisati na sličan način kao što inicijalizujemo jednodimenzioni niz, ali u ovom slučaju se radi o nizu nizova. Na primer, ocene iz nekih predmeta za više učenika mogu se smestiti u matricu:
intocene[3][8] = { {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 navesti dimenzije, čak i ako su one implicitno određene nizovima korišćenim za inicijalizaciju matrice – ovde 3 reda i 8 kolona. Ovo ukazuje da je matrica zapravo niz elemenata, gde su ti elementi takođe nizovi, a svaki red i kolona imaju svoj indeks pomoću kojeg se pristupa pojedinačnim elementima (u ovom primeru redovi su indeksirani od 0 do 2, a kolone od 0 do 7).
Da bi izračunali prosek svih elemenata matrice, potrebno je prvo sabrati sve elemente, a zatim podeliti dobijeni zbir sa ukupnim brojem elemenata. Za to se koristi ugnježdena for petlja.
Primer 2: Prosek ocena svih učenika
using namespace std;
// Funkcija za izračunavanje prosečne ocene svih učenika
void prosek() {
{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 << 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() {
return 0; // Kraj programa
Objašnjenje:
1. Deklaracija matrice:- 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.
Primer 3: Prosek ocena po svakom učeniku
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:
using namespace std;
// Funkcija za izračunavanje prosečne ocene za svakog učenika
void proseciPoUceniku() {
{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++) {
for (int j = 0; j < 8; j++) {
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++) {
int main() {
return 0; // Kraj programa
Objašnjenje:
1. Deklaracija matrice i nizova:- 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.
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:
cin >> m >> n; // Učitavanje dimenzija matrice
for (int i = 0; i < m; i++) {
Kompletno rešenje:
using namespace std;
// Funkcija za unos matrice od strane korisnika
void ucitajMatricu() {
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) {
return; // Završetak funkcije ako su dimenzije nevalidne
cout << "Unesite elemente matrice:" << endl;
for (int i = 0; i < m; i++) {
cout << "Uneta matrica je:" << endl;
for (int i = 0; i < m; i++) {
cout << endl; // Novi red za sledeći red matrice
int main() {
return 0; // Kraj programa
Primer 5: Skakač napada
Rešenje:
#include <string>
using namespace std;
int main() {
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--) {
(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))) {
cout << "Šahovska tabla:" << endl;
for (int i = 8; i >= 1; i--) {
cout << endl; // Novi red nakon svakog reda table
return 0;
- 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
1. Kreiranje tabele za evidenciju ocena učenika
Opis zadatka: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
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.
- 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
3. Implementacija igre "Iks-Oks" (Tic-Tac-Toe)
Opis zadatka: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!
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:
- 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).
usingnamespace std;
int main() {
float temperature[2][3][4] = {
{ {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: "
}
Temperatura u drugom gradu, prvog dana, u drugom vremenu: 27.9°C
Dalje učenje
Ako želite detaljnije da naučite o trodimenzionalnim i višedimenzionalnim nizovima u C++-u i njihovoj primeni, posetite sledeći resurs:
| Prethodno |<Rečnik podataka-mape u C++ |
Sledeće Dvodimenzioni dinamički nizovi u c++>| |
Srodni članci
Matrice-primeriNizovi-primeri
Matematički algoritmi
Klase i objekti
Grananje u programu u C/C++



