fork(4) download
  1. #include <stdio.h>
  2.  
  3. void lerMatriz(int tam, int mat[tam][tam]) {
  4. int i, j;
  5. for (i = 0; i < tam; i++) {
  6. for (j = 0; j < tam; j++) {
  7. scanf("%i", &mat[i][j]);
  8. }
  9. }
  10. }
  11.  
  12. void mostraMatriz(int tam, int mat[tam][tam]) {
  13. int i, j;
  14. for (i = 0; i < tam; i++) {
  15. for (j = 0; j < tam; j++) {
  16. printf("%i ", mat[i][j]);
  17. }
  18. printf("\n");
  19. }
  20. }
  21.  
  22. int somaDiagonalPrincipal(int tam, int mat[tam][tam]) {
  23. int i, soma = 0;
  24. for (i = 0; i < tam; i++) {
  25. soma += mat[i][i];
  26. }
  27. return soma;
  28. }
  29.  
  30. int somaDiagonalSecundaria(int tam, int mat[tam][tam]) {
  31. int i, soma = 0;
  32. for (i = 0; i < tam; i++) {
  33. soma += mat[i][tam-i-1];
  34. }
  35. return soma;
  36. }
  37.  
  38. void mostraVetor(int vet[], int tam) {
  39. int i;
  40. for (i = 0; i < tam; i++) {
  41. printf("%i ", vet[i]);
  42. }
  43. }
  44.  
  45. void somaLinhas(int tam, int mat[tam][tam], int vet[]) {
  46. int i, j;
  47. for (i = 0; i < tam; i++) {
  48. vet[i] = 0;
  49. for (j = 0; j < tam; j++) {
  50. vet[i] += mat[i][j];
  51. }
  52. }
  53. }
  54.  
  55. void somaColunas(int tam, int mat[tam][tam], int vet[]) {
  56. int i, j;
  57. for (j = 0; j < tam; j++) {
  58. vet[j] = 0;
  59. for (i = 0; i < tam; i++) {
  60. vet[j] += mat[i][j];
  61. }
  62. }
  63. }
  64.  
  65. int testaIgualidadeVetor(int vet[], int tam) {
  66. int i;
  67. for (i = 1; i < tam; i++) {
  68. if (vet[i] != vet[i-1]) {
  69. return 0;
  70. }
  71. }
  72. return 1;
  73. }
  74.  
  75. int main(void) {
  76. int n;
  77. scanf("%i", &n);
  78. int mat[n][n];
  79.  
  80. lerMatriz(n, mat);
  81. mostraMatriz(n, mat);
  82.  
  83. int somaDP = 0, somaDS = 0;
  84. somaDP = somaDiagonalPrincipal(n,mat); //soma da diagonal principal
  85. somaDS = somaDiagonalSecundaria(n,mat); //soma da diagonal secundaria
  86.  
  87. //soma linhas
  88. int vetL[n];
  89. somaLinhas(n, mat, vetL);
  90. printf("\nSoma das linhas: ");
  91. mostraVetor(vetL, n);
  92.  
  93. //soma colunas
  94. int vetC[n];
  95. somaColunas(n, mat, vetC);
  96. printf("\nSoma das colunas: ");
  97. mostraVetor(vetC, n);
  98.  
  99. printf("\nSoma diagonal principal %i e secundaria %i\n", somaDP, somaDS);
  100.  
  101. int testaL, testaC;
  102. testaL = testaIgualidadeVetor(vetL, n);
  103. testaC = testaIgualidadeVetor(vetC, n);
  104.  
  105. if (testaL && testaC && somaDP == somaDS && somaDP == vetL[0]) {
  106. printf("Quadrado magico");
  107. } else {
  108. printf("Quadrado nao magico");
  109. }
  110.  
  111. return 0;
  112. }
  113.  
Success #stdin #stdout 0s 10320KB
stdin
3
8 0 7
4 5 6
3 10 2
stdout
8 0 7 
4 5 6 
3 10 2 

Soma das linhas: 15 15 15 
Soma das colunas: 15 15 15 
Soma diagonal principal 15 e secundaria 15
Quadrado magico