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

Cuadro Magico

  • Autor:
  • Lecturas 6,989
Artículos /* Este código te verifica que un cuadrado sea mágico (la suma de renglones,
columnas y diagonales sean iguales) el programa esta totalmente comentado,
espero que te sirva, aclaro que este código lo modifique con la finalidad
que funcionara correctamente..., ya que el programa enviado por fernando..., publicado en esta página ¡no funcionaba. De todas maneras checa los dos códigos y te darás cuenta que son totalmente diferentes*/

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

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;
}


void main()
{
int parcial1=0;
int parcial2=0;
int bandera=0;
int i,j,matriz[10][10],ren,cont2=0;
int col,cont=0;
int avanza=1;
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
&#123;
for(j=0;j<col;j++)
&#123;
gotoxy(4+j*3,7+i);scanf(\"%d\",&matriz[i][j]);
&#125;
&#125;
init (suma1,suma2,sumas);//invoca a la función para inicialice las matrices

for(i=0;i<ren;i++)//Este ciclo sirve para comprobar las sumas de los renglones
&#123; //inicio del ciclo for principal
if (i==0)
&#123; for(j=0;j<col;j++) //Este primer ciclo sirve para calcular la suma del
&#123; //primer renglón
parcial1=parcial1+matriz[i][j]; //se aloja el valor de laesuma
&#125;
&#125;
i=i+1;//Sumo una unidad para avanzar al segundo renglón

if (((i>=0) && (i<ren)) && (bandera==0)) //Este ciclo sirve para sumar el
&#123; for(j=0;j<col;j++) //el segundo renglón, hasta n o bien hasta que la
&#123; //comparación sea diferente y se asigne a la bandera=1
parcial2=parcial2+matriz[i][j];
&#125;
if (parcial1==parcial2) //comparación del renglón 1 y el genglón n
&#123; bandera=0; //si son iguales la bandera indica al ciclo que continue
parcial2=0; //el parcial2 lo igualamos a cero para alojar el valor de n-1
&#125;
else //en otro caso si son diferentes se asigna a la bandera=1
&#123; //lo cual indica que la suma es diferente
bandera=1;
i=i+1;
cout<<\"fallo el cuador magico en la linea= \"<<i<<endl;
&#125;
&#125;
i=i-1; //le resto una unidad ya que anteriormente le habia aumentado 1!!
//esto con la fianlidad de no afectar al ciclo for principal
&#125;//fin del ciclo for (principal)

//parcial1=0;
parcial2=0;
//bandera=0;


for(j=0;j<col;j++)//Este ciclo sirve para obtener la suma de las columnas
&#123;
if(((j>=0) && (j<col)) && (bandera==0))//verifica condición y si la bandera
&#123; //es desigual de 0 entonces no entra al for
for(i=0;i<ren;i++)
&#123;
parcial2=parcial2+matriz[i][j];
&#125;
if (parcial1==parcial2) //despues de haber calculada la suma de la 1era
&#123; //columna verifican que sean iguales
bandera=0;
parcial2=0;
&#125;
else
&#123; j=j+1;
cout<<\"fallo el cuadro en el renglon= \"<<j<<endl;
bandera=1; //si no son diferentes entonces pone un 1 a la bandera
&#125; //lo cual indica que son diferentes
&#125;
&#125;

//Estos ciclos calculan la suma de las 2 diagonales
parcial2=0;
if (bandera==0)//si la bandera es igual a 1 ya no entra al cilo ya que no
//hay necesidad de sumar las diagonales
&#123; //inicio del if principal

for(i=0;i<ren;i++) //Este ciclo sirve para obtener la suma de la diagonal1
&#123;
for (j=0;j<col;j++)
&#123;
if (i==j) //suma solo cuando los indices son iguales
&#123;
parcial2=parcial2+matriz[i][j];
&#125;
&#125;
&#125;
if (parcial1==parcial2)//verifica condición de la diagonal1 sea igual
&#123;bandera=0; //para asi poder colocar un valor a la bandera
cout<<\"Diagonal 1= \"<<parcial2<<endl;&#125;
else
bandera=1; //en este caso no son igules

parcial2=0; //limpiamos la variable
if (bandera==0) //si la bandera es desigual no entra sumar la diagonal2
&#123;
for(i=0;i<ren;i++) //ciclo q calcula la suma de diagonal2
&#123;
for(j=col-avanza;j>=0;j--) //decremento ya que voy de izq a derecha
{
parcial2=parcial2+matriz[i][j];
j=j-(col-avanza); //esta parte sirve para que solo sume un solo
} //numero por columna
avanza=avanza+1; //le aumentamos 1 para avanzar a la sig columna
}

if (parcial1==parcial2) //compara la columna si es igual coloca en la ban
{ // dera un 0 que significa que si es igual
bandera=0;
cout<<\"Diagonal 2= \"<<parcial2<<endl;
&#125;
else bandera=1; //en otro caso coloca 1 a la bandera lo que significa
&#125; //que es desigual
&#125; //termina if principal

//Aqui llega el balor de la bandera para hacer la comparación si es o no
//cuadro mágico

if (bandera==0)
&#123;cout<<\"\";
cout<<\"ES magico\";
}
else
{cout<<\"\";
cout<<\"No es magico\";
}
getch();
}