Categoría: Soluciones

Ejercicios resueltos de examen

  • s3Eva_IT2015_T4 Bomberos para incendios forestales

    Ejercicios: 3Eva_IT2015_T4 Bomberos para incendios forestales

    Propuesta de solución en Python:

    Algoritmo en Python

    Tarea: Desarrollar la opción 3

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2015_T4 Bomberos para incendios forestales
    import numpy as np
    
    def grupobombero(registrados, m, local):
        n = len(registrados)
        filas = n//m
        if (n%m>0):
            filas = filas+1
        tabla = np.zeros(shape=(filas,m),dtype = int)
        # Solo bomberos de provincia local
        f = 0
        c = 0
        i = 0
        while not(i>=n):
            cual = registrados[i,1]
            quien = registrados[i,0]
            if (cual == local):
                tabla[f,c] = quien
                c = c+1
                if (c>=m):
                    c = 0
                    f = f + 1
            i = i + 1
        # los demas bomberos
        i = 0
        while not(i>=n):
            cual = registrados[i,1]
            quien = registrados[i,0]
            if not(cual == local):
                tabla[f,c] = quien
                c = c + 1
                if (c>=m):
                    c = 0
                    f = f + 1
            i = i + 1
        tabla = np.array(tabla)
        return(tabla)
    
    # 3ra Evaluación I Término 2015
    # Tema 4. Bomberos para incendios forestales
    presentados = []
    tabla  = np.zeros(shape=(1,2),dtype=int)
    opcion = -1
    i = 1
    while not(opcion==6):
        print('1. Registrar bombero')
        print('2. Asignar grupos')
        print('3. Mostrar nombres de un grupo')
        print('4. Guardar datos')
        print('5. Leer datos')
        print('6. Salir')
        opcion = int(input(' opcion: '))
    
        if (opcion ==1):
            i = len(presentados) + 1
            print('voluntario: ',i)
            
            ced  = input('cedula: ')
            nom  = input('nombre: ')
            nbom = int(input('numero bombero: '))
            prv  = int(input('provincia: '))
            while not(prv>=1 and prv<=24):
                prv = int(input('provincia [1,24]: '))
                
            unbombero = {'cedula':ced,
                         'nombre': nom,
                         'nbombero':nbom,
                         'provincia':prv}
            presentados.append(unbombero)
    
        if (opcion==2):
            print('asigna grupos.....')
            m = int(input('cuantos grupos/incendios: '))
            local = int(input('ayudar a provincia: '))
            n = len(presentados)
            registrados =[]
            i = 0
            while not(i>=n):
                nbom = presentados[i]['nbombero']
                prv = presentados[i]['provincia']
                registrados.append([nbom,prv])
                i = i + 1
            tabla = grupobombero(registrados, m, local)
            print(tabla)
            
        if (opcion==3):
            print('....3. Mostrar nombres de un grupo')
            # Tarea por desarrollar
                
        if (opcion==4):
            narchivo = 'bomberos.txt'
            archivo = open(narchivo,'w')
            n = len(presentados)
            j =0
            while not(j>=n):
                ced = presentados[j]['cedula']
                nom = presentados[j]['nombre']
                nbom = presentados[j]['nbombero']
                prv = presentados[j]['provincia']
                linea = ced + ',' +nom + ',' + str(nbom) + ',' +str(prv) +'\n'
                archivo.write(linea)
                j = j+1
            archivo.close()
            print('.... registros guardados: ', n)
            
        if (opcion == 5):
            presentados = []
            narchivo = 'bomberos.txt'
            
            archivo = open(narchivo,'r')
            linea = archivo.readline()
            while not(linea==''):
                linea  = linea.strip('\n')
                partes = linea.split(',')
                ced  = partes[0]
                nom  = partes[1]
                nbom = int(partes[2])
                prv  = int(partes[3])
                
                unbombero = {'cedula':ced,
                             'nombre': nom,
                             'nbombero':nbom,
                             'provincia':prv}
                presentados.append(unbombero)
                linea = archivo.readline()
    
            n = len(presentados)
            print('.... registros leidos: ', n)
            archivo.close()
    
        if (opcion==6):
            print(' Saliendo del programa ....')
            print(' ccpg1001 Fundamentos de computación .....')
    
  • s3Eva_IT2014_T3 Juego Poli-Mancala

    Ejercicios: 3Eva_IT2014_T3 Juego Poli-Mancala

    Propuesta de solución en Python:

    El tema pide realizar el programa usando la función siembra del tema 4. Por lo que la función se califica aparte.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2014_T3 Juego Poli-Mancala
    import numpy as np
    
    # funcion siembra del tema 4
    def siembra(mancala,jugador,casilla):
        tamano = np.shape(mancala)
        m = tamano[1]
        fila = jugador
        # Selecciona el movimiento del contador
        if (fila == 0):
            mueve = 1
        else:
            mueve = -1
    
        # Recoge las fichas
        fichas = mancala[fila,casilla]
        mancala[fila,casilla] = 0
        
        # inicia la siembra
        while not(fichas==0):
            casilla = casilla + mueve
            if (casilla>=m):
                casilla = m-1
                fila = 1
                mueve = -1 
            if (casilla<0):
                casilla = 0
                fila = 0
                mueve = 1
            mancala[fila,casilla] = mancala[fila,casilla]+1
            fichas = fichas-1
    
        return(mancala)
    
    # PROGRAMA PARA EL JUEGO ---------------
    # inicializa tablero
    mancala = np.ones(shape=(2,8),dtype=int)
    mancala = mancala*4
    mancala[:,0] = 0
    mancala[:,7] = 0
    casa1 = 0
    casa2 = 0
    print('  1 2 3 4 5 6 7 8')
    print(mancala)
    
    while not(casa1>24 or casa2>24):
        
        jugador = 1
        print(' Juega 1')
        casilla = input('¿Cual casilla?:')
        while not(casilla>'1' and casilla<'8'):
            casilla = input('¿Cual casilla?:')
        mancala = siembra(mancala,jugador-1, int(casilla)-1)
        print('  1 2 3 4 5 6 7 8')
        print(mancala)
    
        jugador = 2
        print(' Juega 2')
        casilla = input('¿Cual casilla?:')
        while not(casilla>'1' and casilla<'8'):
            casilla = input('¿Cual casilla?:')
        mancala = siembra(mancala,jugador-1, int(casilla)-1)
        casa1 = mancala[0,0]+mancala[1,0]
        casa2 = mancala[0,7]+mancala[1,7]
        print('  1 2 3 4 5 6 7 8')
        print(mancala)
    
    # Muestra ganadores
    if (casa1>casa2):
        print(' Gana Jugador 1')
    else:
        print(' Gana Jugador 2')
    
  • s3Eva_IT2014_T4 Función siembra

    Ejercicios: 3Eva_IT2014_T4 Función siembra

    Algoritmo en Python

    complementa el programa requerido en tema 3

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2014_T4 Juego Poli-Mancala
    import numpy as np
    
    # funcion siembra
    def siembra(mancala,jugador,casilla):
        tamano = np.shape(mancala)
        m = tamano[1]
        fila = jugador
        # Selecciona el movimiento del contador
        if (fila == 0):
            mueve = 1
        else:
            mueve = -1
    
        # Recoge las fichas
        fichas = mancala[fila,casilla]
        mancala[fila,casilla] = 0
        
        # inicia la siembra
        while not(fichas==0):
            casilla = casilla + mueve
            if (casilla>=m):
                casilla = m-1
                fila = 1
                mueve = -1 
            if (casilla<0):
                casilla = 0
                fila = 0
                mueve = 1
            mancala[fila,casilla] = mancala[fila,casilla]+1
            fichas = fichas-1
    
        return(mancala)
    
  • s1Eva_IIT2014_T3 Parasailing sin sobrecarga, parejas

    Ejercicios: 1Eva_IIT2014_T3 Parasailing sin sobrecarga, parejas

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]

    El ejercicio consiste en una revisión ordenada del peso de cada persona a participar con una posible pareja.

    i 1 2 3 ...
    pesos[i] 120 180 165 ...

    Los pesos de cada persona se registran en un arreglo.

    # INGRESO
    capacidad = int(input('capacidad de equipo: '))
    n = int(input('personas en cola: '))
    
    peso = np.zeros((n+1),dtype=int)
    i = 1
    while (i<=n):
        peso[i] = int(input("Peso[ "+str(i)+"]:"))
        i = i + 1
    

    El algoritmo comienza revisando una persona i junto a otra persona j. Si la pareja no sobrecarga el paracaidas, se cuenta y registra la pareja posible de participar en un solo viaje de parasailing.

            s = peso[i] + peso[j]
    
            # revisa capacidad
            if (s<=capacidad):
                parejas = parejas + 1
                posibles.append([i,j])

    Use un contador y una lista para el registro.

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]
    ..


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2014_T3 Parasailing sin sobrecarga, parejas
    # propuesta solucion: edelros@espol.edu.ec
    
    import numpy as np
    
    # INGRESO
    capacidad = int(input('capacidad de equipo: '))
    n = int(input('personas en cola: '))
    
    peso = np.zeros((n+1),dtype=int)
    i = 1
    while (i<=n):
        peso[i] = int(input("Peso[ "+str(i)+"]:"))
        i = i + 1
    
    # PROCEDIMIENTO
    
    # busca parejas
    posibles = []
    parejas = 0
    i = 1
    while (i<n):
        j = i + 1
        while (j<=n):
            s = peso[i] + peso[j]
    
            # revisa capacidad
            if (s<=capacidad):
                parejas = parejas + 1
                posibles.append([i,j])
            
            j = j + 1
        i = i + 1
    
    # SALIDA
    print('La cantidad de parejas encontradas es: ')
    print(parejas)
    print('Se puede combinar: ')
    print(posibles)
    

    resultado del algoritmo

    capacidad de equipo: 350
    personas en cola: 3
    Peso[ 1]:120
    Peso[ 2]:180
    Peso[ 3]:165
    La cantidad de parejas encontradas es: 
    3
    Se puede combinar: 
    [[1, 2], [1, 3], [2, 3]]
    >>> 
    capacidad de equipo: 300
    personas en cola: 3
    Peso[ 1]:120
    Peso[ 2]:180
    Peso[ 3]:165
    La cantidad de parejas encontradas es: 
    2
    Se puede combinar: 
    [[1, 2], [1, 3]]
    >>> 
    

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]
    ..


    Diagrama de Flujo: Mientras-Repita

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]
    ..


    Diagrama de Flujo: Repita-Hasta

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]


    ejercicios resueltos Python 1eva_iit2014_t3 pdf

  • s1Eva_IT2014_T1 Cuadrado de Cinco

    Ejercicio: 1Eva_IT2014_T1 Cuadrado de Cinco

    Propuesta de solución en Python

    Operación decena decena+1 añadir resultado
    252 2 2+1=3 2*3 = 6 625
    852 8 8+1=9 8*9 = 72 7225

    Para validar la operación con los múltiplos de 5 menores que 100, se usa un intervalo entre [5,m]. El intervalo inicia con el número 5

    El siguiente número ascendente terminado en cinco es el anterior sumando 10.

    La decena del número se obtiene como el cociente de la división para 10

    El número por añadir a la izquierda de 25 es es la multiplicación de:
    (decena)*](decena+1), que equivale a las centenas.

    Para revisar que se cumpla la operación en todo el intervalo [5,m] se usa una bandera "funciona".


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IT2014_T1 Cuadrado de Cinco
    # Tarea: validar que la unidad del número sea 5
    
    # INGRESO
    m = int(input('rango [5,m]: '))
    
    # PROCEDIMIENTO
    numero = 5 # inicial
    funciona = True # si funciona
    while (numero<=m and funciona==True):
        
        # terminados en 5 desde el 15
        numero = numero+10
    
        # algoritmo cuadrado de 5
        unidad = numero%10    #residuo
        decena = numero//10   #cociente
        a = decena*(decena + 1)
        propuesto = a*100 + 25
    
        # calcula cuadrado
        calculado = numero*numero
    
        #compara resultado
        if (calculado!=propuesto):
            funciona = False
    
    # SALIDA
    print ('Algoritmo funciona:',funciona)
    if (funciona==0):
        print(numero)
    

    resultado del algoritmo dentro del intervalo.

    rango [5,m]: 100
    Algoritmo funciona: True
    >>> 
    rango [5,m]: 1000
    Algoritmo funciona: True
    >>> 
    
  • s1Eva_IIT2014_T2 Triángulos aleatorios en rectángulo

    Ejercicios: 1Eva_IIT2014_T2 Triángulos aleatorios en rectángulo

    [ algoritmo ] [ diagrama flujo ]

    Para iniciar el ejercicio, se requiere la cantidad n de triángulos a generar y los límites del plano donde se generan [maxa,maxb] .

    Para cada triángulo se generan las coordenadas de los vértices (xi,yi), usando números aleatorios ajustados a los límites del plano.

        # puntos aleatorios
        x1 = int(rnd.random()*maxa) +0
        y1 = int(rnd.random()*maxb) +0
        
        x2 = int(rnd.random()*maxa) +0
        y2 = int(rnd.random()*maxb) +0
    
        x3 = int(rnd.random()*maxa) +0
        y3 = int(rnd.random()*maxb) +0
    

    Lo más importante para este ejercicio es determinar las distancias entre los vértices, pues con ellas se determina el tipo de triángulo, siguiento las reglas básicas de la geometría.

        # distancias entre puntos
        a = np.sqrt((x2-x1)**2 + (y2-y1)**2)
        b = np.sqrt((x3-x2)**2 + (y3-y2)**2)
        c = np.sqrt((x1-x3)**2 + (y1-y3)**2)
    

    Puede darse el caso que los puntos se encuentren en una sola línea en el plano, el caso se verifica al revisar si la suma de la longitud de dos lados es la longitud del tercer lado. Comprobar en todas las combinaciones ésta situación.

    [ algoritmo ] [ diagrama flujo ]
    ..


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2014_T2 Triángulos aleatorios en rectángulo
    # Propuesta de solución: edelros@espol.edu.ec
    
    import numpy as np
    import random as rnd
    import matplotlib.pyplot as plt
    
    # INGRESO
    n = int(input(" cuántos triángulos: "))
    maxa = int(input(" rango lado a: "))
    maxb = int(input(" rango lado b: "))
    
    # PROCEDIMIENTO
    equilatero = 0
    isosceles  = 0
    escaleno   = 0
    colineal   = 0
    
    i = 1
    while (i<=n):
        
        # puntos aleatorios
        x1 = int(rnd.random()*maxa) +0
        y1 = int(rnd.random()*maxb) +0
        
        x2 = int(rnd.random()*maxa) +0
        y2 = int(rnd.random()*maxb) +0
    
        x3 = int(rnd.random()*maxa) +0
        y3 = int(rnd.random()*maxb) +0
    
        # distancias entre puntos
        a = np.sqrt((x2-x1)**2 + (y2-y1)**2)
        b = np.sqrt((x3-x2)**2 + (y3-y2)**2)
        c = np.sqrt((x1-x3)**2 + (y1-y3)**2)
    
        # realiza la gráfica de cada triángulo
        plt.plot([x1, x2], [y1, y2])
        plt.plot([x2, x3], [y2, y3])
        plt.plot([x1, x3], [y1, y3])
    
        # clasifica triángulos
        s1 = a + b
        s2 = b + c
        s3 = c + a
        if (s1==c or s2==a or s3==b):
            colineal = colineal + 1
        else:
            if (a==b and b==c):
                equilatero = equilatero+1
            else:
                if (a!=b and b!=c and c!=a):
                    escaleno = escaleno+1
                else:
                    isosceles = isosceles+1
        i=i+1
    
    # SALIDA
    print("equilateros: ")
    print(equilatero)
    print("escalenos: ")
    print(escaleno)
    print("isosceles: ")
    print(isosceles)
    print("colineales: ")
    print(colineal)
    
    # muestra la gráfica
    plt.show()
    

    Resultado del algoritmo

     cuántos triángulos: 100
     rango lado a: 10
     rango lado b: 10
    equilateros: 
    0
    escalenos: 
    90
    isosceles: 
    4
    colineales: 
    6
    >>>
     cuántos triángulos: 100
     rango lado a: 10
     rango lado b: 10
    equilateros: 
    0
    escalenos: 
    87
    isosceles: 
    6
    colineales: 
    7
    >>> 
    

    [ algoritmo ] [ diagrama flujo ]
    ..


    Diagrama de Flujo

    [ algoritmo ] [ diagrama flujo ]


    ejercicios resueltos Python 1eva_iit2014_t2 pdf

  • s1Eva_IIT2014_T1 Verificar si a y b son Números amigos

    Ejercicios: 1Eva_IIT2014_T1 Números amigos

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]

    equipo01Dos números enteros positivos a y b son amigos sí solo sí la suma de los divisores de a es igual al número b, y la suma de los divisores de b es igual al número a.

    Se divide el ejercicio en dos partes, primero la suma de divisores del número a.

    # suma de divisores para "a"
    atotal = 1
    i = 2
    while (i<a):
          r = a%i
          if (r==0):
              atotal = atotal + i
          i = i + 1
    

    El concepto se repite par la suma de divisores de b.

    El resultado se obtiene comparando las sumas de divisores

    if (atotal==b and btotal==a):
          namigos = 1
    else:
          namigos = 0

    Se muestran los resultados al final

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]
    ..


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2014_T1 Números amigos
    # Propuesta de solucion: edelros@espol.edu.ec
    
    # INGRESO
    a = int(input("número a: "))
    b = int(input("número b: "))
    
    # PROCEDIMIENTO
    
    # suma de divisores para "a"
    atotal = 1
    i = 2
    while (i<a):
          r = a%i
          if (r==0):
              atotal = atotal + i
          i = i + 1
    
    # suma de divisores para "b"
    btotal = 1
    j = 2
    while (j<b):
          r = b%j
          if (r==0):
              btotal = btotal + j
          j = j + 1
    
    if (atotal==b and btotal==a):
          namigos = 1
    else:
          namigos = 0
    
    # SALIDA
    print('números amigos: ', namigos)
    

    resultado del algoritmo

    número a: 220
    número b: 284
    números amigos:  1
    >>> 
    número a: 221
    número b: 284
    números amigos:  0
    

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]
    ..


    Diagrama de Flujo: Mientras-Repita


    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]
    ..


    Diagrama de Flujo: Repita-Hasta

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]

    ejercicios resueltos Python 1eva_iit2014_t1 pdf

  • s3Eva_IIT2012_T1 Alfabeto radiofónico con Python

    Ejercicio: 3Eva_IIT2012_T1 Alfabeto radiofónico

    Para resolver el ejercicio de alfabeto radiofónico en Python, se propone usar el algoritmo de búsqueda sobre una lista con las parejas [letras,código].

    radiofonico = [['A','Alfa'],   ['B','Bravo'],
                   ['C','Charlie'],['D','Delta'],
                   ['E','Echo'],   ['F','Foxtrot'],
                   ['G','Golf'],   ['H','Hotel'],
                   ['I','India'],  ['J','Juliet'],
                   ['K','Kilo'],   ['L','Lima'],
                   ['M','Mike'],   ['N','November'],
                   ['O','Oscar'],  ['P','Papa'],
                   ['Q','Quebec'], ['R','Romeo'],
                   ['S','Sierra'], ['T','Tango'],
                   ['U','Uniform'],['V','Victor'],
                   ['W','Whiskey'],['X','X-ray'],
                   ['Y','Yankee'], ['Z','Zulu']]
    
    

    Instrucciones en  Python

    Para la función coderadio(), la palabra ingresada se convierten todas sus letras a mayúsculas con .upper(), así se facilita la búsqueda sobre la lista radiofónico.

    >>> coderadio('ESPOL')
    Echo Sierra Papa Oscar Lima

    Se aplica el algoritmo de búsqueda  usando cada letra de la palabra sobre cada pareja de lista radiofónico, usando la bandera encontre para salir del bucle de búsqueda. La variable donde indica la posición de coincidencia entre la letra de la palabra y la letra de la lista radiofónico.

    El proceso contrario con la función decoradio(), se toma la primera letra de cada palabra de la frase ingresada.

    >>> decoradio('Echo Sierra Papa Oscar Lima')
    ESPOL

    el detalle de instrucciones se presenta a continuación.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2012_T1 Alfabeto radiofónico
    # Tarea: En la segunda función considerar
    # que se pueden dar palabras que no son radiofónicas.
    #      mejorar la función usando la tabla radiofónico.
    
    def coderadio(palabra,radiofonico):
        # analizar secuencia a codificar
        palabra = palabra.upper()
        frase = '' 
    
        n = len(palabra)
        i = 0
        while not(i>=n):
            letra = palabra[i]
            
            # Buscar letra en radiofonico
            encontre = 0
            donde    = -1
            m = len(radiofonico)
    
            j = 0
            while not(j>=m or encontre==1):
                if (letra == radiofonico[j][0]):
                    encontre = 1
                    donde = j
                    equivale = radiofonico[j][1]
                j = j + 1 # busca la siguiente fila
    
            # completa la frase
            if len(frase)==0:
                espacio = ''
            else:
                espacio = ' '
            frase = frase + espacio + equivale
            
            i = i + 1 # cambia letra de palabra
    
        return(frase)
    
    def decoradio(frase,radiofonico):
        # Solo un ejemplo para decodificar,
        # Tarea, considerar que pueden enviar 
        #   una palabra que no se encuentra en tabla
    
        partes = frase.split(' ')
        n = len(partes)
        palabra = ''
    
        i = 0
        while not(i>=n):
            palabra = palabra + partes[i][0]
            i = i + 1
        return(palabra)
    

    Tarea: Continuar con el tema 2 para crear el menú con las partes para practicar el alfabeto radiofónico.

  • s3Eva_IT2012_T3 Tonalidad de colores en GIF

    Ejercicio: 3Eva_IT2012_T3 Tonalidad de colores en GIF

    resultados obtenidos

    color, frecuencia
    0 5
    1 0
    2 0
    ...
    28 0
    29 0
    30 10
    31 0
    32 0
    ...
    78 0
    79 0
    80 5
    81 0
    ...
    

    Algoritmo en Python

    # 3Eva_IT2012_T3 Tonalidad de colores en GIF
    import numpy as np
    
    # INGRESO
    matriz = np.array([[30, 30, 30, 0, 0],
                       [30, 30, 30, 0, 0],
                       [170, 170, 30, 30, 0],
                       [80, 80, 170, 30, 30],
                       [80, 80, 80, 170, 170]])
    
    # PROCEDIMIENTO
    color = np.arange(0,256,1)
    frecuencia = np.zeros(256,dtype=int)
    tamano = np.shape(matriz)
    n = tamano[0]
    m = tamano[1]
    for i in range(0,n,1):
        for j in range(0,m,1):
            unvalor = matriz[i,j]
            frecuencia[unvalor] = frecuencia[unvalor] + 1
    
    # SALIDA
    print('color, frecuencia')
    for i in range(0,256,1):
        print(color[i],frecuencia[i])