Bienvenido(a) a Grupo Linuxero del Bajío jueves, agosto 13 2020 @ 08:04 CEST

Algoritmo del cuadrado mágico

  • Autor:
  • Lecturas 10,162
Educación

A ver si a alguien le sirve el siguiente código que determina si una matriz es o no un cuadrado mágico:

#include <stdio.h>
#include <conio.h>

//6 1 8
//7 5 3
//2 9 4

typedef int vector[50];
vector suma1,suma2,sumas;

void init (int a[],int b[ ],int c[ ])//inicilizar arreglos a cero
{
   for (int i=0; i<50; i++) a[i] = 0;
   for (int j=0; j<50; j++) b[j] = 0;
   for (int cont=0;cont<50;cont++) c[cont]=0;
}

int verifica(int sumas[ ],int cont)//Comprueba si es cuadrado magico o no lo es
{
  int temp=sumas[0];
  for(int i=0;i<=cont;i++)
  {
    if (sumas[i]!=temp)
	return 0;
  }
  return 1;
}

void main()
{
  int i,j,matriz[10][10],ren,cont2=0;
  int col,cont=0;
  clrscr();
  printf("dame el numero de renglones y renglones:");
  gotoxy(30,1);scanf("%d",&ren);scanf("%d",&col);
  init(suma1,suma2,sumas);
  for(i=0;i<ren;i++)  //lectura de la matriz
  {
    for(j=0;j<col;j++)
    {
      gotoxy(4+j*3,7+i);scanf("%d",&matriz[i][j]);
    }
  }
  init (suma1,suma2,sumas);
  for(i=0;i<ren;i++)//suma de filas
  {
    for(j=0;j<col;j++)
    {
       sumas[cont]=sumas[cont]+matriz[i][j];

    }
    cont++;
  }

  for(i=0;i<ren;i++) //suma de columnas
  {
    for(j=0;j<col;j++)
    {
       sumas[cont]=sumas[cont]+matriz[j][i];
    }
    cont++;
  }
  for (i=0;i<ren;i++) //suma de diagonal principal
  {
    sumas[cont]=sumas[cont]+matriz[i][i];
  }
  cont++;
  for ( i=ren-1; i<=0 ; i-- ) //suma de diagonal secundaria
  {
    sumas [cont] += matriz [i][cont2++] ;
  }

  if (verifica(sumas,cont)==1)
  {
    printf ("Es magica");
  }
  else
  {
    printf ("No es magica");
  }
  getch();
}