Etiqueta: fundamentos programacion

fundamentos de programación con Python.

  • s3Eva_IT2010_T1 Ecuación Verhulst

    Ejercicio: 3Eva_IT2010_T1 Ecuación Verhulst

    Para probar el ejercico se usa po=1, a=0.5 b=0.02 y tiempo maximo = 40

    con el algoritmo se puede observar:

    poblacion inicial p0:1
    factor a:0.5
    factor b:0.02
    calcular en t:40
    tiempo:
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
    pi:
    [1.0, 1.6070209244539886, 2.5434661610272977, 3.9338336459524355, 5.885057578381894, 8.417395145518748, 11.39009430586252, 14.494961881174662, 17.366232541771218, 19.73763290519436, 21.51998720327935, 22.766959376324014, 23.596257413785583, 24.129351687331045, 24.464588393188883, 24.67249666532522, 24.80032998711217, 24.878512232622807, 24.92617278160938, 24.95516943765841, 24.972789690449925, 24.983489042065916, 24.98998299475044, 24.99392342119231, 24.996314016127226, 24.99776420806526, 24.998643875922703, 24.999177451612496, 24.999501092725076, 24.99969739506529, 24.999816459955184, 24.999888677013956, 24.999932479077533, 24.999959046446833, 24.999975160398368, 24.999984934014144, 24.999990862015494, 24.99999445753143, 24.99999663832259, 24.999997961039472, 24.99999876330789]
    >>>
    

    que produce la siguiente gráfica

    Algoritmo en Python

    # 3Eva_IT2010_T1 Ecuación Verhulst
    import numpy as np
    import matplotlib.pyplot as plt
    
    def f_logistica(p0,a,b,t):
        numerador = a*p0
        denominador = b*p0+(a-b*p0)*np.exp(-a*t)
        p = numerador/denominador
        return(p)
    
    # PROGRAMA ------
    # INGRESO
    p0 = float(input("poblacion inicial p0:"))
    a  = float(input("factor a:"))
    b  = float(input("factor b:"))
    t  = float(input("calcular en t:"))
    
    # PROCEDIMIENTO
    ti = []
    pi = []
    i = 0
    while i<=t:
        pi.append(f_logistica(p0,a,b,i))
        ti.append(i)
        i = i + 1
    
    # SALIDA
    np.set_printoptions(precision=3)
    print('tiempo:')
    print(ti)
    print('pi:')
    print(pi)
    
    # grafica
    plt.plot(ti,pi)
    plt.xlabel('ti')
    plt.ylabel('pi')
    plt.title('ecuacion logística')
    plt.show()
    

    Tarea, estimar el tiempo t cuando la población se duplica

  • s3Eva_IIT2009_T2 Registrar alquiler de casilleros

    Ejercicio3Eva_IIT2009_T2 Registrar alquiler de casilleros

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

    Para implementar el menú se puede usar la estructura: if ... elif... elif... else.
    Un casillero de uso común se direcciona por fila y columna numeradas desde el 1, por lo que se realizará la corrección de desplazamiento al ingresar el dato de fila-1 y columna-1 para que sea transparente para el usuario.

    Tarea: Validar que los índices de casilla ingresados se encuentren dentro del rango de la matriz casilleros, pues si se ingresa valores fuera de rango el programa se detiene con un error.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2009_T2 Registrar alquiler de casilleros
    # propuesta: edelros@espol.edu.ec
    # tarea: validar indices en rango de matriz
    
    import numpy as np 
    
    n = int(input('filas de casilleros: '))
    m = int(input('columnas de casilleros: '))
    
    # inicializa casilleros con ceros
    # usa fila y columna cero, desplazando el indice
    casillero = np.zeros(shape=(n,m),dtype=int)
    
    opcion = '0'
    while not(opcion=='5'):
        print('1. Asignar casillero')
        print('2. Devolver casillero')
        print('3. consultar casillero')
        print('4. Estadísticas')
        print('5. salir')
        
        opcion = input(' Cual opcion: ')
        
        if (opcion=='1'):
            print('ASIGNAR ')
            f = int(input('fila: '))
            c = int(input('columna: '))
            dato = int(input('dato:'))
            if (casillero[f-1,c-1]==0):
                casillero[f-1,c-1] = dato
                print('casillero asignado')
            else:
                print('** casillero ocupado, solicite otro.. **')
                
        elif (opcion=='2'):
            print('DEVOLVER')
            f = int(input('fila: '))
            c = int(input('columna: '))
            dato = int(input('dato:'))
            if (casillero[f-1,c-1]==dato):
                casillero[f-1,c-1] = 0
                print('casillero liberado')
            else:
                print('el casillero no corresponde al dato')
    
        elif (opcion=='3'):
            print('CONSULTAR')
            print(casillero)
    
        elif (opcion=='4'):
            print('ESTADISTICAS')
            ocupado = 0
            libre = 0
            for f in range(0,n,1):
                for c in range(0,m,1):
                    if (casillero[f,c]==0):
                        libre = libre + 1
                    else:
                        ocupado = ocupado + 1
            print('casilleros ocupados: '+str(ocupado))
            print('casilleros libres: '+str(libre))
    
        elif (opcion=='5'):
            print('gracias por usar el software')
    
        else:
            print('opcion no existe')
    

    ejercicios resueltos Python 3eva_iit2009_t2 pdf

    ejercicios resueltos Matlab 3eva_iit2009_t2 pdf

  • s3Eva_IT2009_T3 Aspirantes a escuela de policía

    Ejercicios: 3Eva_IT2009_T3 Aspirantes a escuela de policía

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

    Para resolver el problema, se usa la estructura básica para un menú y una estructura de datos con los campos de la tabla aspirante. El promedio de edad es la suma de la columna edad dividido para el número de registros. En los casos de totales por género e instrucción se usarán contadores.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2009_T3 Aspirantes a escuela de policia
    # Propuesta de solucion: edelros@espol.edu.ec
    # Tarea: Desarrollar caso 3, Contar por genero
    
    import numpy as np
    
    # Tabla usada es aspirante
    aspirante = []
    n = 0
    opcion = 0
    while not(opcion==5):
        print('1. Registra aspirante')
        print('2. Promedio de edad')
        print('3. Total por genero')
        print('4. Total por instruccion')
        print('5. Salir')
        
        opcion = int(input('cual opcion: '))
        
        if (opcion==1):
            print('  Registra aspirante')
            texto  = input('           nombre: ')
            numero = int(input('             edad: '))
            gen    = int(input('     genero [1,2]: '))
            escolar   = int(input('instruccion [1,3]: '))
            candidato = {'nombre':texto,
                         'edad':numero,
                         'genero':gen,
                         'instruccion':escolar}
            aspirante.append(candidato)
            n = n + 1
            
        if (opcion==2):
            print('  Promedio de edad')
    
            # n=len(aspirante)
            suma = 0
            fila = 0
            while not(fila>=n):
                suma = suma + aspirante[fila]['edad']
                fila = fila + 1
            promedio = suma/n
            print(promedio)
            
        if (opcion==3):
            print('  Total por genero')
            # TAREA: Contar por genero
            
        if (opcion==4):
            print('  Total por instruccion')
            
            # No se usará la fila 0 de veces
            veces = np.zeros(3+1,dtype=int)
            fila = 0
            while (fila<n):
                k = aspirante[fila]['instruccion']
                veces[k] = veces[k]+1
                fila = fila + 1
    
            # Salida
            print('   primaria: '+str(veces[1]))
            print(' segundaria: '+str(veces[2]))
            print('   superior: '+str(veces[3]))
            
        if (opcion==5):
            print(' gracias por usar el software ')
    
        if (opcion<1 or opcion>5):
            print(' *** NO ES OPCION DISPONIBLE ***')
    

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

    ejercicios resueltos Python 3eva_it2009_t3 py_pdf

    ejercicios resueltos Matlab 3eva_it2009_t3 pdf

  • s3Eva_IT2009_T2 Seleccionar billetes de cajero automático

    Ejercicio3Eva_IT2009_T2 Seleccionar billetes de cajero automático

    El algoritmo requiere la cantidad como un número entero.

     cantidad=77

    Se obtiene el número de billetes por denominación como cociente de cantidad y la de nominación en forma descendente [50,20,10,5,1]

    billetes50 = cantidad//50
    

    Por cada operación anterior se debe obtener el saldo, restando el valor de los billetes por denominación por la cantidad o saldo anterior

    saldo = cantidad-50*(billete50)
    

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2009_T2 Seleccionar billetes de cajero automático
    # Propuesta en forma de programa. edelros@espol.edu.ec.
    
    # INGRESO
    cantidad = int(input('Cantidad solicitada: '))
    
    # PROCEDIMIENTO
    
    # cociente O división entera //
    billete50 = cantidad//50
    saldo     = cantidad-50*(billete50)
    billete20 = saldo//20
    saldo     = saldo-20*(billete20)
    billete10 = saldo//10
    saldo     = saldo-10*(billete10)
    billete05 = saldo//5
    billete01 = saldo-5*(billete05)
    
    # Salida
    print ('de 50:',billete50)
    print ('de 20:',billete20)
    print ('de 10:',billete10)
    print ('de 05:',billete05)
    print ('de 01:',billete01)
    

    Nota: Si ha completado la unidad 4, realice el ejercicio usando un vector denominación de billetes = [50,20,10,5,1] par obtener el resultado.

    Algoritmo como función, si ya ha completado la unidad 5.

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2009_T2 Seleccionar billetes de cajero automático
    # Propuesta función. edelros@espol.edu.ec.
    import numpy as np
    
    def billete(cantidad):
    
        # division entera o cociente //
        billete50 = cantidad//50
        saldo     = cantidad - 50*(billete50)
        billete20 = saldo//20
        saldo     = saldo - 20*(billete20)
        billete10 = saldo//10
        saldo     = saldo - 10*(billete10)
        billete05 = saldo//5
        billete01 = saldo - 5*(billete05)
    
        # define variable de salida
        entrega    = np.array([0, 0, 0, 0, 0], int)
        entrega[0] = billete50
        entrega[1] = billete20
        entrega[2] = billete10
        entrega[3] = billete05
        entrega[4] = billete01
    
        return (entrega)
    

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

    ejercicios resueltos Python 3eva_it2009_t2 pdf

    ejercicios resueltos Matlab 3eva_it2009_t2 pdf

  • s3Eva_IIT2008_T4 Derivar pacientes del Hospital IESS

    Ejercicio: 3Eva_IIT2008_T4 Derivar pacientes del Hospital IESS

    Propuesta de solución en Python, también se adjunta versión en matlab.pdf

    Desarrollar el menú de acuerdo a los ítems propuestos. Usar una estructura para cada tabla. Realizar el registro de pacientes de forma no secuencial, es decir, iniciar el programa con cero pacientes (n=0) e incrementar una fila (n+1) por el uso del caso 1. En el caso 4, solo se muestra la lista de pacientes asignados a un hospital.

    Tarea: Desarrollar un arreglo de contadores de pacientes para cada hospital en el caso 4.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2008_T4 Derivar pacientes del Hospital IESS
    
    paciente = []
    hospital = []
    
    opcion   = -1
    while not(opcion =='5'):
        print(' 1. Ingreso de Paciente')
        print(' 2. Registro de Hospitales')
        print(' 3. Hospital asignado a Paciente')
        print(' 4. Lista Total pacientes a otro Hospital')
        print(' 5. Salir')
    
        opcion= input('cual opcion: ')
    
        if (opcion == '1'):
            print(' ----- 1. Ingreso de Paciente')
            ced = input('cedula : ')
            nom = input('nombre: ')
            tra = input('tratamiento: ')
            asg = int(input('asigna: '))
    
            paciente.append({'cedula':ced,
                             'nombre': nom,
                             'tratamiento': tra,
                             'asigna': asg})
    
        if (opcion =='2'):
            print(' ----- 2. Registro de Hospitales')
            nom = input('nombre hospital: ')
            tra = input('Tratamiento: ')
    
            hospital.append({'nombre': nom,
                             'tratamiento':tra})
    
        if (opcion =='3')
            print(' -----  3. Hospital asignado a Paciente')
            ced = input('cedula : ')
            n = len(paciente)
            i = 0
            encontre = -1
            while not(i>n or encontre>=0)
                if (ced == paciente[i]['cedula']):
                    encontre = i
                i = i+1
            if (encontre>=0):
                cual = paciente[encontre]['asigna']
                print('fue transferida a: ', hospital[cual]['nombre'])
            else:
                print('el paciente no se ha ingresado...')
    
        if (opcion=='4'):
            print(' ----- 4. Lista de Total pacientes a otro Hospital')
            cual = int(input('cual hospital [numero] : '))
            while not(cual>=0  and cual<=len(hospital)):
                cual = int(input('cual hospital [numero] : '))
            n = len(paciente)
            i = 0
            while not(i>=n):
                if (cual == paciente[i]['asigna']):
                    print(paciente[i]['nombre'])
                i= i+1
    
        if (opcion == '5'):
            print('gracias por venir al IESS..')
            print('usuario@espol.edu.ec')
    

    ejercicios resueltos Matlab 3eva_iit2008_t4 pdf

  • s3Eva_IIT2008_T1 Contar palabras para un clasificado

    Ejercicio: 3Eva_IIT2008_T1 Contar palabras para un clasificado

    Algoritmo en Python

    A partir del ejemplo,  se consideran como separadores de palabras los espacios ' ', por lo que al encontar un espacio se cuenta una palabra.
    Adicionalmente, una coma ',' o un punto '.' tambien pueden usarse como sepadador de palabras, y van seguidos de un espacio.

    Solicito Asistente oficina Publicidad, 320 promedio, 4horas. Telf 555444 Silvia Sierra

    Como algoritmo:

    # 3Eva_IIT2008_T1 Contar palabras para un clasificado
    
    # INGRESO
    frase = input('frase: ')
    
    # PROCEDIMIENTO
    n = len(frase)
    contar = 0
    i = 0
    while not(i>=n):
        if frase[i] == ' ':
            contar = contar + 1
        if frase[i] == ',' and frase[i+1]!=' ':
            contar = contar + 1
        if frase[i] == '.' and frase[i+1]!=' ':
            contar = contar + 1
        i = i + 1
    encontradas = contar + 1
    
    # SALIDA
    print('cantidad caracteres: ', n)
    print('palabras encontradas: ',encontradas)
    

    como funcion:

    # 3Eva_IIT2008_T1 Contar palabras para un clasificado
    
    def cuentapalabras(frase):
        n = len(frase)
        contar = 0
        i = 0
        while not(i>=n):
            if frase[i] == ' ':
                contar = contar + 1
            if frase[i] == ',' and frase[i+1]!=' ':
                contar = contar + 1
            if frase[i] == '.' and frase[i+1]!=' ':
                contar = contar + 1
            i = i + 1
        encontradas = contar + 1
        return(encontradas)
    
    # INGRESO
    frase = input('frase: ')
    
    # PROCEDIMIENTO
    cuenta = cuentapalabras(frase)
    
    # SALIDA
    print('palabras encontradas: ',cuenta)
    

    Tarea: Considere que algún cliente puede escribir el clasificado tan solo separando las palabras por puntos, en cuyo caso el conteo de palabras solo por espacios será insuficiente.

  • 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)