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.

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
# 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_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 3×3.

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

# 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_IT2007_T1 Máquina tragamonedas

Ejercicio3Eva_IT2007_T1 Máquina tragamonedas

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

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 usando aleatorios sin Cocientes y Residuos

Instrucciones en Python

# 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?


Diagrama de Flujo

diagrama de flujo TragaMonedas 02

ejercicios resueltos Python 3eva_it2007_t1 pdf

ejercicios resueltos Matlab 3eva_it2007_t1 pdf

s3Eva_IIT2007_T1 Depreciación por suma de dígitos

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

Propuesta de solución 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_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

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