• Sábado 21 de Diciembre de 2024, 15:18

Autor Tema:  Cuadrado Magico  (Leído 51916 veces)

anoraxis

  • Nuevo Miembro
  • *
  • Mensajes: 4
  • Nacionalidad: cu
    • Ver Perfil
Cuadrado Magico
« en: Viernes 5 de Diciembre de 2008, 17:17 »
0
el reto que presento es sencillo. Se trata de programar una aplicación que genere una matriz de numero enteros en los que se cumpla que la suma de todas las columnas y filas y diagonales sea la misma. Los números en la matriz deben ser desde 1 hasta n elevado al cuadrado donde n es la cantidad de filas y columnas de cuadrado. obviamente no se pueden repetir números. por ejemplo para un cuadrado de dimensión 3 la salida debe ser

8  1  6
3  5  7
4  9  2

el programa debe aceptar como entrada el numero n (cantidad de filas y columnas del cuadrado) y devolver algo como lo anterior.

creo que 15 días son suficiente para esto.

saludos y que no les pase  :hitcomp:

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Cuadrado Magico
« Respuesta #1 en: Martes 9 de Diciembre de 2008, 09:47 »
0
No creo que un nuevo miembro deba postear retos...

posman

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Cuadrado Magico
« Respuesta #2 en: Martes 9 de Diciembre de 2008, 16:08 »
0
Ademas no es ningun reto. Existen reglas para llenar ese cuadro.

Primero, la matriz debe ser de numeros impares (3x3, 5x5, 7x7, etc).
1. El numero 1 se coloca en la fila de arriba en el lugar del medio

Código: Text
  1. . 1 .
  2. . . .
  3. . . .
  4.  

2. Los numeros se escriben del 1 al 9. El siguiente numero se coloca un lugar arriba y a la derecha. Me explico. Para el movimiento hacia arriba, si el numero anteriror se coloco en la fila de hasta arriba, el siguiente numero se coloca en la fila de abajo y una casilla a la derecha. Para el movimiento a la derecha, si el numero anterior esta en la columna de la derecha, el siguiente numero se colocaria en la columna de la izquierda

Código: Text
  1. . 1 .          . 1 .
  2. . . .          3 . .
  3. . . 2          . . 2
  4.  

3. Cuando el ultimo numero escrito es multiplo del tamaño de la matriz (en este caso 3,6,9), el siguiente numero se coloca debajo de ese numero

Código: Text
  1. . 1 .
  2. 3 . .
  3. 4 . 2
  4.  

4. Se continua con el paso 2

Código: Text
  1.  
  2. . 1 6          . 1 6          8 1 6
  3. 3 5 .          3 5 7          3 5 7
  4. 4 . 2          4 . 2          4 9 2
  5.  

Como mencione, estos pasos aplican para todas las matrices de tamaño impar:

Código: Text
  1.  
  2. 17   24    1  8   15
  3. 23    5    7  14  16
  4.  4    6   13  20  22
  5. 10   12   19  21   3
  6. 11   18   25   2   9
  7.  

posman

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Cuadrado Magico
« Respuesta #3 en: Martes 9 de Diciembre de 2008, 19:31 »
0
Código: Text
  1. #include <stdio.h>
  2.  
  3. char *matriz;
  4. char n;
  5. int cuad;
  6.  
  7. void guardarValor(lin, col, valor) {
  8.     int pos = ((lin-1)*n) + (col-1);
  9.     matriz[pos] = valor;
  10. }
  11. void imprimeMatriz() {
  12.     int cont;
  13.     for(cont=1;cont<=cuad;cont++) {
  14.         printf("%dt",matriz[cont-1]);
  15.         if ( cont%n == 0 ) printf("n");
  16.     }
  17. }
  18. int main() {
  19.     int cont, posL, posC;
  20.  
  21.     n = 5;
  22.     cuad = n*n;
  23.     matriz = (char *)malloc(cuad*sizeof(char));    //reservar memoria
  24.     for(cont=0;cont<cuad;cont++) matriz[cont] = 0; //inicializar matriz
  25.  
  26.     cont = 1;
  27.     posL = 1;     //primer linea
  28.     posC = n/2+1; //celda intermedia
  29.     while ( cont<=cuad ) {
  30.         guardarValor(posL,posC,cont);
  31.         if ( cont%n == 0 ) { //si el numero es multiplo de n
  32.             posL++; //unicamente aumentar la linea
  33.         } else {
  34.             posL--;
  35.             //si es menor de la primer linea
  36.             //escribir numero en la ultima linea
  37.             if ( posL < 1 ) posL = n;
  38.             posC++;
  39.             //si es mayor que la ultima columna
  40.             //escribir numero en la primer columna
  41.             if ( posC > n ) posC = 1;
  42.         }
  43.         cont++;
  44.     }
  45.     imprimeMatriz();
  46.     free(matriz);
  47.     return 0;
  48. }
  49.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Cuadrado Magico
« Respuesta #4 en: Miércoles 10 de Diciembre de 2008, 09:15 »
0
Hala, ya tienes la tarea hecha :P

betopin

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
    • http://www.programasenc.blogspot.com
Re: Cuadrado Magico
« Respuesta #5 en: Lunes 2 de Febrero de 2009, 05:30 »
0
Se que es algo viejo el post pero me gustaria hacer mi propio codigo tambien...ya describiste las reglas para las matrices impares...que pasa con una matriz par...cual es la regla ahi???

Alguien la sabe???

Gracias

Cita de: "posman"
Ademas no es ningun reto. Existen reglas para llenar ese cuadro.

Primero, la matriz debe ser de numeros impares (3x3, 5x5, 7x7, etc).
1. El numero 1 se coloca en la fila de arriba en el lugar del medio

Código: Text
  1. . 1 .
  2. . . .
  3. . . .
  4.  

2. Los numeros se escriben del 1 al 9. El siguiente numero se coloca un lugar arriba y a la derecha. Me explico. Para el movimiento hacia arriba, si el numero anteriror se coloco en la fila de hasta arriba, el siguiente numero se coloca en la fila de abajo y una casilla a la derecha. Para el movimiento a la derecha, si el numero anterior esta en la columna de la derecha, el siguiente numero se colocaria en la columna de la izquierda

Código: Text
  1. . 1 .          . 1 .
  2. . . .          3 . .
  3. . . 2          . . 2
  4.  

3. Cuando el ultimo numero escrito es multiplo del tamaño de la matriz (en este caso 3,6,9), el siguiente numero se coloca debajo de ese numero

Código: Text
  1. . 1 .
  2. 3 . .
  3. 4 . 2
  4.  

4. Se continua con el paso 2

Código: Text
  1.  
  2. . 1 6          . 1 6          8 1 6
  3. 3 5 .          3 5 7          3 5 7
  4. 4 . 2          4 . 2          4 9 2
  5.  

Como mencione, estos pasos aplican para todas las matrices de tamaño impar:

Código: Text
  1.  
  2. 17   24    1  8   15
  3. 23    5    7  14  16
  4.  4    6   13  20  22
  5. 10   12   19  21   3
  6. 11   18   25   2   9
  7.  

betopin

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
    • http://www.programasenc.blogspot.com
Re: Cuadrado Magico
« Respuesta #6 en: Sábado 21 de Febrero de 2009, 06:12 »
0
Saludos

Yo acepté el reto y logré cumplirlo con creces. Encontré suficiente información para realizar un aplicativo que me genere un cuadrado mágico de cualquier orden, par o impar.

Elaboré dos programas

1) ANSI C, sobre consola
2) Una aplicacion creada desde Borland Builder

El codigo, mas la aplicacion en Builder, mas info adicional, todo en el siguiente enlace

http://programasenc.blogspot.com/2009/02/cuadrado-magico.html

Muchas gracias por el reto!!!