Ejercicio: 3Eva_IIT2015_T4 Orientar código QR (Quick Response Code)
Propuesta de solución en Python para 3ra Eva. II Término 2015 Tema 3 y 4.
Los archivos para probar el algoritmo son:
# ICM00794-Fundamentos de Computación - FCNM-ESPOL # 3Eva_IIT2015_T3 funciones matrices rotar, extraer # propuesta: edelros@espol.edu.ec # version con lazos y condicionales. # tarea: simplificar lazos con 'for' import numpy as np # Tema 3 a) def rotando(matriz,k): #cuenta rotaciones cuenta = 0 while not(cuenta>=k): n,m = matriz.shape tabla = numpy.zeros(shape=(m,n),dtype=int) # inicia rotación i = 0 while not(i>=n): j = 0 while not(j>=m): f = j c = (n-1)-i tabla[f,c] = matriz[i,j] j = j + 1 i = i + 1 matriz = np.copy(tabla) cuenta = cuenta + 1 return(matriz) # Tema 3 b) funcion para extraer una esquina # de tamaño t de una matriz # k=0 ;esquina superior izquierda # k=1 ;esquina superior derecha # k=3 ;esquina inferior izquierda # k=2 ;esquina inferior derecha def extraeresquina(matriz,k,t): n,m = matriz.shape esquina = np.zeros(shape=(t,t), dtype=int) i = 0 while not(i>=t): j = 0 while not(j>=t): if (k==0): f = i c = j if (k==1): f = i c = (m-t)+j if (k==2): f = (n-t)+i c = (m-t)+j if (k==3): f = (n-t)+i c = j esquina[i,j]=matriz[f,c] j = j+1 i = i+1 return(esquina) # Tema 4 ------------------------------ # Programa para orientar el codigo QR # INGRESO por lectura desde un archivo codigo = np.loadtxt('codigo.txt',dtype=int) referencia = np.loadtxt('referencia.txt',dtype=int) # PROCEDIMIENTO # comparando código y esquinas de referencia # resultados por esquina t,r = referencia.shape compara = np.zeros(4, dtype=int) #compara esquinas k = 0 while not(k>=4): esquina = extraeresquina(codigo,k,t) esqgirada = rotando(referencia,k) compara[k] = np.array_equal(esquina,esqgirada) k = k + 1 # Selecciona la rotacion if (compara[0]==1 and compara[1]==1 and compara[2]==0 and compara[3]==1): orientado = rotando(codigo,0) if (compara[0]==1 and compara[1]==0 and compara[2]==1 and compara[3]==1): orientado = rotando(codigo,1) if (compara[0]==0 and compara[1]==1 and compara[2]==1 and compara[3]==1): orientado = rotando(codigo,2) if (compara[0]==1 and compara[1]==1 and compara[2]==1 and compara[3]==0): orientado = rotando(codigo,3) # SALIDA print(orientado)