s1Eva_IIT2002_T4 cociente de Fibonacci

Ejercicio: 1Eva_IIT2002_T4 cociente de Fibonacci

Propuesta de solución en Python:

El ejercicio es una extensión del Algoritmo – Secuencia de Fibonacci, añadiendo la operación del cociente.

Se requiere guardar valores consecutivos del cociente para comparar su diferencia hasta cumplir con la precisión requerida.

Ejemplo de ejecución de algoritmo

>>> 
precision decimal: 0.001
cociente: 0.6181818181818182
con diferencia de:  0.0005347593582887278

Se añade al algoritmo de Fibonacci el cálculo del cociente.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2002_T4 Cociente de fibonacci
# propuesta: edelros@espol.edu.ec

# INGRESO
precision = float(input('precision decimal: '))

# PROCEDIMIENTO
a = 1 # Primer cociente
b = 1
c = a+b
cociente1 = a/b

a = b # Segundo cociente
b = c
c = a+b
cociente2 = a/b

diferencia = abs(cociente2-cociente1)
while not(diferencia<=precision):
    cociente1 = cociente2
    a = b
    b = c
    c = a+b
    cociente2 = a/b
    diferencia = abs(cociente2-cociente1)

# SALIDA
print('cociente:', cociente2)
print('con diferencia de: ', diferencia)

s1Eva_IIT2002_T3 Conjetura de Ullman

Ejercicio: 1Eva_IIT2002_T3 Conjetura de Ullman

Propuesta de solución en Python

Para el número seleccionado o «pensado» se realizan las operaciones paso a paso indicadas en el enunciado.

# INGRESO
n = int(input('piensa un número: '))

Para determinar paridad se obtiene el «residuo» de la división del número para 2 y así decidir cuál operación realizar.

r = n%2

Se sustituye el número por el resultado de la operación y se vuelve a aplicar si el resultado aún no es 1.

    if (r == 0):
        n = n//2
    else:
        n = n*3 + 1

Para conocer el número de operaciones realizadas se usa un contador.

La secuencia se puede almacenar en un vector (lista) para mostrar al final (TAREA)

Se usa un contador de operaciones para la respuesta

El esquema básico del algoritmo en Python es el siguiente:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2002_T3 Conjetura de Ullman
# propuesta: edelros@espol.edu.ec
# Tarea: convertir a función

# INGRESO
n = int(input('piensa un número: '))

# PROCEDIMIENTO
contar = 0
while not(n==1):
    r = n%2
    
    if (r == 0):
        n = n//2
    else:
        n = n*3 + 1
    print(n)
    contar = contar + 1

# SALIDA
print('operaciones realizadas: ', contar)

s1Eva_IIT2002_T2 Color de placas de vehículos

Ejercicio: 1Eva_IIT2002_T2 Color de placas de vehículos

Propuesta de solución con diagrama de flujo y Python: py_pdf .
Otra versión con matlab: matlab en pdf

Para el ejercicio se requiere el uso de vectores para almacenar cada placa y procesar los datos en el bloque de procedimiento.

Como todos los datos de entrada se han simplificado a la parte numérica de la placa, se usarán arreglos, aprovechando para practicar con numpy.

En el procedimiento se extrae una placa de un auto para obtener el dígito de las unidades. Con el dígito se puede usar condicionales para indicar cuál es el color que le corresponde y contar la placa de cada color asignado.

dígito COLOR ¿Cuántos?
1, 2 amarillo (código 1)
3, 4 café (código 2)
5, 6 rojo (código 3)
7, 8 azul (código 4)
9, 0 verde (código 5)

Se continúa con el siguiente auto hasta completar todos los autos registrados en el arreglo.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2002_T2 Color de placas de vehículos
# propuesta: edelros@espol.edu.ec

import numpy

# INGRESO
n = int(input('cuántos autos: '))

placa = numpy.zeros(n+1,dtype=int)
auto = 1
while not(auto>n):
    print('placa[',auto,']: ')
    placa[auto] = int(input('  : '))
    auto = auto+1

