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
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:
int ocene[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:
- 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
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:
- 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
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 <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
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.
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
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 elemente matrice:
1 2 3
4 5 6
Prosečna vrednost elemenata matrice: 3.5
3. Implementacija igre "Iks-Oks" (Tic-Tac-Toe)
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.
_ _ _
_ _ _
_ _ _
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
Š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".
- 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).
using namespace 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: "
}
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++ >| |