Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- /* Allan Rossi Gomes RA: 157654
- 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.
- */
- /*
- Recebe um inteiro N com o tamanho de uma matriz e retorna um apontador
- para uma matriz alocada com os dados fornecidos da entrada padrão
- */
- int** criaMatriz(int N){
- int i;
- int **matriz;
- matriz = (int**)malloc(N*sizeof(int*));
- for (i = 0; i < N; i++)
- matriz[i] = (int*)malloc(N*sizeof(int));
- return matriz;
- }
- /*
- Recebe um apontador a uma matriz de numeros e um inteiro N com o tamanho da matriz
- e retorna 1 se a matriz e um quadrado magico ou 0 em caso contrario
- */
- int quadradoMagico (int** matriz, int N){
- int i, j, somalinhas, somacolunas, somadiagonal1, somadiagonal2;
- int somainicial;
- int verdadeiro = 1;
- somadiagonal2 = 0;
- somainicial = (N*(N*N + 1))/2;
- for(i = 0; i < N; i++){
- somalinhas = 0;
- for(j = 0; j < N; j++){
- somalinhas = somalinhas + matriz[i][j];
- }
- }
- for(i = 0; i < N; i++){
- somacolunas = 0;
- for(j = 0; j < N; j++){
- somacolunas = somacolunas + matriz[i][j];
- }
- }
- for(i = 0; i < N; i++){
- somadiagonal1 = 0;
- for(j = 0; j < N; j++){
- somadiagonal1 = somadiagonal1 + matriz[i][j];
- }
- }
- for(i = 0; i < N; i++){
- for(j = 0; j < N; j++) {
- if(j == (N - 1 - i))
- somadiagonal2 = somadiagonal2 + matriz[i][j];
- }
- }
- if(somalinhas != somainicial)
- verdadeiro = 0;
- if(somacolunas != somainicial)
- verdadeiro = 0;
- if(somadiagonal1 != somainicial)
- verdadeiro = 0;
- if(somadiagonal2 != somainicial)
- verdadeiro = 0;
- return verdadeiro;
- }
- /*
- Recebe um apontador a uma matriz de numeros e um inteiro N com o tamanho da matriz
- e retorna 1 se a matriz e um quadrado semi-magico ou 0 em caso contrario
- */
- int quadradoSemiMagico (int** matriz, int N){
- int i, j, somainicial;
- int somadiagonal1 = 0;
- int verdadeiro = 0;
- int somadiagonal2 = 0;
- int somalinhas = 0;
- int somacolunas = 0;
- somainicial = (N*(N*N + 1))/2;
- for(i = 0; i < N; i++){
- somalinhas = 0;
- for(j = 0; j < N; j++){
- somalinhas = somalinhas + matriz[i][j];
- }
- }
- for(i = 0; i < N; i++){
- somacolunas = 0;
- for(j = 0; j < N; j++){
- somacolunas = somacolunas + matriz[i][j];
- }
- }
- for (i = 0; i < N; i++){
- for(j = 0; j < N; j++) {
- if (i == j)
- somadiagonal1 = somadiagonal1 + matriz[i][j];
- }
- }
- for(i = 0; i < N; i++){
- for(j = 0; j < N; j++) {
- if(j == (N - 1 - i))
- somadiagonal2 = somadiagonal2 + matriz[i][j];
- }
- }
- if(somalinhas == somainicial && somacolunas == somainicial){
- if(somadiagonal1 != somainicial)
- verdadeiro = 1;
- if(somadiagonal2 != somainicial)
- verdadeiro = 1;
- }
- return verdadeiro;
- }
- /*
- Recebe um apontador a uma matriz de numeros e um inteiro N com o tamanho da matriz
- e retorna 1 se a matriz e um quadrado anti-magico ou 0 em caso contrario
- */
- int quadradoAntiMagico (int** matriz, int N){
- int resultado = 0;
- for(l = N - 1; l >= 1; l--){
- for(m = 0; m < l ; m++){
- if(sequencia[m] > sequencia[m + 1]){
- aux = sequencia[m];
- sequencia[m] = sequencia[m + 1];
- sequencia[m + 1] = aux;
- }
- }
- }
- return resultado;
- }
- int main(){
- /*
- Exemplo: Alocação dinâmica de uma matriz NXN
- */
- int i, j, N, resultado1, resultado2, resultado3;
- int **matriz;
- scanf("%d", &N);
- matriz = criaMatriz(N);
- for(i = 0; i < N; i++)
- for(j = 0; j < N; j++)
- scanf("%d", &matriz[i][j]);
- resultado1 = quadradoMagico(matriz, N);
- resultado2 = quadradoSemiMagico(matriz, N);
- resultado3 = quadradoAntiMagico(matriz, N);
- if(resultado1 == 1)
- printf("Quadrado magico");
- if(resultado2 == 1)
- printf("Quadrado semi-magico");
- if(resultado3 == 1)
- printf("Quadrado anti-magico");
- if(resultado1 == 0 && resultado2 == 0 && resultado3 == 0)
- printf("Nenhuma das alternativas");
- printf("\n");
- free(matriz);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement