Categoría: Soluciones

Ejercicios resueltos de examen

  • s2Eva_IIT2007_T2 Juego de memotest

    Ejercicio: 2Eva_IIT2007_T2 Juego de memotest

    Video Tutorial:

    Algoritmo en Python

    # 2Eva_IIT2007_T2 Juego de memotest
    # propuesta: edelros@espol.edu.ec
    import numpy as np
    import random as rnd
    
    def tableroparejas(n):
        fichasunicas = (n*n)//2
        tablero = np.zeros(shape=(n,n),dtype =int)
    
        i = 1
        while i<=fichasunicas:
            f1 = int(rnd.random()*n)+0
            c1 = int(rnd.random()*n)+0
            while not(tablero[f1,c1]==0):
                f1 = int(rnd.random()*n)+0
                c1 = int(rnd.random()*n)+0
            tablero[f1,c1] = i
            f2 = int(rnd.random()*n)+0
            c2 = int(rnd.random()*n)+0
            while not(tablero[f2,c2]==0):
                f2 = int(rnd.random()*n)+0
                c2 = int(rnd.random()*n)+0
            tablero[f2,c2] = i
            i = i + 1
        return(tablero)
    
    # PROGRAMA
    # INGRESO
    n = 4
    
    # PROCEDIMIENTO
    tablero = tableroparejas(n)
    descubiertas = np.zeros(shape=(n,n),dtype=int)
    equivocado = 0
    encontrado = 0
    while (equivocado<3 and encontrado<(n*n)):
        
        print('estado del juego:')
        print(descubiertas)
    
        f1 = int(input('fila ficha1:'))
        c1 = int(input('columna ficha1:'))
        while not(descubiertas[f1,c1]==0):
            f1 = int(input('fila ficha1:'))
            c1 = int(input('columna ficha1:'))
    
        f2 = int(input('fila ficha2:'))
        c2 = int(input('columna ficha2:'))
        while not(descubiertas[f2,c2]==0):
            f2 = int(input('fila ficha2:'))
            c2 = int(input('columna ficha2:'))
    
        ficha1 = tablero[f1,c1]
        ficha2 = tablero[f2,c2]
    
        if ficha1==ficha2:
            descubiertas[f1,c1] = ficha1
            descubiertas[f2,c2] = ficha2
            encontrado = encontrado + 2
            print('ENCONTRO una pareja..!',ficha1,ficha2)
        else:
            equivocado = equivocado + 1
            print('Las fichas son diferentes: ',ficha1,ficha2)
    
    # SALIDA
    print('Solucion del tablero:')
    print(tablero)
    print('Estado del juego:')
    print(descubiertas)
    if encontrado==(n*n):
        print(' Muy bien..!! todas las fichas encontradas')
    else:
        print('Perdió... se equivoco el máximo de veces...')
        print('fichas descubiertas:', encontrado)
    

    Tarea: Revisar que las coordenadas ingresadas por el jugador se encuentren dentro del tablero.

    Resultado del Algoritmo

    estado del juego:
    [[0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]]
    fila ficha1:0
    columna ficha1:0
    fila ficha2:1
    columna ficha2:1
    Las fichas son diferentes:  4 1
    estado del juego:
    [[0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]]
    fila ficha1:0
    columna ficha1:0
    fila ficha2:2
    columna ficha2:2
    Las fichas son diferentes:  4 6
    estado del juego:
    [[0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]]
    fila ficha1:0
    columna ficha1:0
    fila ficha2:3
    columna ficha2:3
    Las fichas son diferentes:  4 2
    Solucion del tablero:
    [[4 8 3 4]
     [3 1 1 5]
     [6 7 6 7]
     [5 2 8 2]]
    Estado del juego:
    [[0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]]
    Perdió... se equivoco el máximo de veces...
    fichas descubiertas: 0
    >>> 
    

    Algoritmo realizado en diagrama de flujo, Archivo matlab en pdf

     

    ejercicios resueltos Matlab 2eva_iit2007_t2 pdf

  • s2Eva_IT2007_T1 Funciones par e impar recursivas

    Ejercicio: 2Eva_IT2007_T1 Funciones par e impar recursivas

    Propuesta de solución en Python: py_pdf, también en versión matplab: m_pdf

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2007_T1 Funciones par e impar
    # Propuesta: edelros@espol.edu.ec
    
    import random as rnd
    
    def impar(n):
        if (n==0):
            z = 0
        if (n>0):
            z = par(n-1)
        return (z)
    
    def par(n):
        if (n==0):
            z = 1
        if (n>0):
            z = impar(n-1)
        return (z)
    
    
    # PROGRAMA Par/Impar Recursiva
    
    # INGRESO
    n = int(input('cuantos números?: '))
    
    # PROCEDIMIENTO
    c = 0
    i = 1
    while not(i>n):
        a = int(rnd.random()*41)+10
        r = par(a)
        if (r==1):
            c = c + 1
        i = i + 1
    if c>(n/2):
        z = 1
    else:
        z = 0
    
    # salida
    print(' El resultado de mayoría pares es: ')
    print(z)
    

    resultado del algoritmo

    cuantos números?: 100
     El resultado de mayoría pares es: 
    1
    >>> 
    cuantos números?: 100
     El resultado de mayoría pares es: 
    0
    >>> 
    

    ejercicios resueltos Python 2eva_it2007_t1 pdf

    ejercicios resueltos Matlab 2eva_it2007_t1 pdf

  • s3Eva_IIT2013_T4 Gestionar asientos en cine

    Ejercicio: 3Eva_IIT2013_T4 Gestionar asientos en cine

    Algoritmo en Python

    Propuesta de solución en Python:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2013_T4 Gestionar asientos en cine
    import numpy as np
    
    # Genera la sala
    n = int(input('numero filas: '))
    m = int(input('numero columnas:'))
    asiento = np.zeros(shape=(n,m), dtype=int)
    
    opcion = '0'
    while not(opcion=='5'):
        print(' 1. Vender Boletos')
        print(' 2._Mostrar_asientos')
        print(' 3. Contar vendidos')
        print(' 4. Buscar libre')
        print(' 5. Salir ')
    
        opcion = input('cual opcion: ')
    
        if (opcion=='1'):
            print('Vender Boletos')
            fila = int(input('fila:'))
            columna = int(input('columna:'))
            if (asiento[fila,columna]==0):
                asiento[fila,columna] = 1
            else:
                print('asiento ocupado')
    
            
        if (opcion=='2'):
            print('Mostrar_asientos')
            print(asiento)
            
        if (opcion=='3'):
            print('Contar vendidos')
            contar = 0
            for fila in range(0,n,1):
                for columna in range(0,m,1):
                    contar = contar+asiento[fila,columna]
            print(contar)
            
        if (opcion=='4'):
            print('Buscar libre')
            
        if (opcion=='5'):
            print('Salir')
    
  • s3Eva_IT2013_T3 Menú de consejerías académicas

    Ejercicios: 3Eva_IT2013_T3 Menú de consejerías académicas

    Propuesta de solución en Python,  ejercicio iniciado en clase como referencia. Se incluyó grabar los datos en un archivo.

    Tarea: continúa ejercicio en la siguiente clase, para las opciones no desarrolladas y la función del tema 2

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2013_T3 Menú de consejerías académicas
    
    estudiante = []
    opcion = '0'
    while not(opcion=='7'):
        print('1. Ingresar datos de estudiante')
        print('2. Ingresar datos de consejero')
        print('3. Sorteo de consejeros/estudiantes')
        print('4. Mostrar lista de estudiantes por consejero')
        print('5. Mostrar consejero de un estudiante')
        print('6. Grabar datos')
        print('7. Salir')
    
        opcion = input('cual opcion: ')
    
        if (opcion=='1'):
            # INGRESO
            mtr = input('matricula: ')
            nom = input('nombre: ')
            ema = input('email: ')
            nac = int(input('año nacimiento: '))
            while not(nac>1900 and nac<2018):
                print('usar anos desde el ultimo siglo...')
                nac = int(input('año nacimiento: '))
    
            unestudiante = {'matricula':mtr,
                            'nombre':nom,
                            'email':ema,
                            'nacimiento':nac}
            estudiante.append(unestudiante)
    
        if (opcion=='4'):
            print('los estudiantes registrados son: ')
            print(estudiante)
    
        if (opcion=='6'):
            print('Guardar datos en archivo...')
            narchivo = 'misdatos.txt'
    
            archivo  = open(narchivo, 'w')
            n = len(estudiante)
    
            i = 0
            while not(i>=n):
                nom = estudiante[i]['nombre']
                ema = estudiante[i]['email']
                linea = nom +','+ema+ '\n' # str(nac)
                archivo.write(linea)
                i = i + 1
    
            archivo.close()
    
  • s3Eva_IT2013_T2 sorteo de consejeros para estudiantes

    Ejercicio: 3Eva_IT2013_T2 sorteo de consejeros para estudiantes

    Instrucciones en Python

    Propuesta de solución en Python,  ejercicio iniciado en clase como referencia.

    Algoritmo en Python

    # 3Eva_IT2013_T2 sorteo de consejeros para estudiantes
    import numpy as np
    import random as rnd
    
    # INGRESO
    n = int(input('numero de estudiantes: '))
    m = int(input('numero de profesores: '))
    
    # PROCEDIMIENTO
    consejero = np.zeros(n+1,dtype = int)
    contador = np.zeros(m+1,dtype = int)
    cupo = n//m
    residuo = n%m
    i = 1
    while not(i>(n-residuo)):
        sorteo = int(rnd.random()*m) + 1
        if (contador[sorteo]<cupo):
            contador[sorteo] = contador[sorteo]+1
            consejero[i] = sorteo
            i = i + 1
    cupo = cupo + 1
    i = n - residuo + 1
    while not(i>n):
        sorteo = int(rnd.random()*m) + 1
        if (contador[sorteo]<cupo):
            contador[sorteo] = contador[sorteo]+1
            consejero[i] = sorteo
            i = i + 1
    
    # SALIDA
    print(contador)
    print(consejero)
    
  • s2Eva_IT2013_T2 Una Tabla de Bingo con arreglos

    Ejercicio: 2Eva_IT2013_T2 Una Tabla de Bingo con arreglos

    2Eva_IT2013_T1 Función sorteoentre(k,a,b)

    Propuesta de solución en Python, continua desde tema 1:

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # propuesta: edelros@espol.edu.ec
    
    # 2Eva_IT2013_T1 Una Tabla de Bingo
    import random as rnd
    import numpy as np
    
    def sorteoentre(k,a,b):
        suertudos = []
        i = 0
        while not(i>=k):
            sorteo = int(rnd.random()*(b-a+1))+a
            if not(sorteo in suertudos):
                suertudos.append(sorteo)
                i = i+1
        return(suertudos)
    
    # 2Eva_IT2013_T2 Una Tabla de Bingo
    n = 5
    #Rango inicial de B [1,15]
    a = 1  
    b = 15
    incremento = 15
    
    # PROCEDIMIENTO
    tabla = np.zeros(shape=(n,n),dtype=int)
    columna = 0
    while not(columna>=n):
        datos = sorteoentre(n,a,b)
        for fila in range(0,n,1):
            tabla[fila,columna]=datos[fila]
        a = a + incremento
        b = b + incremento
        columna = columna + 1
        
    # corrige el cero en la posicion central
    mitad = n//2
    tabla[mitad,mitad] = 0
    
    # SALIDA
    print(tabla)
    

    Ejemplo:

    >>> ================================ RESTART ==========
    >>> 
    [[ 4 28 37 51 63]
     [15 18 45 56 74]
     [13 23  0 48 69]
     [ 2 20 34 58 72]
     [ 3 16 32 50 71]]
    >>> ================================ RESTART ==========
    >>> 
    [[ 2 17 37 58 75]
     [13 24 45 53 65]
     [ 7 19  0 51 73]
     [15 23 36 52 69]
     [ 3 30 39 47 67]]
    >>>

     

  • s2Eva_IT2013_T1 Función sorteoentre(k,a,b)

    Ejercicio: 2Eva_IT2013_T1 Función sorteoentre(k,a,b)

    Solución propuesta en Python, continúa en Tema 2.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2013_T1 Una Tabla de Bingo
    # propuesta: edelros@espol.edu.ec
    
    import random as rnd
    import numpy as np
    
    def sorteoentre(k,a,b):
        suertudos = []
        i = 0
        while not(i>=k):
            sorteo = int(rnd.random()*(b-a+1))+a
            if not(sorteo in suertudos):
                suertudos.append(sorteo)
                i = i+1
        return(suertudos)
    

    resultado del algoritmo

    >>> sorteoentre(5,1,15)
    [11, 14, 7, 10, 6]
    >>> sorteoentre(5,16,30)
    [17, 18, 26, 30, 27]
    >>> 
    
  • s1Eva_IT2013_T4 Tabular atención al cliente

    Ejercicio: 1Eva_IT2013_T4 Tabular atención al cliente

    Para el ejercicio por simplicidad, en el bloque de ingreso se tabula también la "evaluación" del cliente para el servicio en un arreglo.

    Recuerde repasar el algoritmo del mayor


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IT2013_T4 Tabular atención al cliente
    # Tarea: literal c)
    #  calcular promedio dentro de procedimiento
    #  mostrar clientes con atencion menor al promedio en SALIDA
    import numpy as np
    
    # INGRESO
    n = int(input('cuantos clientes: '))
    atencion = np.zeros(n+1, dtype=int)
    cuenta   = np.zeros(6, dtype=int) # de 0 a 5
    cliente  = 1
    while not(cliente>n):
        pregunta = 'CLIENTE '+str(cliente)+' evalue: '
        nota = int(input(pregunta))
        
        if (nota>=1 and nota<n):
            atencion[cliente] = nota
            cuenta[nota] = cuenta[nota] + 1
        cliente = cliente + 1
    
    # Algoritmo Mayor
    mayor = 1  
    nota  = 2 
    while not(nota>5):
        if (cuenta[nota]>cuenta[mayor]):
            mayor = nota
        nota = nota + 1
        
    # SALIDA
    print('las evaluaciones fueron: ')
    print(cuenta)
    print('mayor: ',mayor)
    print('evaluacion [mayor]: ',cuenta[mayor])
    

    resultado esperado:

    cuantos clientes: 5
    CLIENTE 1 evalue: 1
    CLIENTE 2 evalue: 1
    CLIENTE 3 evalue: 1
    CLIENTE 4 evalue: 2
    CLIENTE 5 evalue: 2
    las evaluaciones fueron: 
    [0 3 2 0 0 0]
    mayor:  1
    evaluacion [mayor]:  3
    >>> 
    

    Tarea: literal c,  calcular promedio y seleccionar clientes que presentaron evaluación menor al promedio

  • s1Eva_IT2013_T1 Primos gemelos

    Ejercicio: 1Eva_IT2013_T1 Primos gemelos

    Para facilitar el ejercicio, pues no se dispone de una lista de números primos, se inicia generando usa secuencia ordenada de números naturales a partir del 2 hasta el número n donde se desea realizar la observación.

    # PROCEDIMIENTO
    # intervalo de búsqueda de números primos
    secuencia = np.arange(2,n+1,1)
    tamano = len(secuencia)
    
    # supone que todos son primos
    cumple = np.ones(tamano, dtype=int)

    Se simplifica el procedimiento de generar la secuencia usando la función de Numpy para generar un rango entre un intervalo [a,b) y dando el incremento: np.arange(a,b,incremento). Siendo un lado del intervalo no incluyente, pues se define con paréntesis, se añade el límite usando n+1.

    Sobre la secuencia, se usa un algoritmo de búsqueda de números primos realizado en clase para obtener un vector que tenga solo números primos. Otro ejemplo como repaso, puede revisar el ejercicio de la Criba de Eratóstenes.

    La búsqueda de primos gemelos consiste en comparar dos números consecutivo del vector soloprimos. Si la diferencia entre ellos es 2, se encontraron los números buscados. La respuesta se puede dar por medio de un nuevo vector o lista, o semejante al ejercicio de la Criba de Eratóstenes se puede usar un arreglo de banderas.


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IT2013_T1 Primos gemelos
    import numpy as np
    
    # INGRESO
    n = int(input('límite n: '))
    
    # PROCEDIMIENTO
    # intervalo de búsqueda de números primos
    secuencia = np.arange(2,n+1,1)
    tamano = len(secuencia)
    
    # supone que todos son primos
    cumple = np.ones(tamano, dtype=int)
    
    # revisa cada número de secuencia
    posicion = 0
    while (posicion<tamano):
        n = secuencia[posicion]
        
        # PROCEDIMIENTO esprimo 
        esprimo = 1
        divisor = 2
        while not(divisor>=n or esprimo==0):
            r = n%divisor
            if (r == 0):
                esprimo = 0
            divisor = divisor + 1
            
        cumple[posicion] = esprimo
        posicion = posicion + 1
    
    cuantos = np.sum(cumple)
    soloprimos = np.zeros(cuantos,dtype=int)
    
    # separa solo los primos
    posicion = 0
    i = 0
    while not(posicion>=tamano):
        if (cumple[posicion]==1):
            soloprimos[i] = secuencia[posicion]
            i = i + 1
        posicion = posicion + 1
    
    # SALIDA
    
    # BUSCA GEMELOS
    i = 0
    while not(i>=(cuantos-1)):
        sigue = i + 1
        diferencia = soloprimos[sigue] - soloprimos[i]
        if (diferencia==2):
            print('pareja gemelo: ')
            print(soloprimos[i],soloprimos[sigue])
        i = i + 1
        
    # revisando resultados
    print('secuencia: ', secuencia)
    print('cumple:    ', cumple)
    print('soloprimos:', soloprimos)
    

    resultado del algoritmo

    pareja gemelo: 
    3 5
    pareja gemelo: 
    5 7
    secuencia  [2 3 4 5 6 7 8 9]
    cumple:    [1 1 0 1 0 1 0 0]
    soloprimos: [2 3 5 7]
    >>> 
    
  • s1Eva_IIT2012_T2 Número camiseta equipo

    Ejercicio: 1Eva_IIT2012_T2 Número camiseta equipo

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

    Para el bloque de ingreso usar tres variables: día, mes y año.

    # INGRESO
    dia  = int(input('dia: '))
    mes  = int(input('mes: '))
    anio = int(input('anio: '))
    

    Primero realice la suma de los componentes de la fecha para obtener el número de trabajo n.

    n = dia + mes + anio

    Se separan los dígitos de n usando el residuo y cociente, acumulando los dígitos en s, repitiendo la operación hasta que no queden más dígitos que separar.

        s = 0
        while (n>0):
            r = n%10
            n = n//10
            s = s + r

    Si el resultado de s tiene más de un dígito, se actualiza el valor de n con s y se repite el proceso anterior para acumular dígitos hasta obtener un resultado de un dígito. Se muestra el resultado “s”.

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


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2012_T2 Número camiseta equipo
    # Propuesta: edelros@espol.edu.ec
    
    # INGRESO
    dia  = int(input('dia: '))
    mes  = int(input('mes: '))
    anio = int(input('anio: '))
    
    # PROCEDIMIENTO
    n = dia + mes + anio
    while (n>=10):
        s = 0
        while (n>0):
            r = n%10
            n = n//10
            s = s + r
        n = s
    
    # SALIDA
    print('número buscado es: ')
    print(n)
    

    Resultado del Algoritmo

    dia: 12
    mes: 8
    anio: 2000
    número buscado es: 
    4
    >>> 
    dia: 25
    mes: 12
    anio: 2000
    número buscado es: 
    3
    >>> 
    

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


    Diagrama de Flujo: mientras-repita

    numero camiseta equipo diagrama de flujo

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


    Diagrama de Flujo: repita-hasta

    diagrama de flujo repita-hasta

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


    Propuesta de solución con diagrama de flujo, Python y otra versión con Matlab

    ejercicios resueltos Python 1eva_iit2012_t2 pdf

    ejercicios resueltos Matlab 1eva_iit2012_t2 pdf