Categoría: Solución 2da Evaluación

  • s2Eva_IT2015_T3 Distribuye tortugas en región

    Ejercicio: 2Eva_IT2015_T3 Distribuye tortugas en región

    Algoritmo 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

    Algoritmo en Python

    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
  • s2Eva_IIT2014_T2 Listar multas infractores metrovía

    Ejercicio: 2Eva_IIT2014_T2 Listar multas infractores metrovía

    continuación del tema 1. Propuesta de solución en Python:

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2014_T2 Listar multas infractores metrovía
    # Tarea: Calcular el total de multas a recaudar
    import numpy as np
    
    def multametrovia(veces,basico):
        pagar = 0
        i = 1
        while not(i>veces):
            if (i==1):
                pagar = basico + 0.1*basico
            if (i>1):
                pagar = pagar + 2*basico+0.1*basico
            i = i + 1
        return(pagar)
    
    # 2Eva_IIT2014_T2 Listar multas infractores metrovía
    # usa la funcion anterior
    
    # INGRESO
    n = int(input('cuantas infracciones: '))
    i = 0
    codigo = []
    while not(i>=n):
        placa = input('codigo: ')
        codigo.append(placa)
        i = i + 1
    
    # PROCEDIMIENTO
    
    # marcar los únicos
    unico = np.ones(n,dtype=int)
    i = 0
    penultimo = n-1
    while not(i>=penultimo):
        j = i + 1
        while not(j>=n):
            if (codigo[i]==codigo[j]):
                unico[j] = 0 
            j = j + 1
        i = i + 1
    
    # copiar en nueva lista placas únicas
    infractor = []
    i = 0
    while not(i>=n):
        if (unico[i]==1):
            infractor.append(codigo[i])
        i = i + 1
    
    # contar los repetidos vector veces
    m = len(infractor)
    veces = np.zeros(m,dtype=int)
    i = 0
    while not(i>=n):
        placa = codigo[i]
        
        # busca en infractores
        j = 0
        while not(j>=m):
            if (placa==infractor[j]):
                veces[j] = veces[j] + 1
            j = j + 1
        i = i + 1
    
    # multas
    multas = np.zeros(m,dtype=float)
    j = 0
    while not(j>=m):
        multas[j] = multametrovia(veces[j],354)
        j = j + 1
    
    # Tarea: total a recaudar por multas
    
    # SALIDA
    print(unico)
    print(infractor)
    print('La lista de infractores y multas es:')
    j = 0
    while not(j>=m):
        print(infractor[j],multas[j])
        j = j + 1
    

    resultado del algoritmo

    cuantas infracciones: 4
    codigo: 123
    codigo: 456
    codigo: 1020
    codigo: 456
    [1 1 1 0]
    ['123', '456', '1020']
    La lista de infractores y multas es:
    123 389.4
    456 1132.8000000000002
    1020 389.4
    >>> 
    
  • s2Eva_IIT2014_T1 Multas por invadir carril metrovía

    Ejercicio: 2Eva_IIT2014_T1 Multas por invadir carril metrovía

    Propuesta de solución en Python para tema 1, continúa en tema 2.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2014_T1 Multas por invadir carril metrovía
    # Tarea: Calcular el total de multas a recaudar
    import numpy as np
    
    def multametrovia(veces,basico):
        pagar = 0
        i = 1
        while not(i>veces):
            if (i==1):
                pagar = basico + 0.1*basico
            if (i>1):
                pagar = pagar + 2*basico+0.1*basico
            i = i + 1
        return(pagar)
    

    resultado del algoritmo

    >>> multametrovia(1, 354.00)
    389.4
    >>> multametrovia(2, 354.00)
    1132.8000000000002
    >>> multametrovia(3, 354.00)
    1876.2000000000003
    >>> 
    
  • s2Eva_IT2014_T2 Programar una Función color RGB a gris

    Ejercicio: 2Eva_IT2014_T2 Función color RGB a gris

    Propuesta de solución en Python:

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2014_T2 Función color RGB a gris
    # propuesta: edelros@espol.edu.ec
    
    import numpy as np
    
    def convertirgris(RGB):
        rojo  = RGB[0]
        verde = RGB[1]
        azul  = RGB[2]
    
        # Mezcla colores
        gris = 0.2989*rojo + 0.5870*verde + 0.1140*azul
        gris = int(gris)
    
        if (rojo>255 or verde>255 or azul>255):
            gris = -1
        # Tarea: verificar para colores <0
        
        return(gris)
    
    
  • s2Eva_IT2014_T3 Imagen RGB a gris

    Ejercicio: 2Eva_IT2014_T3 Imagen RGB a gris

    Algoritmo en Python

    continuación del tema 2, solución propuesta en Python:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2014_T2 Función color RGB a gris
    # propuesta: edelros@espol.edu.ec
    
    import numpy as np
    
    def convertirgris(RGB):
        rojo  = RGB[0]
        verde = RGB[1]
        azul  = RGB[2]
    
        # Mezcla colores
        gris = 0.2989*rojo + 0.5870*verde + 0.1140*azul
        gris = int(gris)
    
        if (rojo>255 or verde>255 or azul>255):
            gris = -1
        # Tarea: verificar para colores <0
        
        return(gris)
    
    # 2Eva_IT2014_T3 Imagen RGB a gris
    def fotoagris(imagen):
        color,n,m   = np.shape(imagen)
        blanconegro = np.zeros(shape=(n,m),dtype=int)
    
        # por cada pixel
        fila = 0
        while not(fila>=n):
            columna = 0
            while not(columna>=m):
                rojo  = imagen[0,fila,columna]
                verde = imagen[1,fila,columna]
                azul  = imagen[2,fila,columna]
                # para convertir
                RGB  = [rojo,verde,azul]
                gris = convertirgris(RGB)
                # poner el punto en gris
                blanconegro[fila,columna] = gris
    
                columna = columna + 1
            fila = fila + 1
    
        return(blanconegro)
    

    Ejemplo de ejecución. Se proporciona la imagen como aun arreglo[color,fila,columna]
    Puede copiar los valores de imagen y pegarlo en la linea de instruccion>>>
    Luego invocar a la funcion fotoagris(imagen)

    >>>imagen=np.array([[[12, 27, 42, 46, 74],
            [ 3, 21, 33, 48, 67],
            [ 5, 18,  0, 57, 73],
            [ 6, 25, 31, 52, 69],
            [13, 24, 40, 54, 64]],
    
           [[13, 26, 40, 46, 66],
            [15, 23, 45, 55, 62],
            [ 3, 22,  0, 48, 70],
            [ 6, 24, 39, 58, 68],
            [ 8, 29, 35, 56, 72]],
    
           [[ 5, 28, 37, 58, 64],
            [ 7, 24, 34, 48, 75],
            [ 9, 17,  0, 50, 62],
            [12, 30, 43, 56, 68],
            [ 4, 26, 45, 49, 74]]])
    >>> fotoagris(imagen)
    array([[11, 26, 40, 47, 68],
           [10, 22, 40, 52, 64],
           [ 4, 20,  0, 50, 69],
           [ 6, 24, 37, 55, 68],
           [ 9, 27, 37, 54, 69]])
  • s2Eva_IT2014_T1 Palabras con eco

    Ejercicio: 2Eva_IT2014_T1 Palabras con eco

    Propuesta de solución en Python:

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2014_T1 Palabras con eco
    # TAREA: solo compara la ultima letra
    #        completar para al menos tres letras
    
    # INGRESO
    frase = input('frase: ')
    
    # PROCEDIMIENTO
    eco = 1
    n = len(frase)
    
    # ultima letra de la ultima palabra
    a = frase[n-1]
    
    # ultima letra de la penultima palabra
    # Buscar letra en la otra palabra
    b = ''
    i = n-1
    while (i>0):
        if (frase[i]==' '):
            b = frase[i-1]
        i = i - 1
    
    # letras eco
    if not(a==b):
        eco = 0
    # Completar para al menos las tres ultimas letras
    
    # SALIDA
    print(eco)
    

    resultado del algoritmo

    >>> 
    frase: coso oloroso
    1
    >>> 
    frase: casa erwq
    0
  • s2Eva_IIT2012_T2 Cifrado César

    Ejercicio: 2Eva_IIT2012_T2 Cifrado César

    El ejercicio se desarrolla primero con el ejemplo del enunciado, con mensaje='HOLA' y llave='3'.

    Luego de resuelto el ejemplo se incorporan las situaciones de desplazamientos de posiciones en los extremos y la forma de función del algoritmo.

    Ejemplo de ejecución del algoritmo

    >>> cifradocesar('hola',3)
    'KROD'
    >>> cifradocesar('HoLa',3)
    'KROD'
    >>>

    Algoritmo en Python

    # 2Eva_IIT2012_T2 Cifrado César
    # propuesta: edelros@espol.edu.ec
    
    ### INGRESO
    ##mensaje = input('mensaje: ')
    ##llave   = int(input('llave: '))
    
    # PROCEDIMIENTO
    def cifradocesar(mensaje,llave):
        alfabeto = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        m = len(alfabeto)
    
        # mensaje en mayusculas
        mensaje = mensaje.upper()
        t = len(mensaje)
    
        # crear resultado desde primera letra
        resultado = ''
        i = 0
        while i<t:
            
            letra = mensaje[i]
            # buscar letra en alfabeto
            encontre = -1
            j = 0
            while j<m and encontre<0:
                if letra==alfabeto[j]:
                    encontre = j
                j = j + 1
                
            # cifrado Cesar
            nueva = encontre + llave
            if nueva>m:
                nueva = nueva - m
            if nueva<0:
                nueva = nueva + m
            cifrado = alfabeto[nueva]
            resultado = resultado + cifrado
            i = i + 1
        return(resultado)
    
    ### SALIDA
    ##print('cifrado César: ',resultado)
    

    Tarea: En el caso que el mensaje tiene un caracter espacio ' ' o ',' es decir un caracter que no está en el alfabeto, éste no se reemplaza. De no implementarse se muestra un error en la codificación, mostrado en rojo en el ejemplo.

    >>> cifradocesar('hola,hola',3)
    'KRODCKROD'
    >>> 
    

    Propuesta de solución en Python y también en versión matlab:

    ejercicios resueltos Python 2eva_iit2012_t2 pdf

    ejercicios resueltos Matlab 2eva_iit2012_t2 pdf

  • s2Eva_IIT2012_T1 Recursiva Multi

    Ejercicio: 2Eva_IIT2012_T1 Recursiva Multi

    Resultado esperado

    >>> multi(3,5)
    15
    >>> multi(7,8)
    56
    >>> 
    

    Algoritmo en Python

    # 2Eva_IIT2012_T1 Recursiva Multi
    
    def multi(p,q):
        if q == 0:
            z = 0
        if q>0 :
            z = p + multi(p,q-1)
        return(z)
    
  • s2Eva_IT2012_T2 Número de tecla en cifrado musical con Python

    Ejercicio: 2Eva_IT2012_T2 Tecla de cifrado musical americano

    explicación en video

    Algoritmo en Python

    Propuesta de solución en Python:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2012_T2 Tecla de cifrado musical americano
    # Tarea: implementar sostenido '#'
    #        validar que # aplica
    
    def teclanum(cancion):
        n = len(cancion)
        teclado = ' C#D#EF#G#A#B'
        secuencia = '' 
        i = 0
        while not(i>=n):
            tecla = cancion[i]
            if (tecla!='#'):
                cual = teclado.find(tecla)
                sigue = ''
                if (i<(n-1)):
                    sigue = cancion[i+1]
                if (sigue=='#'):
                    cual = cual+1
                secuencia = secuencia + str(cual) + ' '
            i = i + 1
        return(secuencia)
    
    # Programa de prueba
    cancion = 'EFGGFEDCCDEED'
    numeros = teclanum(cancion)
    print(numeros)