# PROCEDIMIENTO
# contadores por color
color = numpy.zeros(5+1,dtype=int)

# analiza cada auto
auto = 1
while not(auto>n):
    digito = placa[auto]%10
    if (digito==1 or digito==2):
        color[1] = color[1]+1
    if (digito==3 or digito==4):
        color[2] = color[2]+1
    if (digito==5 or digito==6):
        color[3] = color[3]+1
    if (digito==7 or digito==8):
        color[4] = color[4]+1
    if (digito==9 or digito==0):
        color[5] = color[5]+1
    auto = auto+1

# SALIDA
print('Autos por cada color:')
k = 1
while not(k>5):
    print('Color tipo ',k,'= ',color[k])
    k = k+1

Podría intentar realizar el ejercicio con listas, para comparar como se aplican los conceptos.

Tarea: validar que el número de vehículos sea positivo mayor que 0, validar que sean solo tres dígitos en cada placa.

Diagrama de Flujo

Diagrama de Flujo 1 – Ejercicio Color de placas de automoviles

 

Diagrama de Flujo 2 – Ejercicio Color de placas de automoviles

ejercicios resueltos Python parc_iit2002_t2 pdf

ejercicios resueltos Matlab parc_iit2002_t2 pdf

s1Eva_IIT2002_T1a Crea tablas de multiplicar con strings del 1 a n

Ejercicio: 1Eva_IIT2002_T1 Crea tablas de multiplicar con strings del 1 a n

Para crear la tabla del multiplicar mostrada en la pantalla, se requiere usar una cadena de caracteres para cada operación.

El ejemplo resuelto para suma muestra el concepto a usar.
Tarea: realizar para multiplicación

 1. Mostrar una tabla de sumar
 2. Mostrar una tabla de multiplicar
 3. Salir
  --- ¿Cuál opcion?: 1
 **** menu opcion 1. sumar ****
 tabla del número: 3
 tabla hasta n: 12

3 + 1 = 4
3 + 2 = 5
3 + 3 = 6
3 + 4 = 7
3 + 5 = 8
3 + 6 = 9
3 + 7 = 10
3 + 8 = 11
3 + 9 = 12
3 + 10 = 13
3 + 11 = 14
3 + 12 = 15

 1. Mostrar una tabla de sumar
 2. Mostrar una tabla de multiplicar
 3. Salir
  --- ¿Cuál opcion?:  

Para formar la cadena, se requiere usar el mismo tipo de datos convirtiendo cada variable numérica como numero en texto luego añadiendo (concatenando) con el símbolo suma ‘  + ‘ y asi sucesivamente:

cadena = str(numero) + ' + ' +str(i) + ' = '

Al final se completa con el resultado de la operación numérica

 cadena = cadena + str(resultado)

se muestra en pantalla la cadena, cambiando el valor de la variable ‘i‘ como un contador en un lazo/bucle .

ReferenciaMenú en Python – Condicionales «elif» semejante a «case»

Instrucciones en Python

# 1Eva_IIT2002_T1a Tablas de multiplicar
# Ejemplo de un menu
# las opciones se proponen por caracteres
# menu
opcion = '0'
while not(opcion=='3'):
    print(' 1. Mostrar una tabla de sumar')
    print(' 2. Mostrar una tabla de multiplicar')
    print(' 3. Salir')

    opcion=input('  --- ¿Cuál opcion?: ')
    
    if (opcion=='1'):
        print(' **** menu opcion 1. sumar ****')
        numero = int(input(' tabla del número: '))
        n = int(input(' tabla hasta n: ' ))

        # PROCEDIMIENTO
        i = 1
        while i<=n:
            resultado = numero+i
            cadena = str(numero) + ' + ' +str(i) + ' = '
            cadena = cadena + str(resultado)
            print(cadena)
            i = i+1
        
    elif (opcion=='2'):
        print(' **** menu opcion 2. multiplicar ****')
        print('desarrolle como tarea')
        
    elif (opcion=='3'):
        print(' **** menu opcion 3. Salir ****')
        print(' **** Saliendo del menu  ****')
        print(' **** Ejemplo de un menu ****')

    else:
        print('No existe la opcion en el menu')

