s3Eva_IIT2010_T2 Ubicar número dentro de una matriz

Ejercicio: 3Eva_IIT2010_T2 Ubicar número dentro de una matriz

Propuesta de solución en Python

Tarea: integrar con tema 3

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2010_T2 Ubicar número dentro de una matriz
# Propuesta: edelros@espol.edu.ec
# Tarea: integrar con tema 3

import numpy as np
import random as rnd

# Tema 2. ubica un numero k en la matriz de nxn
def ubica(matriz,k):
    tamano = np.shape(matriz)
    n = tamano[0]
    m = tamano[1]
    
    donde = np.zeros(2, dtype=int)
    encontre = 0
    fila = 0
    while not(fila>=n or encontre==1):
        columna = 0
        while not(columna>=n or encontre==1):
            if (matriz[fila,columna]==k):
                encontre = 1
                donde[0] = fila
                donde[1] = columna
            columna = columna+1
        fila = fila+1
    return(donde)

resultado del algoritmo

>>> matriz = np.array([[8, 2, 6],
		       [5, 4, 0],
                       [1, 7, 3]])
>>> ubica(matriz,7)
array([2, 1])
>>> 

s3Eva_IT2010_T2 Funciones ocupados y ubica libre en matriz

Ejercicio: 3Eva_IT2010_T2 Funciones ocupados y ubica libre en matriz

resultado obtenido:

matriz = [[1,1,1,1],
          [1,0,0,0],
          [0,1,0,1]]

ocupados:  7
primer encontado:  [1, 1]
>>> 

Instrucciones en Python

# 3Eva_IT2010_T2 Funciones ocupados y ubica libre en matriz
# resolver sin usar numpy
import numpy as np

def ocupados(matriz):
    suma = np.sum(matriz)
    return(suma)

def ubicalibre(matriz):
    matriz = np.array(matriz)
    tamano = np.shape(matriz)
    n = tamano[0]
    m = tamano[1]
    encontre = 0
    a = np.NaN
    b = np.NaN
    i = 0
    while i<n and encontre==0:
        j = 0
        while j<m and encontre ==0:
            if matriz[i,j] == 0:
                encontre = 1
                a = i
                b = j
            j = j+1
        i = i + 1
    return([a,b])

# PROGRAMA
matriz = [[1,1,1,1],
          [1,0,0,0],
          [0,1,0,1]]

# PROCEDIMIENTO
aforo = ocupados(matriz)
libre = ubicalibre(matriz)

# SALIDA
print("ocupados: ", aforo)
print('primer encontado: ',libre)

s3Eva_IIT2010_T1 Matriz con aleatorios no repetidos (desordena)

Ejercicio: 3Eva_IIT2010_T1 Matriz con aleatorios no repetidos (desordena)

Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2010_T1 Matriz con aleatorios no repetidos (desordena)
# Propuesta: edelros@espol.edu.ec
# Tarea: integrar con tema 3

import numpy as np
import random as rnd

def desordena(n): 
    matriz = -1*np.ones(shape=(n,n), dtype=int)
    usados = []
    
    # entero aleatorio [0,n**2), no incluye n**2
    intervalo = n**2
    
    fila = 0
    while not(fila>=n):
        
        columna = 0
        while not(columna>=n):

            # numero no repetido
            numero = int(rnd.random()*intervalo)+0
            while numero in usados:
                numero = int(rnd.random()*intervalo)+0
            
            matriz[fila,columna] = numero
            usados.append(numero)
            
            columna = columna + 1
            
        fila = fila + 1
    return(matriz)

resultado del algoritmo:

>>> desordena(3)
array([[0, 7, 2],
       [6, 5, 8],
       [4, 1, 3]])
>>> desordena(3)
array([[7, 3, 6],
       [8, 1, 0],
       [5, 2, 4]])
>>> 

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


Instrucciones 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_IT2009_T3 Aspirantes a escuela de policia

Ejercicios: 3Eva_IT2009_T3 Aspirantes a escuela de policia

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.

# 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 ***')

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_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.

Instrucciones 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_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.

# 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_IT2008_T3 IMC: índice masa corporal

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

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:

imc diagrama de flujo


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

s3Eva_IIT2008_T1 Contar palabras para un clasificado

Ejercicio: 3Eva_IIT2008_T1 Contar palabras para un clasificado

Intrucciones 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.