Categoría: Solución 3ra Evaluación

  • s3Eva_IT2008_T3 IMC: índice masa corporal

    Ejercicio3Eva_IT2008_T3 IMC: índice masa corporal. ejercicio resuelto con Python

    [ algoritmo ] [ diagrama flujo ]

    El índice de masa corporal (IMC) es el cociente entre el peso de una persona en Kg dividido para su estatura al cuadrado en metros.

    IMC = peso/(estatura**2)

    Propuesta sobre los condicionales, usado para las primeras semanas de clases, solo concepto:

    [ algoritmo ] [ diagrama flujo ]
    ..


    Diagrama de Flujo

    imc diagrama de flujo
    [ algoritmo ] [ diagrama flujo ]
    ..


    Algoritmo en Python

    # 3Eva_IT2008_T3 IMC: índice masa corporal
    
    # INGRESO
    peso = float(input(' peso: '))
    estatura = float(input(' estatura: '))
    
    # PROCEDIMIENTO
    IMC = peso/(estatura**2)
    tipo = 1
    if (IMC>17 and IMC<=18):
        tipo = 2
    if (IMC>18 and IMC<=25):
        tipo = 3
    if (IMC>25 and IMC<=30):
        tipo = 4
    if (IMC>30 and IMC<=35):
        tipo = 5
    if (IMC>35 and IMC<=40):
        tipo = 6
    if (IMC>40):
        tipo = 7
    
    # SALIDA
    print(' IMC: ')
    print(IMC)
    print(' Tipo: ',tipo)
    

    [ algoritmo ] [ diagrama flujo ]

  • s3Eva_IIT2007_T2 Verificar matriz Sudoku

    Ejercicio: 3Eva_IIT2007_T2 Verificar matriz Sudoku

    Propuesta de solución en Python:

    En el enunciado puede obtener una matriz para usar en el programa ejemplo.

    Simplifique el problema, por ejemplo inicie con el algoritmo para verificar los números sea únicos en un vector, el resultado lo convierte una función únicos(vector). La función únicos() la usa para cada fila, luego para cada columna y finalmente para cada recuadro de 3x3.

    Al finalizar, convierta la parte del programa ejemplo en una función verificasudoku(matriz).

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2007_T2 Verificar matriz Sudoku
    # Propuesta: edelros@espol.edu.ec
    # Tarea por completar: tercera regla recuadros
    
    import numpy as np
    
    # verificar unicos en vector, intervalo [1,9]
    def unicos(vector):
        m = len(vector)
        contadores = np.zeros(9+1, dtype = int)
    
        i = 0
        while not(i>=m):
            numero = vector[i]
            contadores[numero] = contadores[numero] +1
            i = i+1
    
        # revisa que el contador sea siempre 1
        cumple = 1
        numero = 1
        while not(numero>9 or cumple==0):
            if (contadores[numero] != 1):
                cumple = 0
            numero = numero+1
        return(cumple)
    
    # PROGRAMA -------------------------
    # INGRESO
    matriz=np.array([[1, 3, 5, 4, 6, 2, 9, 8, 7],
                     [7, 6, 2, 1, 9, 8, 5, 4, 3],
                     [8, 9, 4, 5, 3, 7, 6, 2, 1],
                     [9, 7, 8, 6, 1, 3, 2, 5, 4],
                     [4, 1, 6, 9, 2, 5, 3, 7, 8],
                     [2, 5, 3, 7, 8, 4, 1, 6, 9],
                     [5, 2, 7, 3, 4, 1, 8, 9, 6],
                     [3, 8, 9, 2, 7, 6, 4, 1, 5],
                     [6, 4, 1, 8, 5, 9, 7, 3, 2]])
    
    # PROCEDIMIENTO
    essudoku = 1
    
    # verifica por filas
    fila = 0
    while not(fila>=9 or essudoku==0):
    
        # Selecciona vector
        vector = matriz[fila,:]
    
        verifica = unicos(vector)
        if (verifica==0):
            essudoku = 0
        fila = fila+1
    
    # Verifica por columnas
    columna = 0
    while not(columna>=9 or essudoku==0):
    
        # Selecciona vector
        vector = matriz[:,columna]
    
        verifica = unicos(vector)
        if (verifica==0):
            essudoku = 0
        columna = columna+1
    
    # Verifica en cada submatriz de 3x3
    fila = 0
    columna = 0
    submatriz = matriz[fila:fila+3,columna:columna+3]
    # convertir submatriz a vector
    # aplicar funcion unicos, para verificar essudoku
    
    # SALIDA
    print('¿es la matriz sudoku? [0,1]: ')
    print(essudoku)
    
  • s3Eva_IIT2007_T1 Depreciación por suma de dígitos

    Ejercicio: 3Eva_IIT2007_T1 Depreciación por suma de dígitos

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2007_T1 Depreciación por suma de dígitos
    import numpy as np
    
    articulo = input('nombre articulo: ')
    anios = int(input('años a depreciar: '))
    valor = float(input('valor inicial: '))
    
    # PROCEDIMIENTO
    suma = 0
    contador = anios
    while not(contador<1):
        suma = suma+contador
        contador = contador-1
    
    # vector depreciacion
    deprecia = np.zeros(anios+1, dtype=float)
    deprecia[0] = 0
    contador = anios
    fila = 1
    while not(contador<1):
        deprecia[fila] = valor*(contador/suma)
        contador = contador-1
        fila = fila+1
    
    actual = np.zeros(anios+1,dtype=float)
    fila = 0
    actual[0] = valor
    fila = 1
    while not(fila>anios):
        actual[fila] = actual[fila-1]-deprecia[fila]
        fila = fila+1
        
    print(deprecia)
    print(' El valor actual por anio es:')
    
    # SALIDA
    fila = 0
    print(' anio:   valor:')
    while not(fila>anios):
        print(str(fila)+' | '+str(actual[fila]))
        fila = fila+1
    

    resultado del algoritmo

    nombre articulo: vehiculo
    años a depreciar: 5
    valor inicial: 10000
    [   0.  3333.33333333 2666.66666667  2000.  1333.33333333
      666.66666667]
     El valor actual por anio es:
     anio:   valor:
    0 | 10000.0
    1 | 6666.666666666667
    2 | 4000.0000000000005
    3 | 2000.0000000000005
    4 | 666.6666666666672
    5 | 5.684341886080801e-13
    >>> 
    
  • s3Eva_IT2007_T2 Función para crear Acrónimos

    Ejercicio3Eva_IT2007_T2 Función para crear Acrónimos

    Propuesta de solución en Python:

    Ejemplo:
    >>> 
    frase:MINISTERIO DE EDUCACIÓN Y CULTURA
    MEC

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2007_T2 Crear Acrónimos
    # propuesta: edelros@espol.edu.ec
    # Tarea: completar la idea para toda la frase
    
    # INGRESO
    frase = input('frase:')
    
    # PROCEDIMIENTO
    n = len(frase)
    
    # Convierte frase a MAYUSCULAS
    frase = frase.upper()
    
    # inicializa salida z con la primera letra
    # de la primera palabra
    i = 0
    z = frase[i]
    
    # buscar la primera letra de cada palabra
    # a partir de la segunda posición
    # completar para 'de ' y revisar con 'desarrollo'
    i = 1
    while not(i>=(n-1)):
        if (frase[i]==' ' and  not(frase[i+1]=='D')):
            if not(frase[i+1]=='Y'):
                z = z + frase[i+1]
        i = i + 1
    
    # SALIDA
    print(z)
    
  • s3Eva_IT2007_T1 Máquina tragamonedas

    Ejercicio3Eva_IT2007_T1 Máquina tragamonedas

    [ algoritmo ] [ diagrama flujo ]

    Considere el siguiente algoritmo de introducción al tema, Simplificando el ingreso del número por teclado:

    # 3ra Evaluación I Término 2007
    # Tema 1. Juego con maquina tragamonedas
    
    # INGRESO
    numero = int(input('numero abc:'))
    
    # PROCEDIMIENTO
    c = numero%10
    numero = numero//10
    b = numero%10
    numero = numero//10
    a = numero
    
    premio = 0
    if ((a==b) and (b==c) and(a==c)):
        premio = 20
    if ((a==b)and (a!=c)) or ((a==c) and (a!=b)) or ((b==c) and (b!=a)):
        premio = 10
    
    # SALIDA
    print(premio)
    

    Luego de revisar el algoritmo: ¿se comprende mejor la necesidad de usar cocientes y residuos? ¿considera viable el uso e este segundo algoritmo?

    [ algoritmo ] [ diagrama flujo ]
    ..


    Algoritmo en Python

    usando aleatorios sin Cocientes y Residuos

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2007_T1 Máquina tragamonedas
    # Propuesta: edelros@espol.edu.ec
    
    import random as rnd
    
    # INGRESO
    monedas = int(input(" Cuantas monedas tiene?: "))
    
    # PROCEDIMIENTO
    caja = 15
    trio = 0
    par  = 0
    
    turno = 0 
    while (monedas>=5 and caja>=15):
        turno = turno + 1
        monedas = monedas - 5
        caja = caja + 5
    
        # sorteo de números
        # entero(aleatorio*posibles) + inicio
        a = int(rnd.random()*10) + 0
        b = int(rnd.random()*10) + 0
        c = int(rnd.random()*10) + 0
        
        if (a==b and b==c and c==a):
            caja = caja - 20
            monedas = monedas+20
            trio = trio + 1
        else:
            if (a==b or b==c or c==a):
                caja = caja - 10
                monedas = monedas+10
                par  = par + 1
    
    # SALIDA
    print(" Turnos jugados: ", turno)
    print(" Trios: ", trio)
    print(" Pares: ", par)
    print(" monedas jugador: ", monedas)
    

    Ejemplo:

    >>> 
     Cuantas monedas tiene?: 25
     Turnos jugados:  1
     Trios:  0
     Pares:  1
     monedas jugador:  30
    >>> 
     Cuantas monedas tiene?: 30
     Turnos jugados:  5
     Trios:  0
     Pares:  3
     monedas jugador:  35
    >>> 
    

    Presentadas las dos formas de algoritmos, ¿podría presentar una versión mejorada que integre lo mejor de las dos soluciones?

    [ algoritmo ] [ diagrama flujo ]
    ..


    Diagrama de Flujo

    diagrama de flujo TragaMonedas 02

    [ algoritmo ] [ diagrama flujo ]


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

    ejercicios resueltos Python 3eva_it2007_t1 pdf

    ejercicios resueltos Matlab 3eva_it2007_t1 pdf

  • s3Eva_IIT2006_T1 Crear usuarios en lista de nombres

    Ejercicio: 3Eva_IIT2006_T1 Crear usuarios en lista de nombres

    Propuesta de solución en Python:

    Ejemplo:
    >>> 
    cuantos empleados: 3
    primer nombre: JUAN
    segundo nombre: PEDRO
    apellido paterno: RODRIGUEZ
    primer nombre: MARIA
    segundo nombre: ROSA
    apellido paterno: PEREZ
    primer nombre: CARLOS
    segundo nombre: JOSE
    apellido paterno: CASTRO
    jprodrig
    mrperez
    cjcastro

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2006_T1 Crear usuarios en lista de nombres
    # propuesta: edelros@espol.edu.ec
    
    def user(nombre1,nombre2,apellidop):
        z = ''
        i = 0
        z = z+nombre1[i]
        z = z+nombre2[i]
    
        # copiar letras del apellido
        n = len(apellidop)
    
        # Revisando si no hay suficientes letras en el apellido
        i = 0
        while not(i>=6 or i>=n):
            z = z+apellidop[i]
            i = i+1
        z = z.lower()
        return(z)
    
    # PROGRAMA
    m = int(input('cuantos empleados: '))
    empleado = []
    i = 0
    while not(i>=m):
        nombre1 = input('primer nombre: ')
        nombre2 = input('segundo nombre: ')
        apellidop = input('apellido paterno: ')
        registro = {'nombre1':nombre1,'nombre2':nombre2,
                  'apellidop':apellidop,'usuario':''}
        empleado.append(registro)
        i = i+1
    
    # PROCEDIMIENTO
    i = 0
    while not(i>=m):
        a = empleado[i]['nombre1']
        b = empleado[i]['nombre2']
        c = empleado[i]['apellidop']
        z = user(a,b,c)
        empleado[i]['usuario'] = z
        i = i+1
    
    # SALIDA
    i = 0
    while not(i>=m):
        print(empleado[i]['usuario'])
        i = i + 1
    
  • s3Eva_IT2006_T4 Juego planta bombas (buscaminas)

    Ejercicio3Eva_IT2006_T4 Juego planta bombas (buscaminas)

    Nota: contiene tareas por realizar, revisar comentarios en las instrucciones

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2006_T4 Juego planta bombas (buscaminas)
    # propuesta: edelros@espol.edu.ec
    import numpy as np
    import random as rnd
    
    def plantabombas(m,n):
        campo = np.zeros(shape=(n,n),dtype=int)
        
        bomba = 1
        while not(bomba>m):
            fila = int(rnd.random()*n)+0
            columna = int(rnd.random()*n)+0
            
            if (campo[fila,columna] == 0):
                campo[fila,columna] = 1
                bomba = bomba + 1
                
        return(campo)
    
    # PROGRAMA --------------
    
    # INGRESO
    n = int(input('tamaño de tablero[n,n]: '))
    m = int(input('cantidad de minas:'))
    
    # TAREA: validar que la cantidad de minas
    # sea menor que casillas en tablero
    
    f = int(input('coordenada fila:'))
    while not(f>0 and f<(n-1)):
        f = int(input('coordenada fila:'))
    
    c = int(input('coordenada columna:'))
    while not(c>0 and c<(n-1)):
        c = int(input('coordenada columna:'))
    
    # PROCEDIMIENTO
    # Crear tablero con bombas
    territorio = plantabombas(m,n)
    
    # solamente si no hay bomba al aterrizar reporta
    if (territorio[f,c] == 0):
        vertical   = territorio[f-1,c]+territorio[f+1,c]
        horizontal = territorio[f,c-1]+territorio[f,c+1]
        # TAREA: Completar las casillas en diagonal
        reporta = vertical + horizontal
    else:
        reporta = -1
    
    # SALIDA
    print('reporte de llegada: ',reporta)
    print('territorio: ')
    print(territorio)
    

    Ejemplo, aún falta desarrolar la parte de tarea:

    tamaño de tablero[n,n]: 8
    cantidad de minas:40
    coordenada fila:3
    coordenada columna:3
    reporte de llegada:  4
    territorio: 
    [[1 1 0 1 1 1 1 1]
     [1 0 1 0 0 1 1 1]
     [0 1 1 1 1 1 1 0]
     [1 1 1 0 1 1 0 1]
     [0 1 0 1 1 1 0 0]
     [1 0 0 0 1 0 0 0]
     [1 0 1 0 0 1 1 1]
     [1 1 0 1 1 0 0 1]]
    >>>
  • s3Eva_IT2006_T2 Intercalar palabras pastestring(a,b,p)

    Ejercicio: 3Eva_IT2006_T2 Intercalar palabras pastestring(a,b,p)

    Resultado obtenido:

    >>> pastestring('FUNDAMENTOS','PROG',4)
    'FUNDPROGAMENTOS'
    >>> 
    

    Algoritmo en Python

    # 3Eva_IT2006_T2 Intercalar palabras pastestring(a,b,p)
    
    def pastestring(a,b,p):
        n = len(a)
        m = len(b)
        cadena = a[0:p]+b
        cadena = cadena + a[p:]
        return(cadena)
    

    Tarea: verificar que p sea menor que el tamaño de a.

  • s3Eva_IT2005_T4 Tabla de Pozo millonario

    Ejercicio: 3Eva_IT2005_T4 Tabla de Pozo millonario

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2005_T4 Tabla de Pozo millonario
    # Propuesta de solucion: edelros@espol.edu.ec
    
    import numpy as np
    import random as rnd
    
    # INGRESO
    n = int(input('seleccionar:'))
    m = int(input('de cuantos:' ))
    
    # PROCEDIMIENTO
    # Ninguno seleccionado
    tabla = np.zeros(m+1,dtype=int)
    
    # sorteando sin repetir
    i = 1
    while not(i>n):
        sorteado = int(rnd.random()*m)+1
        if (tabla[sorteado]==0):
            tabla[sorteado] = 1
            i = i + 1
    
    #SALIDA
    k = 1
    print('Los numeros de la tabla son:')
    while not(k>m):
        if (tabla[k]==1):
            print(k)
        k = k + 1
    

    resultado del algoritmo

    seleccionar: 10
    de cuantos: 20
    Los numeros de la tabla son:
    1
    3
    4
    5
    10
    11
    12
    16
    17
    19
    >>> 
    

    Tarea: extraer los sorteados en otro arreglo que contenga solo los números seleccionados

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

    ejercicios resueltos Python mejo_it2005_t4 pdf

    ejercicios resueltos Matlab mejo_it2005_t4 pdf

  • s3Eva_IT2005_T2 Juego biológico

    Ejercicio: 3Eva_IT2005_T2 Juego biológico

    Resultado esperado:

    tamaño de matriz nxn:5
    cantidad seres vivos: 20
    [[1 1 1 1 0]
     [1 1 1 0 1]
     [0 1 1 1 1]
     [1 1 1 1 1]
     [0 0 1 1 1]]
    porcentaje inicial: 80.0
    nueva matriz:
    [[1 1 1 1 0]
     [1 0 1 0 1]
     [0 1 0 1 1]
     [1 1 1 0 1]
     [0 0 1 1 1]]
    porcentaje final: 68.0
    >>> 
    

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2005_T2 Juego biológico
    # propuesta: edelros@espol.edu.ec
    # por ser semejante, se usa la funcion de: 
    #  3Eva_IT2006_T4 Juego planta bombas (buscaminas)
    import numpy as np
    import random as rnd
    
    def plantabombas(m,n):
        campo = np.zeros(shape=(n,n),dtype=int)
        bomba = 1
        while not(bomba>m):
            fila = int(rnd.random()*n)+0
            columna = int(rnd.random()*n)+0
            if (campo[fila,columna]==0):
                campo[fila,columna] = 1
                bomba = bomba + 1
        return(campo)
    
    def porcentaje(campo):
        tamano = np.shape(campo)
        n = tamano[0]
        m = tamano[1]
        suma = 0
        fila = 0
        while not(fila>=n):
            columna = 0
            while not(columna>=m):
                suma = suma + campo[fila,columna]
                columna = columna + 1
            fila = fila + 1
        z = 100*suma/(n*n)
        return(z)
    
    # PROGRAMA  literal a ------------------
    n = int(input('tamaño de matriz nxn:'))
    vivos = int(input('cantidad seres vivos: '))
    
    # PROCEDIMIENTO
    biologico  = plantabombas(vivos,n)
    participa1 = porcentaje(biologico)
    
    # SALIDA
    print(biologico)
    print('porcentaje inicial:', participa1)
    
    # PROGRAMA  literal b ------------------
    fila = 1 # desde segunda fila
    while not(fila>=(n-1)): # hasta penultima fila
    
        columna = 1 # desde segunda columna
        while not(columna>=(n-1)): # hasta penultima columna
    
            # suma celda izquierda y derecha
            suma = biologico[fila-1,columna]+ biologico[fila+1,columna]
            # suma celda arriba y abajo
            suma = suma + biologico[fila,columna-1]+biologico[fila,columna+1]
            
            if suma >=4: # sobrepoblacion, en la celda no se sobrevive
                biologico[fila,columna] = 0
                
            columna = columna + 1
            
        fila = fila + 1
    
    participa2 = porcentaje(biologico)
    print('nueva matriz:')
    print(biologico)
    print('porcentaje final:', participa2)