Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Magični kvadrat je kvadratna tablica (matrica) veličine NxN sa prirodnim brojevima od 1 do N^2 kod koje su sume elemenata po redovima, kolonama i dijagonalama jednaki.
- Napomena: Sve funkcije (osim sumeRedaka i sumeKolona) su urađene rekurzivno, iako se iste mogu uraditi vrlo jednostavno iterativnom metodom. Urađene su rekurzivno radi demonstracije drugih načina rješavanja problema. Pojedine funkcije (npr. za unos i ispis) nisu naročito efikasne rekurzivnim izvođenjem, ali tu su, kao što je već spomenuto, radi ilustracije drugih načina. */
- #include <iostream>
- #include <iomanip>
- using namespace std;
- const int v = 3;
- void unos(int [][v], int, int);
- void ispis(int [][v], int, int);
- int sumaGlavne(int [][v], int);
- int sumaSporedne(int [][v], int);
- bool sumeRedaka(int [][v]);
- bool sumeKolona(int [][v]);
- int main() {
- int matrica[v][v];
- unos(matrica, v-1, v-1);
- ispis(matrica, v-1, v-1);
- cout << endl << endl;
- cout << "Da li su sume redaka jednake? ";
- if(sumeRedaka(matrica)) cout << "DA\n";
- else cout << "NE\n";
- cout << "Da li su sume kolona jednake? ";
- if(sumeKolona(matrica)) cout << "DA\n";
- else cout << "NE\n";
- cout << "Da li su dijagonale jednake? ";
- if(sumaGlavne(matrica, v-1)==sumaSporedne(matrica, v-1)) cout << "DA\n";
- else
- cout << "NE\n";
- if((sumeRedaka(matrica)&&sumeKolona(matrica))&&sumaGlavne(matrica, v-1)==sumaSporedne(matrica, v-1))
- cout << "U pitanju je magicni kvadrat!";
- else
- cout << "Nije magicni kvadrat!";
- system("pause>0");
- return 0;
- }
- void unos(int matrica[][v], int r, int k) {
- if(r<0)
- return;
- if(k==0)
- unos(matrica, r-1, v-1);
- else
- unos(matrica, r, k-1);
- cout << "Unesi element matrice ["<<r<<"] ["<<k<<"]: ";
- cin >> matrica[r][k];
- }
- void ispis(int matrica[][v], int r, int k) {
- if(r<0)
- return;
- if(k==0) {
- ispis(matrica, r-1, v-1);
- cout << endl;
- }
- else
- ispis(matrica, r, k-1);
- cout << setw(3) << matrica[r][k];
- }
- int sumaGlavne(int matrica[][v], int i) {
- if(i<0)
- return 0;
- return matrica[i][i] + sumaGlavne(matrica, i-1);
- }
- int sumaSporedne(int matrica[][v], int i) {
- if(i<0)
- return 0;
- return matrica[i][v-i-1] + sumaSporedne(matrica, i-1);
- }
- bool sumeRedaka(int matrica[][v]) {
- int sume[v];
- for(int i = 0; i < v; i++) {
- for(int j = 0; j < v; j++) {
- sume[i] += matrica[i][j];
- }
- }
- for(int i = 0; i < v; i++)
- if(sume[i]!=sume[0])
- return 0;
- return 1;
- }
- bool sumeKolona(int matrica[][v]) {
- int sume[v];
- for(int i = 0; i < v; i++) {
- for(int j = 0; j < v; j++) {
- sume[i] += matrica[j][i];
- }
- }
- for(int i = 0; i < v; i++)
- if(sume[i]!=sume[0])
- return 0;
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement