2Eva_IIT2015_T1 función lipovocal(frase)

2da Evaluación II Término 2015 – 2016, Febrero 02, 2016 /ICM00794

Tema 1. (20 puntos). Un lipograma es un texto que se construye prescindiendo voluntariamente de alguna letra del abecedario.

Realice una función lipovocal(frase) que reciba una frase, retornando como respuesta la única vocal que falta; o la respuesta de ‘no cumple’ en caso que tenga más de una vocal faltante.

Ejemplo: 
>> frase='Con ojillos oscuros, luminosos, ambas tan blancas como dos palomas, cruzando prados y salvando lomas hoy las vi con dos pícaros gomosos.'
>> lipovocal(frase)
'e'
>> frase='murcielago'
>> lipovocal(frase)
'no cumple'

Rúbrica: Definir función (5 puntos), buscar faltante (5 puntos), validar frase (5 puntos), algoritmo estructurado (5 puntos).

2Eva_IT2015_T4 Movilidad de tortugas en región

2da Evaluación I Término 2015 – 2016, Septiembre 08, 2015 /ICM00794

Tema 4 (30 puntos). Ejecutado el plan para repoblar las tortugas en la isla del tema anterior, se requiere simular la movilidad de las tortugas.

En una situación inicial y usando la función del tema anterior se distribuye una tortuga por casilla.

Para una situación posterior se simula el movimiento de cada tortuga como:

  • se queda en la cuadrícula o
  • se mueve una casilla en diagonal.

Observe que ahora las casillas podrían albergar más de una tortuga o al moverse podrían salirse de la cuadrícula y luego no ser parte del conteo de movilidad.

Escriba un programa para simular el evento y realice los pasos para calcular y mostrar:

a) ¿Cuántas cuadrículas quedaron sin tortugas?
b) La cantidad de tortugas que salieron de la región de control.
c) Las coordenadas (fila y columna) de la matriz posterior en las que aumentó la cantidad de tortugas al compararla con la matriz inicial.

Ejemplo:
>>>
cuántas filas: 4
cuántas columnas: 6
tortugas por casilla: 1
Total de tortugas: 20
inicial
[[1 1 1 1 0 1]
 [1 1 1 1 1 1]
 [1 1 0 1 1 1]
 [1 0 1 0 1 1]]
posterior
[[0 1 2 0 0 0]
 [0 0 2 0 1 1]
 [1 1 0 1 1 0]
 [0 0 0 0 0 0]]
sin tortugas: 15
tortugas salieron: 9
Aumentó población en: [[0, 2], [1, 2]]
>>>

Referencia: Isla Santa Fe volverá a tener tortugas gigantes. 04-06-2015. http://www.expreso.ec/historico/isla-santa-fe-volvera-a-tener-tortugas-gigant-LQGR_8036008

Rúbrica: matriz inicial (5 puntos), mueve cada tortuga (5 puntos), revisar pérdida (5 puntos), literal a y b (5 puntos c/u), literal c (5 puntos)

2Eva_IT2015_T3 Distribuye tortugas en región

2da Evaluación I Término 2015 – 2016, Septiembre 08, 2015 /ICM00794

Tema 3 (20 puntos) La isla Santa Fe en el archipiélago de Galápagos, volverá a ser poblada por tortugas gigantes como parte del trabajo de conservación y restauración ecológica en el archipiélago.

El plan para repoblar se realizó con un total de jóvenes tortugas originarias de la isla y criadas en cautiverio.

Para medir la movilidad de las tortugas en una región de control rectangular con nxm Km se la ha dividido en cuadrículas de 1×1 Km.

Realice una función distribuye(n, m, q, total) que en una matriz de tamaño nxm distribuya q tortugas como máximo en cada casilla con posición aleatoria. La suma de los elementos de la matriz no debe ser mayor que el total de tortugas criadas en cautiverio.

>>distribuye(4,6,5,20)
matriz
0 0 0 0 0 0
0 0 1 5 0 0
2 1 4 0 0 0
5 0 2 0 0 0

Rúbrica: Definir función (5 puntos), uso de aleatorios (5 puntos), control de casillas y total (5 puntos c/u).

2Eva_IT2015_T2 Diccionario electrónico

2da Evaluación I Término 2015 – 2016, Septiembre 08, 2015 /ICM00794

