11.05. Analiza zadatka 1 – Rad sa 3D matricom
Potrebno je realizovati program koji radi sa trodimenzionalnom (3D) matricom celih brojeva dimenzija N x N x N.
Korisnik na početku unosi vrednost N, pri čemu važi uslov: 1 < N < 20
Unos mora biti proveren, što znači da program ne sme nastaviti rad dok se ne unese ispravna vrednost.
Nakon unosa dimenzije:
-
formira se 3D matrica,
-
svaki element dobija vrednost: mat[i][j][k] = i + j + k
Indeksiranje počinje od 0.
Operacije koje program treba da podrži
Program radi sve dok se ne unese komanda:
QUIT
Komande ne smeju biti osetljive na veličinu slova:
update
UPDATE
UpDaTe
sve mora biti prihvaćeno.
1.1 Prikaz matrice
Potrebno je ispisati sve elemente matrice nakon inicijalizacije.
Pošto je matrica 3D, najlakše je prikazati:
-
jedan sloj (
i) -
unutar njega redove (
j) -
i kolone (
k)
Primer:
Layer 0
0 1 2
1 2 3
2 3 4
1.2 UPDATE operacija
Komanda:
UPDATE 2,2,2 -1
znači:
mat[2][2][2] = -1
Potrebno je:
-
pročitati indekse,
-
pročitati novu vrednost,
-
izmeniti element,
-
ponovo prikazati matricu.
1.3 SUM operacija
Komanda:
SUM 1,1,1 3,3,3
znači:
izračunati sumu svih elemenata u opsegu:
i = 1..3
j = 1..3
k = 1..3
uključujući granice.
Potrebno je koristiti tri ugneždene petlje.
1.4 NEW operacija
Formira se nova matrica istih dimenzija.
Svaki element nove matrice predstavlja:
-
zbir susednih elemenata iz stare matrice.
Susedi su:
-
gore/dole
-
levo/desno
-
napred/nazad
Dijagonale se NE računaju.
Ciklično povezivanje (wrap-around)
Ako je element na ivici:
i = 0
njegov sused „iznad“ je:
i = N-1
Isto važi za sve dimenzije.
Ovo je kružna (torusna) matrica.
1.5 MOVE operacija
Komanda:
MOVE 1,1,1 0,1,1
znači:
-
uzeti elemente u istoj osi,
-
pomeriti ih za zadati broj mesta.
Pomeranje može biti:
-
pozitivno,
-
negativno.
Pošto je matrica ciklična, pomeranje „izlazi“ sa jedne strane i vraća se na drugu.
Struktura programa
Program se može podeliti na funkcije:
| Funkcija | Opis |
|---|---|
| InitMatrix | Popunjava matricu |
| PrintMatrix | Ispisuje matricu |
| Update | Menja element |
| SumRange | Računa sumu |
| CreateNewMatrix | Formira NEW matricu |
| Move | Vrši pomeranje |
| ParseCommand | Obrada komandi |
Pseudokod
Učitati N
Dok N nije u opsegu 2..19
ponovo učitati N
Kreirati 3D matricu N x N x N
Za i od 0 do N-1
Za j od 0 do N-1
Za k od 0 do N-1
mat[i][j][k] = i + j + k
Dok je komanda različita od QUIT
Učitati komandu
Ako je komanda PRINT
ispisati matricu
Ako je komanda UPDATE
učitati i,j,k,value
mat[i][j][k] = value
ispisati matricu
Ako je komanda SUM
učitati opseg
sum = 0
Za i kroz opseg
Za j kroz opseg
Za k kroz opseg
sum += mat[i][j][k]
ispisati sum
Ako je komanda NEW
kreirati newMat
Za sva polja
izračunati 6 suseda
upisati zbir u newMat
ispisati newMat
Ako je komanda MOVE
izvršiti ciklično pomeranje
ispisati matricu