s2Eva_IIT2002_T1 Verificar si es «Número perfecto»

Ejercicio: 2Eva_IIT2002_T1 Número perfecto

Un número perfecto es aquel que es igual a la suma de todos sus divisores, con excepción del mismo.

Ejemplo:
 6 es perfecto porque, 
   sus divisores son: 1, 2, 3 (6 no se considera).
   1+2+3=6

literal a. verificar mediante una función perfecto(n)

Se busca entre todos los números enteros i entre 1 y n, revisando el residuo entre n%i. Si el residuo es cero, es divisible y se acumula en suma para verificar el número perfecto. Al final de la búsqueda si n==suma se considera el número como perfecto.

Instrucciones en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IIT2002_T1 Número perfecto
# Propuesta de solución: edelros@espol.edu.ec

import numpy as np

# literal a. funcion
def perfecto(n):
    suma = 0
    i = 1
    while (i<n):
        residuo = n%i
        # Acumula solo si i es divisor
        if residuo == 0:
            suma = suma + i
        i = i + 1
    if n == suma:
        esperfecto = 1
    else:
        esperfecto = 0
    return (esperfecto)


# literal b. PROGRAMA ----------
# Nota, busca numeros perfectos entre [1,m]

# INGRESO
m = int(input('¿rango m? : '))

# PROCEDIMIENTO
encontrado = np.zeros(m+1,dtype=int)
k = 0
i = 1
while (i<=m):
    encontrado[i] = perfecto(i)
    i = i+1

# SALIDA
i = 1
while (i<=m):
    if encontrado[i]==1:
        print(i)
    i=i+1

literal b. Listar números perfectos entre [1,m], consiste en crear una lista con todos los números que se verifican con la función creada en el literal a.

resultado del algoritmo
Nota: cambiando el enunciado, se busca números perfectos en el rango [1,m]

¿rango m? : 50
6
28
>>> 
¿rango m? : 1000
6
28
496
>>> 
¿rango m? : 10000
6
28
496
8128
>>> 

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

ejercicios resueltos Python final_iit2002_t1 pdf

ejercicios resueltos Matlab final_iit2002_t1 pdf

s2Eva_IIT2001_T4 Control de habitaciones en una clínica

Ejercicio: 2Eva_IIT2001_T4 Control de habitaciones en una clínica

Propuesta de solución en Python:

Se plantea usar una lista para los datos de paciente y un arreglo para la ocupación de las habitaciones.

Paciente
cédula nombre código
1234 Juan 2
456 Maria 8

La lista de pacientes empieza vacia paciente=[] y se añaden datos con cada ingreso de paciente a la clínica. paciente.append()

Habitación
código 1 2 7 8
ocupada 0 1 0 1

 

El arreglo de habitaciones se inicializa en la opción=1 con el número de habitaciones disponibles en el edificio. Como el edificio tiene un número de habitaciones fija, se inicializa como un arreglo de tamaño n, con valores ceros al iniciar con todas las habitaciones vacias.

Instrucciones en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IIT2001_T4 Control de habitaciones en una clínica
# Tarea: abrir archivo de datos

import numpy as np

paciente=[]