Tema 2 (35 puntos). Un diccionario electrónico para estudiantes principiantes de español-quichua usará una lista de palabras entre ambos idiomas, semejante al tema anterior.

https://www.turismo.gob.ec/
https://www.turismo.gob.ec/

El estudiante creará su diccionario mientras aprende nuevas palabras, las que añadirá a su diccionario y lo guardará en un archivo.

Se usarán traducciones simples de una palabra o una frase sin considerar la gramática, tan solo sustituyendo la palabra traducida si se encuentra en su diccionario.

Al traducir, para indicar el modo se usará un indicador numérico:

(1) quichua a español y
(2) español a quichua.

Un Ejemplo para traducir una frase en modo (2), se tiene:
 Español: 'ciencia y tecnología al servicio del país'
 Quichua: 'ciencia pash iyayku man mañay pak mamallakta'

Escriba un programa con el menú presentado para ejecutar las tareas descritas.

Menú:
1. Traducir palabras
2. Traducir una frase
3. Añadir palabras al diccionario
4. Guardar archivo del diccionario
5. Abrir archivo del diccionario
6. Salir

Nota: Use la función del tema anterior. Considere que la frase no tiene signos de puntuación

Rúbrica: Menú (5 puntos), caso 3, 4 y 5 (5 puntos c/u), usar función (5 puntos), separar palabras (3 puntos), traducir frase (7 puntos)

2Eva_IT2015_T1 kutipak() quichua-español

2da Evaluación I Término 2015 – 2016, Septiembre 08, 2015 /ICM00794

Tema 1 (15 puntos). Para traducir palabras entre español y quichua se dispone en memoria de una lista denominada diccionario.

Realice una función kutipak(palabra, modo, diccionario) para traducir una palabra. 

El tipo de traducción se indica mediante el “modo”:

(1) quichua a español y
(2) español a quichua.

En caso que la palabra no está en el diccionario se obtiene una cadena vacía.

>>> kutipak('wasi',1,diccionario)
 'casa'
 >>> kutipak('lugar',2,diccionario)
 'kuska'
 >>> kutipak('avión',2,diccionario)
 ''
diccionario
quichua español
man al
wasi casa
pak del
kuska lugar
pash y
iyayku tecnología
mañay servicio
mamallakta país
kutipak traductor

Referencia: http://kichwas.evocero.com/
Rúbrica: Definir función y parámetros (5 puntos), seleccionar modo (5 puntos), buscar equivalente (5 puntos).


listas

quichua = ['man','wasi','pak','kuska','pash','iyayku','mañay','mamallakta','kutipak']
espanol = ['al','casa','del','lugar','y','tecnología','servicio','país','traductor']

listas de listas

diccionario = [['man', 'al'],
               ['wasi', 'casa'],
               ['pak', 'del'],
               ['kuska', 'lugar'],
               ['pash','y'],
               ['iyayku', 'tecnología'],
               ['mañay', 'servicio'],
               ['mamallakta', 'país'],
               ['kutipak', 'traductor']]

colecciones

diccionario = {'man':'al',
               'wasi':'casa',
               'pak':'del',
               'kuska':'lugar',
               'pash':'y',
               'iyayku':'tecnología',
               'mañay':'servicio',
               'mamallakta':'país',
               'kutipak ':'traductor'}

s2Eva_IT2015_T2 Diccionario electrónico

Ejercicio: 2Eva_IT2015_T2 Diccionario electrónico

Propuesta de solución en Python:

presentado el ejercicio iniciado en clases. Tiene tarea por desarrollar:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IT2015_T2 Diccionario electrónico
# diccionario de palabras usando listas
# Tarea: Desarrollar las opciones para archivos.

def kutipak(palabra, modo, diccionario):
    n = len(diccionario)
    traducido = '' 
    if (modo==1):
        # quichua a español
        encontre = 0
        donde = -1
        i = 0
        while not(i>=n or encontre ==1):
            if (palabra.lower() == diccionario[i][0]):
                traducido = diccionario[i][1]
                encontre = 1
                donde = i
            i = i+1
    # Tarea, desarrolle el modo 2
    
    return(traducido)

diccionario = [['man', 'al'],
               ['wasi', 'casa'],
               ['pak', 'del'],
               ['kuska', 'lugar'],
               ['pash','y'],
               ['iyayku', 'tecnología'],
               ['mañay', 'servicio'],
               ['mamallakta', 'país'],
               ['kutipak', 'traductor']]

# tema 2. PROGRAMA
opcion = -1
while not(opcion ==6):
    print('...')
    print('1. Traducir palabras')
    print('2. Traducir una frase')
    print('3. Añadir palabras al diccionario')
    print('4. Guardar archivo del diccionario')
    print('5. Abrir archivo del diccionario')
    print('6. Salir')
    
    opcion = int(input('  cual opcion: '))
##    while not(opcion>=1 and opcion<=6):
##        print(' *** revisar las opciones disponibles ***')
##        opcion = int(input('  cual opcion: '))

    if (opcion==1):
        print('==== 1. Traducir palabras')
        palabra = input('palabra a traducir: ')
        modo = int(input('(1) quichua-español, (2) español-quichua: '))
        traducida = kutipak(palabra, modo, diccionario)
        print('su significado: ', traducida)

    elif (opcion==2):
        print('==== 2. Traducir una frase')
        print('palabras separadas solo por espacios')
        frase = input('frase a traducir: ')
        modo = int(input('(1) quichua-español, (2) español-quichua: '))
        partes = frase.split(' ')
        m = len(partes)
        oracion = ''
        j = 0
        while not(j>=m):
            traducida = kutipak(partes[j], modo, diccionario)
            oracion = oracion + ' '+ traducida
            j = j+1
        print('traduccion de frase: ')
        print(oracion)

    elif (opcion==3):
        print('==== 3. Añadir palabras al diccionario')

    elif (opcion==4):
        print('==== 4. Guardar archivo del diccionario')

    elif (opcion==5):
        print('==== 5. Abrir archivo del diccionario')

    elif (opcion==6):
        print('==== Gracias por usar el software ====')
        print('==== usuario@espol.edu.ec ====')

    else:
        print(' *** revisar las opciones disponibles ***')

s2Eva_IT2015_T1 kutipak() quichua-español

Ejercicio: 2Eva_IT2015_T1 kutipak() quichua-español

Propuesta de solución en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IT2015_T1 kutipak() quichua-español
# incluye usar el modo

# Usando diccionario[quichua][español]
diccionario = {'man':'al',
               'wasi':'casa',
               'pak':'del',
               'kuska':'lugar',
               'pash':'y',
               'iyayku':'tecnología',
               'mañay':'servicio',
               'mamallakta':'país',
               'kutipak ':'traductor'}

def kutipak(palabra, modo, diccionario):
    traducido = ''
    
    if (modo == 1):     
        if (palabra in diccionario)==1:
            traducido = diccionario[palabra]

    if (modo == 2):
        n = len(diccionario)
        encontre = ''
        for elemento in diccionario:
            if (palabra == diccionario[elemento]):
                encontre = elemento
        traducido = encontre

    return(traducido)

s2Eva_IT2015_T3 Distribuye tortugas en región

Ejercicio: 2Eva_IT2015_T3 Distribuye tortugas en región

Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IT2015_T3 Distribuye tortugas en región
import numpy as np
import random as rnd

# Tarea: Verificar que total sea menor
# que capacidad de la isla, si lo es,
# retorna matriz con -1 como isla sobrepoblada.

def distribuye(n,m,q,total):
    # Region de la isla 
    isla = np.zeros(shape=(n,m),dtype=int)
    tortuga = 1
    while not(tortuga>total):
        f = int(rnd.random()*n)+0
        c = int(rnd.random()*m)+0
        if (isla[f,c]<q):
            isla[f,c] = isla[f,c] +1
            tortuga = tortuga+1
    return(isla)

s2Eva_IT2015_T4 Movilidad de tortugas en región

Ejercicio: 2Eva_IT2015_T4 Movilidad de tortugas en región

Propuesta de solución en Python, continúa desde el tema 3:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IT2015_T3 Distribuye tortugas en región
import numpy as np
import random as rnd

def distribuye(n,m,q,total):
    isla = np.zeros(shape=(n,m),dtype = int)
    unatortuga = 1
    while not(unatortuga > total):
        fila = int(rnd.random()*n)+0
        columna = int(rnd.random()*m)+0
        if (isla[fila,columna]<q):
            isla[fila,columna] = isla[fila,columna] + 1
            unatortuga = unatortuga+1
    return(isla)

# 2Eva_IT2015_T4 Movilidad de tortugas en región
# usar funciones para operaciones intermedias
def cuentaceros(isla):
    tamano = np.shape(isla)
    n = tamano[0]
    m = tamano[1]
    cuenta = 0
    for f in range(0,n,1):
        for c in range(0,m,1):
            if (isla[f,c] ==0):
                cuenta = cuenta +1
    return(cuenta)

def muevetortuga(isla):
    tamano = np.shape(isla)
    n = tamano[0]
    m = tamano[1]
    # crear una situacion posterior,
    # donde se mueve cada tortuga
    posterior = np.zeros(shape=(n,m),dtype = int)
    for f in range(0,n,1):
        for c in range(0,m,1):
            cuantas = isla[f,c]
            if (cuantas>=1):
                tortugas = 1
                while not(tortugas>cuantas):
                    # mueve una tortuga
                    mueve = int(rnd.random()*5)+0
                    if (mueve ==1):
                        # verifica limites, sino se pierde la tortuga
                        if ((f-1)>=0 and (c-1)>=0):
                            posterior[f-1,c-1] = posterior[f-1,c-1] +1
                    if (mueve ==2):
                        if ((f-1)>=0 and (c+1)<m):
                            posterior[f-1,c+1] = posterior[f-1,c+1] +1
                    if (mueve ==3):
                        if ((f+1)=0):
                            posterior[f+1,c-1] = posterior[f+1,c-1] +1
                    if (mueve ==4):
                        if ((f+1)<n and (c+1)<m):
                            posterior[f+1,c+1] = posterior[f+1,c+1] +1
                    tortugas = tortugas +1
    return(posterior)


# INGRESO
n = int(input('filas : '))
m = int(input('columnas : '))
q = int(input('maximo por casilla : '))
total = int(input('tortugas en cautiverio : '))
# Tarea: validar que total no exceda capacidad de isla

# PROCEDIMIENTO
inicial = distribuye(n,m,q,total)
inicialceros = cuentaceros(inicial)
posterior = muevetortuga(inicial)
perdidas = np.sum(inicial)- np.sum(posterior)

# SALIDA
print('isla al inicio: ')
print(inicial)
print('casillas vacias en inicial: ', inicialceros)
print('isla despues de un periodo: ')
print(posterior)
print('tortugas perdidas: ', perdidas)

Nota: considera que si la tortuga sale de la matriz, ya no se la cuenta, desaparece, muere.

filas : 4
columnas : 6
maximo por casilla : 5
tortugas en cautiverio : 20
isla al inicio:
[[1 1 1 0 0 3]
 [0 2 1 2 0 1]
 [0 0 0 0 1 0]
 [2 2 3 0 0 0]]
casillas vacias en inicial:  12
isla despues de un periodo:
[[0 0 2 1 1 0]
 [0 0 0 0 0 0]
 [2 1 0 0 1 0]
 [0 0 0 1 0 0]]
tortugas perdidas:  11

3Eva_IIT2015_T4 Orientar código QR (Quick Response Code)

3ra Evaluación II Término 2015-2016, Febrero 16, 2016 /ICM00794

Tema 4 (20 puntos). El código QR (Quick Response Code) se usa para administrar inventarios en una gran variedad de industrias.
La imagen del código QR puede ser tomada en cualquier orientación, pero para interpretarla se debe poner en la forma mostrada en la imagen del primer ejemplo.

Codigo QRRealice un programa que lea una matriz de código QR desde un archivo ‘codigoQR.txt’, y usando otra matriz de un archivo ‘referenciaQR.txt’ de tamaño 8×8, realice las rotaciones necesarias para orientar correctamente el código. codigoQR_girado

Nota: Suponga que ‘códigoQR.txt‘ y ‘referenciaQR.txt‘ tienen matrices QR válidas.
Use numpy.loadtxt(‘archivo.txt’, dtype=int) para cargar el archivo, además de las funciones del tema anterior.
Use numpy.array_equal(A, B) que responde 1 para matrices iguales y 0 para diferentes.

Rúbrica: ingreso datos (5 puntos), comparar esquinas (5 puntos), determinar rotación (5 puntos), uso apropiado de funciones (5 puntos)