Se muestra un ejercicio para realizar una matriz espiral en Python, acomodando una cadena de ceros y unos.
Python es un lenguaje de programación muy utilizado, que utiliza una sintaxis sencilla. Vamos a crear a continuación una matriz espiral binaria, es decir que contiene una cadena de ceros y unos. Te invito a ver el siguiente video donde se explica toda la realización del programa.
Descripción del problema: Matriz espiral binaria
Dado un número entero m, escriba un programa que lo convierta a combinación binaria y acomode cada uno de los bits de dicha combinación en una matriz de tamaño nxn.
El valor de n debe ser determinado en función del número de bits de la combinación binaria.
Los bits deben ser acomodados en espiral hacia el centro de la matriz, iniciando en la esquina superior izquierda, siguiendo hacia la derecha, luego hacia abajo, luego hacia la izquierda, luego hacia arriba y así sucesivamente.
Todas las localidades de la matriz deberán contener un dígito.
Secciones del código en Python
Función para convertir un número a binario en Python
def binario(decimal): binario = '' while decimal // 2 != 0: binario = str(decimal % 2) + binario decimal = decimal // 2 return str(decimal) + binario
El algoritmo aquí utilizado se muestra en la siguiente imagen:
Función para imprimir una matriz en Python
def imprimir(md): for x in md: for y in x: print (y, end="") print ()
Se utiliza print(y,end=””) para indicarle que ese print no genera salto de línea, para eso le pasamos como argumento end el valor de vacío.
Código para recibir la entrada y mandar a llamar la función que convierte a binario
# Recibir la entrada m = int(input()) # Convertir ese valor a binario binario = binario(m)
Cómo agregar ceros a la izquierda de una cadena binaria
# Agregar ceros a la izquierda n = math.ceil(math.sqrt(len(binario))) cerosizquierda = n*n-len(binario) strceros = "0" * cerosizquierda cadena = strceros + binario
Aquí utilizamos ceil para redondear un dato decimal al valor entero superior, así un valor como 3.8 se redondeará a 4.
Cómo crear una matriz de asteriscos o vacía de n x n usando una expresión generadora en Python
# Crear una matriz vacia de n x n md = [["*" for y in range(n)] for x in range(n)]
Llenar la matriz con los bits de la cadena binaria
# Llenar la matriz con los bits de la cadena binaria x = 0 y = 0 i = 0 limizq= 0 limder= n-1 limsup= 0 liminf= n-1 dir = 'der' while (i<len(cadena)): # colocar el valor md[y][x] = cadena[i] i+=1 # reajustar el siguiente movimiento if dir=='der': limsup=y+1 if x==limder: dir = 'aba' if y<liminf: y+=1 else: x+=1 continue if dir=='aba': limder=x-1 if y==liminf: dir = 'izq' if x>limizq: x-=1 else: y+=1 continue if dir=='izq': liminf=y-1 if x==limizq: dir = 'arr' if y>limsup: y-=1 else: x-=1 continue if dir=='arr': limizq=x+1 if y==limsup: dir = 'der' if x<limder: x+=1 else: y-=1 continue imprimir(md)
Te invito a ver el video de explicación del código para una mejor comprensión de lo que estamos realizando aquí. O bien deja en un comentario tu duda.
Tu comentario
opiniones