Prácticas y Ejercicios con Solución

Ejercicios : Cuadrado mágico de orden impar. Memoria Dinámica

Ejercicios con solución y prácticas resueltas de programación en c,nuevos ejercicios de programación en lenguaje C. El enunciado de las prácticas y ejercicios que se plantea es el siguiente: un nuevo ejercicio propuesto por uno de nuestro seguidores del blog www.aprendoencasa.com que nos propone unos ejercicios o prácticas en la que se plantea especificar un número impar como número para definir una matriz dinamica 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.

Para realizar las practicas o consultar los ejercicios de programación resueltos has de pulsar sobre el enlace a continuación denominado “LEER EL ARTICULO COMPLETO”. Recuerda también darnos ánimos haciendo un clic en el botón google+1 de la columna izquierda o el que esta situado en la parte superior del articulo, así como recomendar la visita a nuestra página a tus amigos.


Ejercicios y practicas de programación en c resueltos o con solución

El ejercicio planteado es el siguiente:

Prácticas: Cuadrado mágico de orden impar. Memoria Dinámica

Ejercicios y Practicas resueltas en lenguaje de programación en C

se plantea especificar un número impar como número para definir una matriz dinámica 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. La solución de los ejercicios que se plantean es la siguiente:

/*

  CUADRADO MAGICO DE ORDEN IMPAR
  CON RESERVA DE MEMORIA DINÁMICA

  ===============================

  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 valor para realizar la reserva dinámica de memoria
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>

// Función principal del programa

int main(int argc, char *argv[])

{
    // Variables a utilizar
    int NumeroImpar=0;
    int CUANTOS=0;
    // 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;
    int limitex;
    int limitey;

    // Petición del número para crear la matriz de forma
    // dinamica, el número ha de ser impar
    do {
        printf("\nNumero impar...:");
        scanf(" %d",&NumeroImpar);
    } while(NumeroImpar%2==0);

    // Establecer valores
    CUANTOS = NumeroImpar;
    limite=CUANTOS*CUANTOS;
    limitex = CUANTOS - 1;
    limitey = CUANTOS - 1;

    // Creación de la matriz que contendrá los números
    // esta matriz se crea utilizando el valor del número solicitado
    // anteriormente, se ha de tener en cuenta que para que
    // funcione correctamente el programa la matriz ha de ser
    // cuadrada y de orden impar

    // Se define una variable de tipo doble puntero ya que
    // la matriz ha de ser bidimensional

    int **Matriz=NULL;

    // se realiza la reserva de memoria para las filas

    Matriz =(int **)malloc(sizeof(int*)*NumeroImpar);

    // se realiza la reserva de memoria para las columnas

    for(contador=0;contador<NumeroImpar;contador++) {
        Matriz[contador]=(int *)malloc(sizeof(int)*NumeroImpar);
    }

    // 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 ejercicio o práctica muestra como resultado la siguiente imagen:

ejercicios y prácticas de programación con solución

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies