¡Hola, Invitado!


Patrocinantes


Síguenos en Facebook


Síguenos en Twitter

Compartir este tema:
[Código] Cuadrado Mágico
Sifaw En línea
Moderador Global
******

Mensajes: 350
Registro en: Jul 2010
MySpace YouTube
Gracias dados: 25
Gracias recibidos: 32
Mensaje: #1
Cuadrado Mágico
  • Compartir en Delicious
  • Compartir en Digg
  • Compartir en Linkedin
  • Compartir en MySpace
  • Compartir en Technorati
  • Compartir en Tuenti
Un cuadrado mágico es una tabla donde se dispone de una serie de números enteros en un cuadrado o matriz de forma tal que la suma de los números por columnas, filas y diagonales principales sea la misma, la constante mágica. Usualmente los números empleados para rellenar las casillas son consecutivos, de 1 a n², siendo n el número de columnas y filas del cuadrado mágico.

El algoritmo usado por el código que les dejo a continuación sería el siguiente:

Código:
1º Colocamos el 1 en la mitad de la primera fila
2º colocamos el siguiente número en la casilla superior izquierda al último número que habíamos colocado
3º Repetimos paso 2 hasta que nos topemos con una casilla con un número. En tal caso, el siguiente número se colocaría en la casilla inferior al último número colocado.
4º Repetimos paso 2 y 3 hasta completar el cuadrado

Y aquí el código en python:

Lenguaje PYTHON
def pedirOrden():
    bien = False
    orden = 0
    while bien==False:
        orden = input("Introduzca el orden de la matriz(>1 e impar): ")
        if (orden>1) and (orden%2!=0):
            matriz["orden"]=orden
            bien = True
    for i in range(orden):
        matriz["cuadrado"].append([])
        for j in range(orden):
            matriz["cuadrado"][i].append(0)
 
def crearMagico():
    fila=0
    columna=matriz["orden"]/2
    num=1
    while (num<=matriz["orden"]**2):
        matriz["cuadrado"][fila][columna]=num
        num+=1
        fila-=1
        columna-=1
        if columna<0:
            columna = matriz["orden"]-1
        if fila<0:
            fila = matriz["orden"]-1
        if matriz["cuadrado"][fila][columna]!=0:
            fila += 2
            columna+=1
            if columna>=matriz["orden"]:
                columna -= matriz["orden"]
            if fila>=matriz["orden"]:
                fila -= matriz["orden"]
 
def mostrarMatriz():
    for i in range(matriz["orden"]):
        for j in range(matriz["orden"]):
            print "%i | " % (matriz["cuadrado"][i][j]),
        print "\n"
 
def main():
    cuadrado=[]
    global matriz
    matriz={"cuadrado":cuadrado, "orden":0}
    pedirOrden()
    crearMagico()
    mostrarMatriz()
 
if __name__ == "__main__":
    main()

[Imagen: moderadorglobal.png]
28-01-2012 10:53 PM
Buscar Citar




Usuario(s) navegando en este tema: 1 invitado(s)