C/Visual C - cuadro magico

 
Vista:

cuadro magico

Publicado por anonimo (2 intervenciones) el 11/05/2001 01:31:57
necesito un programa en el cual digite un numero impar y muestre en pantalla el cuadro magico de esta dimension donde sumando horizontalmente, verticalmente y diagonalmente de el mismo numero.

ejm
el cuadro magico de 3

2 7 6
9 5 1
4 3 8
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:cuadro magico

Publicado por José Luis (106 intervenciones) el 11/05/2001 01:56:57
Aca te envio una solución, incluida el algoritmo, espero que alcance en un pantallaso.

/********************************************************************
CUADRADOS MAGICOS ( de orden impar )

ALGORITMO GENERAL
Un modo de construir f cilmente cuadrados m gicos de orden impar.

1. Tomemos una serie aritm‚tica cualquiera, para mayor comodidad la
serie de los n£meros naturales, y coloquemos el n£mero 1 en la
celda central de la fila superior.
2. La cifra consecutiva a una cualquiera debe colocarse en la celda
que le sigue diagonalmente hacia arriba y hacia la derecha.
3. Si al hacer esto se sale del cuadrado por el l¡mite superior del
contorno del mismo, saltaremos a la celda de la columna siguiente
hacia la derecha y en su fila inferior, si se sale por la derecha,
se sigue por la primera celda, a partir de la izquierda, de la fila
superior.
4. Cuando la celda siguiente est  ocupada, el n£mero consecutivo de la
serie se coloca en la celda inmediatamente inferior a la del n£mero
precedente, comenzando as¡ un nuevo camino en la direcci¢n de la
diagonal.
*********************************************************************/

//C¢dificaci¢n basada en el algoritmo anterior

#include <stdio.h>

//limitar rango ( limita los valores de x al rango [0, N] )
#define lr( x, N ) ( (x)<0 ? N+(x)%N : ( (x)>=N ? (x)%N : (x) ) )

void main()
{
int cuadrado[17][17],x,y,n,N;

//restricci¢n del orden a los impares entre 3 y
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:cuadro magico (continuacion)

Publicado por José Luis (106 intervenciones) el 11/05/2001 01:58:18
//restricci¢n del orden a los impares entre 3 y 17, por motivos
//de dar mayor facilidad para entender el c¢digo
do{
printf( "\nIngrese el orden ( impar entre 3 y 17 ): " );
scanf( "%i", &N );
}while( !(N%2) );
printf( "\nCuadrado M gico de orden %ix%i :\n\n", N, N);

//Se inicia los elementos del cuadrado m gico con ceros
for(x=0;x<N;x++)
for(y=0;y<N;y++)
cuadrado[x][y]=0;

//Se aplica el algoritmo general para obtener cuadrados m gicos
//de orden impar
for( x=N/2,y=0,n=1; n<=N*N; ) //se hace N*N iteraciones...
if( !cuadrado[x][y] ) //si el elemento seleccionado es cero
cuadrado[x][y] = n++, //se inserta un n£mero natural
x=lr(x+1,N), //se incrementa x en 1
y=lr(y-1,N); //se decrementa y en 1
else x=lr(x-1,N), //se decrementa x en 1
y=lr(y+2,N); //se incrementa y en 2

//se imprime el cuadrado m gico en pantalla
for(y=0;y<N;y++)
{
printf("\n");
for(x=0;x<N;x++)
printf("%4i", cuadrado[x][y] );
}

printf("\n\n Suma = %i\n\n", (N*(N*N+1))/2 );//se imprime la suma

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar