Advertisement
adnanj

Je li unesena kvadratna matrica magični kvadrat?

Mar 12th, 2014
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.94 KB | None | 0 0
  1. /* 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.
  2. 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. */
  3.  
  4. #include <iostream>
  5. #include <iomanip>
  6. using namespace std;
  7.  
  8. const int v = 3;
  9.  
  10. void unos(int [][v], int, int);
  11. void ispis(int [][v], int, int);
  12. int sumaGlavne(int [][v], int);
  13. int sumaSporedne(int [][v], int);
  14. bool sumeRedaka(int [][v]);
  15. bool sumeKolona(int [][v]);
  16.  
  17. int main() {
  18.         int matrica[v][v];
  19.    
  20.     unos(matrica, v-1, v-1);
  21.     ispis(matrica, v-1, v-1);
  22.  
  23.     cout << endl << endl;
  24.  
  25.     cout << "Da li su sume redaka jednake? ";
  26.     if(sumeRedaka(matrica))  cout << "DA\n";
  27.     else cout << "NE\n";
  28.    
  29.     cout << "Da li su sume kolona jednake? ";
  30.     if(sumeKolona(matrica)) cout << "DA\n";
  31.     else cout << "NE\n";
  32.    
  33.     cout << "Da li su dijagonale jednake? ";
  34.     if(sumaGlavne(matrica, v-1)==sumaSporedne(matrica, v-1)) cout << "DA\n";
  35.     else
  36.     cout << "NE\n";
  37.  
  38.     if((sumeRedaka(matrica)&&sumeKolona(matrica))&&sumaGlavne(matrica, v-1)==sumaSporedne(matrica, v-1))
  39.     cout << "U pitanju je magicni kvadrat!";
  40.     else
  41.     cout << "Nije magicni kvadrat!";
  42.  
  43.    
  44.     system("pause>0");
  45.     return 0;
  46. }
  47.  
  48. void unos(int matrica[][v], int r, int k) {
  49.            if(r<0)
  50.                  return;
  51.            if(k==0)
  52.                  unos(matrica, r-1, v-1);
  53.            else
  54.                  unos(matrica, r, k-1);
  55.            cout << "Unesi element matrice ["<<r<<"] ["<<k<<"]: ";
  56.            cin >> matrica[r][k];
  57. }
  58.  
  59. void ispis(int matrica[][v], int r, int k) {
  60.            if(r<0)
  61.                 return;
  62.            if(k==0) {
  63.                 ispis(matrica, r-1, v-1);
  64.             cout << endl;
  65.        }
  66.            else
  67.                 ispis(matrica, r, k-1);
  68.            cout << setw(3) << matrica[r][k];
  69. }
  70.  
  71. int sumaGlavne(int matrica[][v], int i) {
  72.            if(i<0)
  73.                return 0;
  74.            return matrica[i][i] + sumaGlavne(matrica, i-1);
  75. }
  76.  
  77. int sumaSporedne(int matrica[][v], int i) {
  78.           if(i<0)
  79.               return 0;
  80.           return matrica[i][v-i-1] + sumaSporedne(matrica, i-1);
  81. }
  82.  
  83. bool sumeRedaka(int matrica[][v]) {
  84.       int sume[v];
  85.       for(int i = 0; i < v; i++) {
  86.             for(int j = 0; j < v; j++) {
  87.             sume[i] += matrica[i][j];
  88.          }
  89.       }
  90.       for(int i = 0; i < v; i++)
  91.         if(sume[i]!=sume[0])
  92.         return 0;
  93.       return 1;
  94. }
  95.  
  96. bool sumeKolona(int matrica[][v]) {
  97.       int sume[v];
  98.       for(int i = 0; i < v; i++) {
  99.          for(int j = 0; j < v; j++) {
  100.          sume[i] += matrica[j][i];
  101.          }
  102.       }
  103.       for(int i = 0; i < v; i++)
  104.         if(sume[i]!=sume[0])
  105.         return 0;
  106.       return 1;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement