Logo elrincondelc.com
curso de programación en c
Foros de programación en C
Inicio :: Código fuente

Valoración
0

CUADRO MAGICO

codigo enviada por: JAVIER4423
ESTE PROGRAMA TE REALIZA UHN CUADRO MAGICO DE HASTA 17 RENGLONES POR 17
COLUMNAS
/***********************************************************************
 :::CUADRADOS MAGICOS:::
 Solucion al clasico problema matemático del cuadrado magico (orden impar).
 Para los que no saben de que trata, se tiene que ubicar los n primeros
 numeros naturales (n impar) en una matriz de nxn de tal forma que la
 suma de cualquier fila, columna o diagonal debe ser siempre la misma.

 Ejemplo:

 Cuadrado magico de orden 3 :

 8 1 6
 3 5 7
 4 9 2

 Suma = 15

  >> ALGORITMO GENERAL

 Un modo de construir facilmente cuadrados mágicos de orden impar.

1. Tomemos una serie aritmetica 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.

***********************************************************************/



/*Codificacion basada en el algoritmo anterior*/

#include <stdio.h>
#include <conio.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;

 /*restriccion del orden a los impares entre 3 y 17, por motivos
   de dar mayor facilidad para entender el codigo*/
 do{
  printf( "nIngrese el orden ( impar entre 3 y 17 ): " );
  scanf( "%i", &N );
 }while( !(N%2) );
 printf( "nCuadrado Mágico de orden %ix%i :nn", N, N);

 /*Se inicia los elementos del cuadrado magico 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 magicos 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 magico en pantalla*/
 for(y=0;y<N;y++)
 {
  printf("n");
  for(x=0;x<N;x++)
   printf("%4i", cuadrado[x][y] );
 }

 printf("nn Suma = %inn", (N*(N*N+1))/2 );/*se imprime la suma*/

 getch();
}
un codigo mas para principiantes por que no todos son expertos o recien estan empesando
(DILLUS_87 2008-12-09 11:39:28)
Para cuadrados de orden par o impar, ver el siguiente enlace http://programasenc.blogspot.com/2009/02/cuadrado-magico.html Codigo en ANSI C
(betopin 2009-02-20 21:45:04)
Mil Gracias, funciona de maravilla, eres un fenomeno programando...je je..
(be.hemot 2011-05-30 14:31:35)

Para enviar comentarios debes estar registrado.

(c) ElRincondelC.com

Un proyecto de Urlan Heat : proyectos de Internet y soporte para el comercio electrónico.