Ejercicios y practicas de programación: Cuadrado mágico de orden impar.
Ejercicios con solución y prácticas resueltas de programación en c, El enunciado de las prácticas y ejercicios que se plantea es el siguiente:
especificar un número impar como constante y de esta forma crear lo que se denomina como un “Cuadrado Mágico”.
Un cuadrado mágico es una rejilla o cuadricula en la que se visualizan una cantidad impar de posiciones tanto en horizontal como en vertical, es decir 3×3, 5×5, etc. A continuación se rellenan las posiciones de dicha cuadricula empezando por el valor 1 y al terminar de rellenar la cuadricula se obtendrá que la suma tanto horizontal como vertical de una columna o fila suman los mismo.
Vuelvo a comentar que no es la única solución posible y que la forma de mejorar siempre estas prácticas es que aportéis vuestro granito de arena utilizando para ello los comentarios. Un saludo y gracias por vuestra visita.
/*
CUADRADO MAGICO DE ORDEN IMPAR
===============================
WWW.APRENDOENCASA.COM
WWW.APRENDOENCASA.ES
Nuevos ejercicios de programación con solución propuestos por un lector del
blog www.aprendoencasa.com, en esta ocasión las prácticas resueltas a realizar
consiste en especificar un número impar como constante y de esta forma crear lo
que se denomina como un "Cuadrado Mágico", un cuadrado mágico es una rejilla o
cuadricula en la que se visualizan una cantidad impar de posiciones tanto en
horizontal como en vertical, es decir 3x3, 5x5, etc. A continuación se rellenan
las posiciones de dicha cuadricula empezando por el valor 1 y al terminar de
rellenar la cuadricula se obtendrá que la suma tanto horizontal como vertical
de una columna o fila suman los mismo. Volver a comentar que seguro que existen
otros tipos de soluciones a los ejercicios aquí propuestos y estaré agradecido
si queréis realizar algún tipo de comentario o plantear alguna solución nueva
al ejercicio resuelto que aquí se plantea.
*/
// Inclusión de librería a utilizar en el programa
#include <stdio.h>
#include <stdlib.h>
// Constantes a utilizar en el programa
#define CUANTOS 3
// Función principal del programa
int main(int argc, char *argv[])
{
// Creación de la matriz que contendrá los números
// esta matriz se crea utilizando la constante creada
// anteriormente, se ha de tener en cuenta que para que
// funcione correctamente el programa la matriz ha de ser
// cuadrada y de orden impar
int Matriz[CUANTOS][CUANTOS];
// Variable a utilizar como contador de números
int contador=0;
// Variables a utilizar para determinar la posición x e y en la matriz
// almacenar las posiciones y los limites de la matriz
int x=0;
int y=0;
int vx=0;
int vy=0;
// Número de números que hay que contar y limites de la matriz
int limite=CUANTOS*CUANTOS;
int limitex = CUANTOS - 1;
int limitey = CUANTOS - 1;
// Inicializar los valores de la matriz a 0
for( x=0 ; x<CUANTOS ; x++)
{
for( y=0 ; y<CUANTOS ; y++ )
{
Matriz[x][y] = 0;
}
}
// Establecer la posición x e y inicial de la matriz donde almacenar
// el primer numero siendo en la primera fila posición central
x = CUANTOS / 2;
y = 0;
// El primer numero se sitúa en la casilla central de la fila
// superior de la matriz, a continuación el siguiente numero se
// sitúa en la diagonal arriba derecha, es decir una posición
// de fila mas alta y una posición de columna a la derecha, en
// caso de ya estar ocupada la casilla se sitúa el numero correspondiente
// debajo de la casilla de donde se partía inicialmente, si al
// desplazarse por la matriz se superan los limites por algún sitio
// se entra a la misma por el lado contrario, es decir si nos pasamos
// de posición por la parte derecha de la matriz se empieza por la parte
// izquierda de la misma, y así en todos los sentidos.
// Bucle que se ejecuta el numero de casilla que contiene la matriz
for(contador=1;contador<=limite;contador++)
{
// Asignar la posición del numero en la matriz
Matriz[y][x] = contador;
// Guardar la posición actual
vx = x;
vy = y;
// Aumentar la posición de x si sobrepasa el limite derecho
// situarla en el limite izquierdo
x++;
if( x > limitex ) x = 0;
// Disminuir la posición de y, ya que se pretende avanzar en
// diagonal
y--;
if( y < 0 ) y = limitey;
// Se comprueba si la posición ya esta ocupada por un numero
// si es así se vuelve a la posición original y se resitúa el
// numero justo en la casilla inferior
if (Matriz[y][x]>0)
{
// La casilla esta ocupada y se asigna el numero en la
// casilla situada justo debajo de la casilla de donde procedía
x = vx ;
y = vy +1 ;
}
}
// Visualizar la matriz
printf("\nCUADRADO MAGICO - WWW.APRENDOENCASA.COM\n");
for( x=0 ; x<CUANTOS ; x++)
{
for( y=0 ; y<CUANTOS ; y++ )
{
printf("|%3d|",Matriz[x][y]);
}
printf("\n");
}
printf("\nGRACIAS POR SU VISITA - WWW.APRENDOENCASA.ES\n\n");
system("PAUSE");
return 0;
}
El resultado del ejercicio una vez ejecutado es el que se muestra en la siguiente imagen, la cual muestra el cuadrado mágico en acción relleno con los números :