Categoría: Soluciones

Ejercicios resueltos de examen

  • s2Eva_IT2017_T3 Prueba de escritorio - cadenas, archivos, listas

    Ejercicio: 2Eva_IT2017_T3 Prueba de escritorio - cadenas, archivos, listas

    literal a. cadenas de caracteres, archivos de texto, listas de texto.

    literal b. conjuntos, unión, intersección, diferencia simétrica

  • s1Eva_IT2017_T1 Palabras puntaje

    Ejercicio: 1Eva_IT2017_T1 Palabras puntaje

    Propuesta de solución en Python, revisar tema indicado como tarea:

    Para iniciar el algoritmo se presenta un ejemplo busca como resultado: mostrar cada palabra y su puntaje.

    Al final se muestra la palabra que obtuvo mayor puntaje.

    palabra, puntaje:
    CAS*A* 6
    S*ASTR*E* 6
    R*EY* 6
    A*ZOTE* 14
    Mayor puntaje: 
    A*ZOTE* 14
    >>> 
    

    Algoritmo en Python

    En el bloque de ingreso se ha optado por incluir las palabras del ejercicio del enunciado.

    Para simplificar la identificación de las letras se convierten todas a mayusculas en caso que el usuario las escriba en minúsculas. Se utiliza un contador de "puntos" por cada "palabra".

    Luego se procesa cada palabra, analizando cada letra para encontrar su puntaje equivalente.

    # 1ra Evaluación I Término 2017
    # Tema 1. puntaje de palabras
    # Tarea: considere los '*'como doble puntaje
    #        para letra anterior
    import numpy as np
    
    # INGRESO
    # variaspalabras = input('Analizar: ')
    variaspalabras ='CAS*A*,S*ASTR*E*,R*EY*,A*ZOTE*'
    
    # PROCEDIMIENTO
    abecedario = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    equivale = [1,3,3,2,1,4,2,4,1,9,5,1,3,1,1,3,
                10,1,1,1,1,4,4,9,4,10]
    
    # unifica a mayúsculas
    variaspalabras = variaspalabras.upper()
    
    # separa las palabras por ','
    palabras = variaspalabras.split(',')
    
    n = len(palabras)
    
    # arreglo de puntos por cada palabra
    puntos = np.zeros(n,dtype=int)
    
    i = 0
    while (i<n):
        unapalabra = palabras[i]
        m = len(unapalabra)
    
        # Analiza palabra, letra por letra
        j = 0
        while (j<m):
            letra = unapalabra[j]
            if (letra in abecedario):
                donde = abecedario.index(letra)
                puntos[i] = puntos[i]+equivale[donde]
            j = j+1 # siguiente letra
        
        i = i+1  #siguiente palabra
    
    # encuentra posición del máximo puntaje
    cual = np.argmax(puntos)
    
    # SALIDA
    print('palabra, puntaje: ')
    i = 0
    while (i<n):
        print(palabras[i],puntos[i])
        i = i+1
    
    print('Mayor puntaje: ')
    print(palabras[cual],puntos[cual])
    
  • s1Eva_IT2017_T2 suscriptores de youtubers

    Ejercicio: 1Eva_IT2017_T2 suscriptores de youtubers

    Propuesta de solución en Python, procedimiento desarrollado por literal

    Algoritmo en Python

    # CCPG1001 Fundamentos de Programación FIEC-ESPOL
    # 1Eva_IT2017_T2 suscriptores de youtubers
    import numpy as np
    
    # INGRESO
    matriz = np.array([
        [  24771906, 5477807839,  21900,   262800],
        [ 184551280, 7046108694,  45500,   546000],
        [     76493,     798122,     36,      430],
        [    133538,   21104851,    156,     1900],
        [  18554394, 1967543913,   6700,    80000],
        [  12548964, 2034702069,  12200,    12200]])
    
    espana  = ['elrubiosOMG','VEGETTA777']
    ecuador = ['enchufetvLIVE','Kreizivoy']
    mexico  = ['Yuya','Werevertumorro']
    
    # PROCEDIMIENTO
    
    # Literal a) ********
    tamano = np.shape(matriz)
    n = tamano[0]
    m = tamano[1]
    
    rentabilidad = np.zeros(n,dtype=float)
    f = 0
    while not(f>=n):
        rentabilidad[f] = matriz[f,m-1]/matriz[f,0]
        f = f + 1
    
    cualganamas = np.argmax(rentabilidad)
    
    todos = espana + ecuador + mexico
    quienganamas = todos[cualganamas]
    
    dondees = 'español'
    if quienganamas in ecuador:
        dondees = 'ecuatoriano'
    if quienganamas in mexico:
        dondees = 'mexicano'
    
    # SALIDA
    print('literal a: ')
    print(rentabilidad)
    print('el mas rentable es: ',cualganamas)
    print('quien es mas rentable: ',quienganamas)
    print('del pais: ', dondees)
    
    
    # Literal b: ********
    # Solo trabajo con espana
    nsp = len(espana)
    datoespana = matriz[0:nsp,:]
    rentasp = datoespana[:,m-1]/datoespana[:,0]
    cualsp  = np.argmax(rentasp)
    quiensp = espana[cualsp]
    
    # SALIDA b)
    print('para espana: ')
    print(cualsp)
    print(quiensp)
    
    # literal c) ********
    ecmx=matriz[nsp:,0]
    popecmx    = np.argmax(ecmx)
    cuantoecmx = np.max(ecmx)
    
    ganan = 0
    suscritosp = matriz[0:nsp,0]
    f = 0
    while not(f>=nsp):
        if (suscritosp[f]>cuantoecmx):
            ganan = ganan + 1
        f = f + 1
        
    # SALIDA c)
    print('tienen mas en espana: ',ganan)
    
    # literal d) ********
    reproduce = matriz[:,1]
    cuantosrp = 0
    totalrp = 0
    f = 0
    while not(f>=n):
        if (reproduce[f]>1000000):
            cuantosrp = cuantosrp+1
            totalrp   = totalrp + reproduce[f]
        f = f + 1
    promrp = totalrp/cuantosrp
    
    # SALIDA d)
    print('promedio mas un millon: ',promrp)
    a=len(espana)
    rentaec = rentabilidad[a:a+len(ecuador)]
    

    resultado del algoritmo

    literal a: 
    [0.01060879 0.00295853 0.00562143 0.01422816 0.00431165 0.00097219]
    el mas rentable es:  3
    quien es mas rentable:  Kreizivoy
    del pais:  ecuatoriano
    para espana: 
    0
    elrubiosOMG
    tienen mas en espana:  2
    promedio mas un millon:  3309453473.2
    >>> 
    
  • s1Eva_IIT2016_T1 Analiza una frase por vocales y consonantes

    Ejercicio: 1Eva_IIT2016_T1 Analiza una frase por vocales y consonantes

    Propuesta de solución en Python, para:

    texto = 'Algunas Palabras pArA contar en un programa con algo de Python'
    Igual número de consonantes y vocales: 
    5
    >>>

    Para facilitar el trabajo con el texto, se convierten todas las letras a mayúsculas upper().

    En principio, se considera que las palabras se separan solo por espacios '  ', separando las palabras en sus partes usando la instrucción split('  '). Queda como tarea considerar otras formas de separar palabras con ',' y '.'

    >>> partes
    ['ALGUNAS', 'PALABRAS', 'PARA', 'CONTAR',
     'EN', 'UN', 'PROGRAMA', 'CON', 'ALGO',
     'DE', 'PYTHON']
    >>>

    Las vocales y consonantes se referencian con los caracteres en mayúsculas.

    El análisis se realiza por cada palabra, luego por cada letra, realizando el conteo de cada vocal y consonante.

    >>> j=0
    >>> palabra=partes[j]
    >>> palabra
    'ALGUNAS'
    >>> 
    

    El resultado se obtiene al comparar los contadores de vocal y consonante.


    Algoritmo en Python

    # CCPG1001 Fundamentos de Programación FIEC-ESPOL
    # 1Eva_IIT2016_T1 Analiza frase por vocales y consonantes
    # Solución propuesta: edelros@espol.edu.ec
    
    # INGRESO
    # texto = input('frase: ')
    texto = 'Algunas Palabras pArA contar en un programa con algo de Python'
    
    # PROCEDIMIENTO
    
    # unificando todo mayúsculas
    texto = texto.upper()
    
    # Separa palabras por espacios
    # Tarea: considerar ',' y '.'
    partes = texto.split(' ')
    m = len(partes)
    
    vocales = 'AEIOU'
    consonantes = 'BCDFGHJKLMNPQRSTVWXYZ'
    
    cuenta = 0
    j = 0
    while not(j>=m):
        palabra = partes[j]
    
        # Analiza una palabra
        n = len(palabra)
        cvocal = 0  # contador vocal
        cconso = 0
    
        i=0
        while not(i>=n):
            letra = palabra[i]
            if letra in vocales:
                cvocal = cvocal + 1
            else:
                cconso = cconso + 1
            i = i + 1
    
        if (cvocal==cconso):
            cuenta = cuenta + 1
        j = j + 1
    
    # SALIDA
    print('Igual número de consonantes y vocales: ')
    print(cuenta)
    
  • s2Eva_IIT2016_T2 País destino para jubilados extranjeros

    Ejercicio: 2Eva_IIT2016_T2 País destino para jubilados extranjeros

    Propuesta de solución en Python:

    requiere usar el archivo: destinosdatos.txt

    # CCPG1001-Fundamentos de programación FIEC-ESPOL
    # 2Eva_IIT2016_T2 País destino para jubilados extranjeros
    
    def cargarDatos(nomFile):
        datos = {}
        archivo = open(nomFile, 'r')
        linea = archivo.readline()
        while not(linea==''):
            linea = linea.strip('\n')
            partes = linea.split(',')
            
            ciu = partes[0]
            met = partes[1]
            val = float(partes[2])
            
            if not(ciu in datos):
                datos[ciu] = {met:val}
            else:
                datos[ciu][met]= val
            linea = archivo.readline()
            
        archivo.close()
        return(datos)
    
    def metricaPais(datos, paises):
        promedios = {}
        for unpais in paises:
            totalcanasta = 0
            totaltemperatura = 0
            ciudades = paises[unpais]
            
            for unaciudad in ciudades:
                unacanasta = datos[unaciudad]['canastaBasica']
                totalcanasta = totalcanasta + unacanasta
                unatemp = datos[unaciudad]['temperatura']
                totaltemperatura = totaltemperatura + unatemp
    
            # los promedios son por pais
            promediocanasta     = totalcanasta/len(ciudades)
            promediotemperatura = totaltemperatura/len(ciudades)
            promedios[unpais] = {'canastaBasica': promediocanasta,
                                 'temperatura': promediotemperatura}  
        return(promedios)
    
    def generaPaises(promedios, metrica, minimo, maximo):
        narchivo = 'cumplencon.csv'
        archivo  = open(narchivo, 'w')
        
        for unpais in promedios:
            valor = promedios[unpais][metrica]
            if (valor>=minimo and valor<=maximo):
                linea = unpais +'\n'
                archivo.write(linea)
        archivo.close
        
        mensaje = 'resultados en archivo'
        return(mensaje)
    
    
    # PROGRAMA Prueba
    # INGRESO
    paises = {'Ecuador':{'Cuenca','Guayaquil'},
              'Colombia':{'Bogotá'}}
    
    nomFile = 'destinosdatos.txt'
    
    metrica = input('cual metrica: ')
    minimo  = float(input('minimo: '))
    maximo  = float(input('maximo: '))
    
    # PROCEDIMIENTO
    tabla = cargarDatos(nomFile)
    promedios = metricaPais(tabla, paises)
    cualescumplen = generaPaises(promedios, metrica, minimo, maximo)
    
    # SALIDA
    print('tabla de datos: ')
    print(tabla)
    print('paises')
    print(paises)
    print('promedios de características')
    print(promedios)
    print('paises de interes para el jubilado, en archivo')
    
  • s1Eva_IT2016_T2 historial de visitas web

    Ejercicio: 1Eva_IT2016_T2 historial de visitas web

    literal a. Se obtiene un registro de los sitios visitados, para luego separar sus partes entre empleado|sitio|duracion.

    Para los sitios que no son de trabajo se usa una lista llamada ocio. Si el sitio visitado no se encuentra en trabajo, se añade a la lista ocio. Se considera revisar que la lista no tenga elementos repetidos

    # a) sitios que no son de trabajo
    ocio = []
    n = len(visitados)
    i = 0
    while not(i>=n):
        registro = visitados[i]
        partes = registro.split('|')
        sitio  = partes[1]
        if not(sitio in trabajo):
            if not(sitio in ocio):
                ocio.append(sitio)
        i = i + 1
    

    literal b. Par contabilizar el tiempo por empleado se acumula en una lista los tiempos de navegación, usando la posición del empleado en la lista obtenida con la instrucción empleados.index(quien)

    # b) tiempo de internet/empleado
    m = len(empleados)
    tiempo = np.zeros(m,dtype=int)
    
    n = len(visitados)
    i = 0
    while not(i>=n):
        registro = visitados[i]
        partes = registro.split('|')
        quien  = partes[0]
        indice = empleados.index(quien)
        cuanto = int(partes[2])
        tiempo[indice] = tiempo[indice] + cuanto
        i = i + 1
    

    Se procede de forma semejante para obtener una tabla de tiempos por sitio.

    Una respuesta que se pude obtener de la tabla anterior es la búsqueda del empleado más ocioso, el que ha usado más tiempo en sitios de ocio. (tema 3, literal f)


    Algoritmo en Python

    # CCPG1001 Fundamentos de Programación FIEC-ESPOL
    # 1Eva_IT2016_T2 historial de visitas web
    import numpy as np
    
    # INGRESO
    visitados = [ 'maria2|www.facebook.com|160',
                  'xavi7|www.eluniverso.com|50',
                  'jose15|www.sri.gob.ec|30',
                  'maria2|www.twitter.com|30',
                  'xavi7|www.inec.gob.ec|10',
                  'maria2|www.espol.edu.ec|50',
                  'jose15|www.sri.gob.ec|120',
                  'xavi7|www.sri.gob.ec|20',
                  'maria2|www.twitter.com|20',]
    empleados = ['maria2',
                 'jose15',
                 'xavi7']
    trabajo = ['www.espol.edu.ec',
               'www.inec.gob.ec',
               'www.sri.gob.ec']
    
    # PROCEDIMIENTO
    
    # a) sitios que no son de trabajo
    ocio = []
    n = len(visitados)
    i = 0
    while not(i>=n):
        registro = visitados[i]
        partes = registro.split('|')
        sitio  = partes[1]
        if not(sitio in trabajo):
            if not(sitio in ocio):
                ocio.append(sitio)
        i = i + 1
    
    # b) tiempo de internet/empleado
    m = len(empleados)
    tiempo = np.zeros(m,dtype=int)
    
    n = len(visitados)
    i = 0
    while not(i>=n):
        registro = visitados[i]
        partes = registro.split('|')
        quien  = partes[0]
        indice = empleados.index(quien)
        cuanto = int(partes[2])
        tiempo[indice] = tiempo[indice] + cuanto
        i = i + 1
    
    # b) tiempo de internet por empleado/sitio. matrices
    k = len(visitados)
    n = len(empleados)
    todositio = trabajo + ocio
    m = len(todositio)
    tabla = np.zeros(shape=(n,m), dtype=int)
    
    i = 0
    while not(i>=k):
        registro = visitados[i]
        partes = registro.split('|')
        quien  = partes[0]
        fila   = empleados.index(quien)
        donde  = partes[1]
        columna = todositio.index(donde)
        cuanto = int(partes[2])
        tabla[fila,columna] = tabla[fila,columna] + cuanto
        i = i+1
    
    # Tema 3. f)
    # empleado es mas ocioso
    parte = tabla[:,len(trabajo):]
    ocioempleado = np.sum(parte, axis =1)
    masocioso = np.argmax(ocioempleado)
    quien = empleados[masocioso]
    
    # SALIDA
    print('sitios de ocio: ')
    print(ocio)
    print('tiempos por empleado: ')
    print(tiempo)
    print('tabla de tiempos: ')
    print(tabla)
    print('empleado mas ocioso: ', quien) 
    

    resultado del algoritmo

    sitios de ocio: 
    ['www.facebook.com', 'www.eluniverso.com', 'www.twitter.com']
    tiempos por empleado: 
    [260 150  80]
    tabla de tiempos: 
    [[ 50   0   0 160   0  50]
     [  0   0 150   0   0   0]
     [  0  10  20   0  50   0]]
    empleado mas ocioso:  maria2
    >>> 
    
  • s3Eva_IT2016_T3 Prueba de escritorio - funciones, listas, caracteres

    Ejercicio: 3Eva_IT2016_T3 Prueba de escritorio - funciones, listas, caracteres

    funciones, listas, lazos, condicionales, caracteres

    a) (5 puntos) Considere lo siguiente e indique el resultado al ejecutarlo. Justifique su respuesta.

    lista1 = [3,'A',6]
    lista2 = ['A']
    
    def funcion (lista1, lista2):
        a = []
        for i in lista1:
            for j in lista2:
                if i != j:
                    a.append(str(i) + str(j))
                    for x in a[:]:
                        a.append(str(i) + str(j))
        return(a)
    
    print(funcion (lista1, lista2))
    

  • S3Eva_IT2016_T2 sensar cultivos con dron

    Ejercicio: 3Eva_IT2016_T2 sensar cultivos con dron

    Propuesta de solución en Python:

    # CCPG1001-Fundamentos de Programación - FIEC-ESPOL
    # 3Eva_IT2016_T2 sensar cultivos con dron
    import numpy as np
    import random as rnd
    
    def  sensarCultivos(posicion):
        # Solo para generar una matriz que
        # permita trabajar con el programa
        valor = int(rnd.random()*10+1)
        return(valor)
    
    def generarplantacion(dimension):
        n = dimension[0]
        m = dimension[1]
        plantacion = np.zeros(shape=(n,m),dtype=int)
        i = 0
        while not(i>=n):
            j = 0
            while not(j>=m):
                posicion = [i,j]
                valor = sensarCultivos(posicion)
                plantacion[i,j] = valor
                j = j + 1
            i = i + 1
        return(plantacion)
    
    # usa matriz densidad de 1 y 0 para facilitar 
    # el cálculo del literal c
    def analizarDensidad(plantacion, limite):
        tamano = np.shape(plantacion)
        n = tamano[0]
        m = tamano[1]
        densidad  = np.zeros(shape=(n,m),dtype=int)
        resultado = []
        i = 0
        while not(i>=n):
            fila = []
            j = 0
            while not(j>=m):
                if (plantacion[i,j]>=limite):
                    densidad[i,j]=1
                    fila.append('ALTO')
                else:
                    fila.append('Bajo')
                j = j + 1
            resultado.append(fila)
            i = i + 1
        
        return(densidad)
    
    def reporteCrecimento(plantacion,densidad):
        tamano = np.shape(plantacion)
        n = tamano[0]
        m = tamano[1]
        casillas = n*m
        
        sumaALTO = 0
        sumaBAJO = 0
        i = 0
        while not(i>=n):
            j = 0
            while not(j>=m):
                valor = plantacion[i,j]
                if (densidad[i,j]==1):
                    sumaALTO = sumaALTO + valor
                else:
                    sumaBAJO = sumaBAJO + valor
                j = j + 1
            i = i + 1
        prmALTO  = sumaALTO/(np.sum(densidad))
        prmBAJO  = sumaBAJO/(n*m-np.sum(densidad))
        promedio = [prmALTO,prmBAJO]
        return(promedio)
    

    crear un archivo de funciones para importar si las funciones se crean en otro archivo.

    # CCPG1001-Fundamentos de Programación - FIEC-ESPOL
    import dronescultivos as dron
    
    # PROGRAMA
    # INGRESO , usa datos aleatorios como prueba
    dimension = (3,4)
    plantacion = dron.generarplantacion(dimension)
    
    #PROCEDIMIENTO
    limite = 4
    densidad = dron.analizarDensidad(plantacion, limite)
    reporte  = dron.reporteCrecimento(plantacion,densidad)
    
    #SALIDA
    print(plantacion)
    print(densidad)
    print(reporte)
    
  • s2Eva_IIT2016_T1 Multas de Transito por sector

    Ejercicio: 2Eva_IIT2016_T1 Multas de Transito por sector

    Propuesta de solución en Python:

    # CCPG1001-Fundamentos de programación
    # 2Eva_IIT2016_T1 Multas de Transito por sector
    import numpy as np
    
    def generaMatriz(listamultas,sectores):
        n = len(sectores)
        unafila = sectores[0]
        
        m = len(unafila)
        matriz = np.zeros(shape=(n,m),dtype=float)
    
        k = len(listamultas)
        i = 0
        while not(i>=k):
            f = listamultas[i][0]
            c = listamultas[i][1]
            valor = listamultas[i][2]
            matriz[f,c] = matriz[f,c] + valor
            i = i+1
        return(matriz)
    
    def sectorTop(matriz):
        
        # TAREA: Realizar para este y oeste
        tamano = np.shape(matriz)
        n = tamano[0]
        m = tamano[1]
        norte = matriz[0,:]
        sur = matriz[n-1,:]
        centro = matriz[1:3,2]
    
        rnorte  = np.sum(norte)
        rsur    = np.sum(sur)
        rcentro = np.sum(centro)
        
        suma = [rnorte,rsur,rcentro]
        referencia = ['norte','sur','centro']
        
        cual   = np.argmax(suma)
        nombre = referencia[cual]
        valor  = suma[cual]
        respuesta = [nombre,valor]
    
        return(respuesta)
    
    
    # PROGRAMA
    # INGRESO
    sectores = [
        ['Norte','Norte','Norte','Norte','Norte'],
        ['Oeste','Oeste','Centro','Este','Este'],
        ['Oeste','Oeste','Centro','Este','Este'],
        ['Oeste','Oeste','Centro','Este','Este'],
        ['Sur','Sur','Sur','Sur','Sur']]
    
    listamultas = [(0, 0, 120),
                   (1, 2, 330),
                   (3, 4, 123),
                   (4, 2, 62),
                   (0, 0, 50),
                   (4, 4, 89),
                   (0, 3, 25),
                   (2, 0, 43),
                   (3, 2, 21),
                   (0, 0, 120)]
    
    # PROCEDIMIENTO
    recaudar = generaMatriz(listamultas,sectores)
    
    # SALIDA
    print(sectores)
    print(listamultas)
    print('Hay que recaudar:')
    print(recaudar)
    

    Resultado del algoritmo

    [['Norte', 'Norte', 'Norte', 'Norte', 'Norte'], 
    ['Oeste', 'Oeste', 'Centro', 'Este', 'Este'], 
    ['Oeste', 'Oeste', 'Centro', 'Este', 'Este'], 
    ['Oeste', 'Oeste', 'Centro', 'Este', 'Este'], 
    ['Sur', 'Sur', 'Sur', 'Sur', 'Sur']]
    [(0, 0, 120), (1, 2, 330), (3, 4, 123), 
    (4, 2, 62), (0, 0, 50), (4, 4, 89), 
    (0, 3, 25), (2, 0, 43), (3, 2, 21), (0, 0, 120)]
    Hay que recaudar:
    [[290.   0.   0.  25.   0.]
     [  0.   0. 330.   0.   0.]
     [ 43.   0.   0.   0.   0.]
     [  0.   0.  21.   0. 123.]
     [  0.   0.  62.   0.  89.]]
    >>>