# menu
opcion = '0'
while not(opcion=='6'):
    print(' 1. Ingresar habitaciones')
    print(' 2. Ingresar paciente y asignar habitación')
    print(' 3. Dar de alta a paciente, habitacion libre')
    print(' 4. Guardar datos de paciente')
    print(' 5. Abrir datos de pacientes')
    print(' 6. Salir')

    opcion = input('cual opcion: ')
    
    if (opcion=='1'):
        print(' **** 1. Ingresar habitaciones ****')
        n = int(input('cuantas:'))
        habitacion = np.zeros(n,dtype=int)
        print(habitacion)
        
    if (opcion=='2'):
        print(' **** 2. Ingresar paciente y asignar habitación ****')
        cedula = input('cedula: ')
        nombre = input('nombre: ')
        codigo = int(input('cual habitación: '))
        while (habitacion[codigo]==1):
            print(' la habitacion está ocupada,..')
            codigo = int(input('cual habitación: '))
            
        registro = [cedula,nombre,codigo]
        paciente.append(registro)

        habitacion[codigo] = 1

        print(paciente)
        
    if (opcion=='3'):
        print(' **** 3. Dar de alta a paciente, habitacion libre ****')
        print(paciente)
        cualpaciente=int(input(' numero paciente:'))
        donde=paciente[cualpaciente][2]
                
        if (habitacion[donde]==1):
            habitacion[donde] = 0
            paciente[cualpaciente][2] = 0
        else:
            print(' la habitacion no tiene paciente')
        print(habitacion)

    if (opcion=='4'):
        
        print(' **** 4. Guardar archivo ****')
        # trabajar con un archivo
        archivo = open('pacientes.txt','w')

        n = len(paciente)
        fila = 0
        while not(fila>=n):

            # Crea linea de texto con datos
            # para un registro, separada por comas
            registro = paciente[fila][0]+',' + paciente[fila][1] +','
            registro = registro +',' +str(paciente[fila][2]) +'\n'

            # Escribe registro en una línea del archivo
            archivo.write(registro)
            fila = fila+1
            
        archivo.close()     # Cierra el archivo 

    if (opcion=='5'):
        print(' 5. **** Abrir archivo ****')
        print(' # TAREA, COMPLETAR EL PROCESO')
                
    if (opcion=='6'):
        print(' 6. **** Salir ****')

completar la tarea.

resultado del algoritmo

 1. Ingresar habitaciones
 2. Ingresar paciente y asignar habitación
 3. Dar de alta a paciente, habitacion libre
 4. Guardar datos de paciente
 5. Abrir datos de pacientes
 6. Salir
cual opcion: 1
 **** 1. Ingresar habitaciones ****
cuantas:10
[0 0 0 0 0 0 0 0 0 0]
 1. Ingresar habitaciones
 2. Ingresar paciente y asignar habitación
 3. Dar de alta a paciente, habitacion libre
 4. Guardar datos de paciente
 5. Abrir datos de pacientes
 6. Salir
cual opcion: 1
 **** 1. Ingresar habitaciones ****
cuantas:10
[0 0 0 0 0 0 0 0 0 0]
 1. Ingresar habitaciones
 2. Ingresar paciente y asignar habitación
 3. Dar de alta a paciente, habitacion libre
 4. Guardar datos de paciente
 5. Abrir datos de pacientes
 6. Salir
cual opcion: 2
 **** 2. Ingresar paciente y asignar habitación ****
cedula: 123
nombre: Juan
cual habitación: 8
[['123', 'Juan', 8]]
 1. Ingresar habitaciones
 2. Ingresar paciente y asignar habitación
 3. Dar de alta a paciente, habitacion libre
 4. Guardar datos de paciente
 5. Abrir datos de pacientes
 6. Salir
cual opcion: 2
 **** 2. Ingresar paciente y asignar habitación ****
cedula: 234
nombre: Maria
cual habitación: 8
 la habitacion está ocupada,..
cual habitación: 7
[['123', 'Juan', 8], ['234', 'Maria', 7]]
 1. Ingresar habitaciones
 2. Ingresar paciente y asignar habitación
 3. Dar de alta a paciente, habitacion libre
 4. Guardar datos de paciente
 5. Abrir datos de pacientes
 6. Salir
cual opcion: 3
 **** 3. Dar de alta a paciente, habitacion libre ****
[['123', 'Juan', 8], ['234', 'Maria', 7]]
 numero paciente:0
[0 0 0 0 0 0 0 1 0 0]
 1. Ingresar habitaciones
 2. Ingresar paciente y asignar habitación
 3. Dar de alta a paciente, habitacion libre
 4. Guardar datos de paciente
 5. Abrir datos de pacientes
 6. Salir
cual opcion: 4
 **** 4. Guardar archivo ****
 1. Ingresar habitaciones
 2. Ingresar paciente y asignar habitación
 3. Dar de alta a paciente, habitacion libre
 4. Guardar datos de paciente
 5. Abrir datos de pacientes
 6. Salir
cual opcion: 5
 5. **** Abrir archivo ****
 # TAREA, COMPLETAR EL PROCESO
 1. Ingresar habitaciones
 2. Ingresar paciente y asignar habitación
 3. Dar de alta a paciente, habitacion libre
 4. Guardar datos de paciente
 5. Abrir datos de pacientes
 6. Salir
cual opcion: 6
 6. **** Salir ****
>>> 

s2Eva_IIT2001_T3 Flujo de ahorro para n años

Ejercicio: 2Eva_IIT2001_T3 Flujo de ahorro para n años

Propuesta de solución en Python:

Se crea una funcion para evaluar el flujo de efectivo del periodo usando los valores anteriores. Con lo que se puede aplicar a cada valor de capital Ck de la tabla ingresada en el bloque de inicio.

Flujo de efectivo usando arreglos

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IIT2001_T3 Flujo de ahorro para n años
# TAREA: continuar para otros valores k
import numpy as np

# literal a. función recursiva

def flujo(k,i1,i2,c):

    if (k>0):
        if (flujo(k-1,i1,i2,c)>=0):
            resultado = (1+i1)*flujo(k-1,i1,i2,c)+c[k]
        else:
            resultado = (1+i2)*flujo(k-1,i1,i2,c)+c[k]

    if (k==0):
        resultado = 0
    return(resultado)


# literal b. PROGRAMA

# INGRESO
k  = int(input('cual año: '))
i1 = float(input('tasa i1: '))
i2 = float(input('tasa i2: '))

c = np.array([-500, 300, 600, -200,
              300, -200, -300, 350])

# valores de c[k]
##n = int(input(' cuantos años: '))
##c = np.zeros(n,dtype=float)
##for anio in range(0,n,1):
##    c[anio] = float(input('c['+str(anio)+']: '))

# PROCEDIMIENTO
valor = flujo(k,i1,i2,c)
# TAREA: continuar para otros valores k

#SALIDA
print('valor: ', valor)

Resultado del algoritmo

Tomando como punto de partida los saldos «c» del enunciado

  • en el año 1, como el saldo del año anterior fué negativo, no se pagan intereses, por lo que el saldo es el mismo del año, 300 dólares
  • en el año 2, como el saldo del año anterior fué positivo, se reciben intereses del saldo, que corresponden a 18 dólares.
cual año: 0
tasa i1: 0.05
tasa i2: 0.10
valor:  0
>>> 
cual año: 1
tasa i1: 0.06
tasa i2: 0.10
valor:  300.0
>>> 
cual año: 2
tasa i1: 0.06
tasa i2: 0.10
valor:  918.0
>>> 
cual año: 3
tasa i1: 0.06
tasa i2: 0.10
valor:  773.08
>>> 

s2Eva_IIT2001_T2 Contar puntos aleatorios en un triángulo

Ejercicio: 2Eva_IIT2001_T2 Contar puntos aleatorios en un triángulo

Se cuentan los puntos que caen el el área marcada en verde que se encuentra debajo de:

f(x)= -x+10

siendo el intervalo [a,b] con valores de a = 0 y b=10, la mitad corresponde a  (a+b)/2

Como las áreas consideradas corresponden a dos sectores, considere usar x entre[a,mitad] y entre [mitad, b], limitados en y por la línea f(x)

Un resultado gráfico, no requerido para el ejercicio, tan solo para mejor comprensión:

de n puntos:  100
 dentro estaban:  25
>>> 

Intrucciones en Python

# 2Eva_IIT2001_T2 Contar puntos aleatorios 
# dentro de área triángular
import random as rnd
import numpy as np
import matplotlib.pyplot as plt

# INGRESO
n = 100
a = 0
b = 10

# función a evaluar
f = lambda x: -x+10

# PROCEDIMIENTO
mitad = (a+b)/2
X = []
Y =[]
dentro = 0
i = 0
while not(i>=n):
    xi = rnd.random()*(b-a)+0
    yi = rnd.random()*(b-a)+0
    limite = f(xi)
    if xi>mitad and yi<=limite:
        dentro = dentro +1
    if xi<=mitad and yi<=limite and yi>=mitad:
        dentro = dentro +1
    X.append(xi)
    Y.append(yi)
    i = i+1

# SALIDA
print(' de n puntos: ', n)
print(' dentro estaban: ', dentro)


# Grafica
plt.scatter(X,Y)
xi = np.linspace(a,b,n+1)
plt.plot(xi,f(xi))
plt.axhline(mitad)
plt.axvline(mitad)
plt.xlim(a,b)
plt.ylim(a,b)
plt.xlabel('xi')
plt.ylabel('yi')
plt.show()

s1Eva_IT2001_T5 Verificar divisibilidad para 9

Ejercicio: 1Eva_IT2001_T5 Verificar divisibilidad para 9

Propuesta de solución con diagrama de flujo y Python: python.pdf. Otra versión en matlab.pdf

Para la separación de los dígitos de un número entero se usa el residuo de la división para 10.

Por ejemplo:

para el número 15,
el residuo para 10 es 5
y el cociente es 1

La instrucción en Python que obtiene el residuo es

digito = numero%10

y la que obtiene el cociente

numero = numero//10

Una respuesta simplificada es un valor de verdad 1 o 0 para verdadero y falso, que es la que se usa en éste ejemplo.

Lazo mientras-repita

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2001_T5 Verificar divisibilidad para 9
# Propuesta de solución. edelros@espol.edu.ec

# INGRESO
numero = int(input('Número a verificar divisibilidad 9: '))

# PROCEDIMIENTO
sumacifra = 0
# Extrae las cifras
while (numero>0):
    digito    = numero%10
    sumacifra = sumacifra+digito
    numero    = numero//10

if (sumacifra>9):
    numero = sumacifra
    sumacifra = 0
    while (numero>0):
        digito    = numero%10
        sumacifra = sumacifra+digito
        numero    = numero//10

if (sumacifra==9):
    respuesta = 1
else:
    respuesta = 0

# SALIDA
print(respuesta)

lazo repita-hasta

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2001_T5 Verificar divisibilidad para 9
# Propuesta de solución. edelros@espol.edu.ec

# INGRESO
numero=int(input('Numero a verificar divisibilidad 9: '))

# PROCEDIMIENTO
sumacifra=0
# Extrae las cifras
while not(numero==0):
    digito=numero%10
    sumacifra=sumacifra+digito
    numero=numero//10

if (sumacifra>9):
    numero=sumacifra
    sumacifra=0
    while not(numero==0):
        digito=numero%10
        sumacifra=sumacifra+digito
        numero=numero//10

if (sumacifra==9):
    respuesta=1
else:
    respuesta=0

# SALIDA
print(respuesta)

Diagrama de Flujo

Diagrama de Flujo 1. Ejercicio Verificar divisibilidad para 9 con Mientras-repita

con estructura Repita-Hasta

Diagrama de Flujo 2 – Ejercicio Verificar divisibilidad para 9 con Repita-Hasta

ejercicios resueltos Python Parc_IIT2001_T5 pdf

ejercicios resueltos Matlab parc_iit2001_t5 pdf

Ejemplos – ejercicios resueltos con Python

Más de 200 ejercicios resueltos de programación con Python

presentados como ejemplos de programación, usando la formas más simples de los algoritmos semejantes a los presentados en cada clase.

Los ejercicios resueltos contienen adicionalmente tareas por desarrollar, observaciones a otras formas de solución a los algoritmos planteados junto con los estudiantes.

Más de 400 ejercicios de Programación

de evaluaciones (exámenes) anteriores, los ejercicios se clasifican por temas y combinados.