Advertisement
Guest User

oi falta a função antimágico que é semi impossível de fazer

a guest
Nov 27th, 2014
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.78 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* Allan Rossi Gomes RA: 157654
  5.  
  6. Programa em C que recebe como entrada uma matriz de inteiros, linha a linha, e determina se esta matriz é um quadrado mágico, semi-mágico, anti-mágico ou nenhum deles.
  7.  
  8. */
  9.  
  10. /*
  11. Recebe um inteiro N com o tamanho de uma matriz e retorna um apontador
  12. para uma matriz alocada com os dados fornecidos da entrada padrão
  13. */
  14. int** criaMatriz(int N){
  15.  
  16. int i;
  17.  
  18. int **matriz;
  19.  
  20. matriz = (int**)malloc(N*sizeof(int*));
  21.  
  22. for (i = 0; i < N; i++)
  23. matriz[i] = (int*)malloc(N*sizeof(int));
  24.  
  25. return matriz;
  26.  
  27. }
  28.  
  29. /*
  30. Recebe um apontador a uma matriz de numeros e um inteiro N com o tamanho da matriz
  31. e retorna 1 se a matriz e um quadrado magico ou 0 em caso contrario
  32. */
  33. int quadradoMagico (int** matriz, int N){
  34.  
  35. int i, j, somalinhas, somacolunas, somadiagonal1, somadiagonal2;
  36.  
  37. int somainicial;
  38.  
  39. int verdadeiro = 1;
  40.  
  41. somadiagonal2 = 0;
  42.  
  43. somainicial = (N*(N*N + 1))/2;
  44.  
  45. for(i = 0; i < N; i++){
  46.  
  47. somalinhas = 0;
  48.  
  49. for(j = 0; j < N; j++){
  50. somalinhas = somalinhas + matriz[i][j];
  51. }
  52.  
  53. }
  54.  
  55. for(i = 0; i < N; i++){
  56.  
  57. somacolunas = 0;
  58.  
  59. for(j = 0; j < N; j++){
  60. somacolunas = somacolunas + matriz[i][j];
  61. }
  62.  
  63. }
  64.  
  65. for(i = 0; i < N; i++){
  66.  
  67. somadiagonal1 = 0;
  68.  
  69. for(j = 0; j < N; j++){
  70. somadiagonal1 = somadiagonal1 + matriz[i][j];
  71.  
  72. }
  73.  
  74. }
  75.  
  76. for(i = 0; i < N; i++){
  77.  
  78. for(j = 0; j < N; j++) {
  79. if(j == (N - 1 - i))
  80. somadiagonal2 = somadiagonal2 + matriz[i][j];
  81. }
  82.  
  83. }
  84.  
  85. if(somalinhas != somainicial)
  86. verdadeiro = 0;
  87.  
  88. if(somacolunas != somainicial)
  89. verdadeiro = 0;
  90.  
  91. if(somadiagonal1 != somainicial)
  92. verdadeiro = 0;
  93.  
  94. if(somadiagonal2 != somainicial)
  95. verdadeiro = 0;
  96.  
  97. return verdadeiro;
  98.  
  99. }
  100.  
  101. /*
  102. Recebe um apontador a uma matriz de numeros e um inteiro N com o tamanho da matriz
  103. e retorna 1 se a matriz e um quadrado semi-magico ou 0 em caso contrario
  104. */
  105. int quadradoSemiMagico (int** matriz, int N){
  106.  
  107. int i, j, somainicial;
  108.  
  109. int somadiagonal1 = 0;
  110.  
  111. int verdadeiro = 0;
  112.  
  113. int somadiagonal2 = 0;
  114.  
  115. int somalinhas = 0;
  116.  
  117. int somacolunas = 0;
  118.  
  119. somainicial = (N*(N*N + 1))/2;
  120.  
  121. for(i = 0; i < N; i++){
  122.  
  123. somalinhas = 0;
  124.  
  125. for(j = 0; j < N; j++){
  126. somalinhas = somalinhas + matriz[i][j];
  127. }
  128.  
  129. }
  130.  
  131. for(i = 0; i < N; i++){
  132.  
  133. somacolunas = 0;
  134.  
  135. for(j = 0; j < N; j++){
  136. somacolunas = somacolunas + matriz[i][j];
  137. }
  138.  
  139. }
  140.  
  141.  
  142. for (i = 0; i < N; i++){
  143.  
  144. for(j = 0; j < N; j++) {
  145.  
  146. if (i == j)
  147. somadiagonal1 = somadiagonal1 + matriz[i][j];
  148.  
  149. }
  150.  
  151. }
  152.  
  153. for(i = 0; i < N; i++){
  154.  
  155. for(j = 0; j < N; j++) {
  156.  
  157. if(j == (N - 1 - i))
  158. somadiagonal2 = somadiagonal2 + matriz[i][j];
  159. }
  160.  
  161. }
  162.  
  163. if(somalinhas == somainicial && somacolunas == somainicial){
  164.  
  165. if(somadiagonal1 != somainicial)
  166. verdadeiro = 1;
  167.  
  168. if(somadiagonal2 != somainicial)
  169. verdadeiro = 1;
  170.  
  171. }
  172.  
  173. return verdadeiro;
  174.  
  175. }
  176.  
  177. /*
  178. Recebe um apontador a uma matriz de numeros e um inteiro N com o tamanho da matriz
  179. e retorna 1 se a matriz e um quadrado anti-magico ou 0 em caso contrario
  180. */
  181. int quadradoAntiMagico (int** matriz, int N){
  182.  
  183. int resultado = 0;
  184.  
  185. for(l = N - 1; l >= 1; l--){
  186.  
  187. for(m = 0; m < l ; m++){
  188.  
  189. if(sequencia[m] > sequencia[m + 1]){
  190.  
  191. aux = sequencia[m];
  192.  
  193. sequencia[m] = sequencia[m + 1];
  194.  
  195. sequencia[m + 1] = aux;
  196.  
  197. }
  198.  
  199. }
  200.  
  201. }
  202.  
  203.  
  204. return resultado;
  205.  
  206. }
  207.  
  208.  
  209. int main(){
  210.  
  211. /*
  212. Exemplo: Alocação dinâmica de uma matriz NXN
  213. */
  214.  
  215. int i, j, N, resultado1, resultado2, resultado3;
  216.  
  217. int **matriz;
  218.  
  219. scanf("%d", &N);
  220.  
  221. matriz = criaMatriz(N);
  222.  
  223. for(i = 0; i < N; i++)
  224. for(j = 0; j < N; j++)
  225. scanf("%d", &matriz[i][j]);
  226.  
  227. resultado1 = quadradoMagico(matriz, N);
  228.  
  229. resultado2 = quadradoSemiMagico(matriz, N);
  230.  
  231. resultado3 = quadradoAntiMagico(matriz, N);
  232.  
  233. if(resultado1 == 1)
  234. printf("Quadrado magico");
  235.  
  236. if(resultado2 == 1)
  237. printf("Quadrado semi-magico");
  238.  
  239. if(resultado3 == 1)
  240. printf("Quadrado anti-magico");
  241.  
  242. if(resultado1 == 0 && resultado2 == 0 && resultado3 == 0)
  243. printf("Nenhuma das alternativas");
  244.  
  245. printf("\n");
  246.  
  247. free(matriz);
  248.  
  249. return 0;
  250.  
  251. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement