s1Eva_IIT2007_T3 Garantías de prestamos IESS

Ejercicio: 1Eva_IIT2007_T3 Garantías de prestamos IESS

[ algoritmo ] [ diagrama flujo ]

Para el ejemplo, por simplicidad se usan cédulas de 3 dígitos; también se supone que no existen elementos repetidos dentro de cada arreglo.

i reserva(i)
1 987
2 876
3 765
4 654
n
j cesantia(j)
1 876
2 765
3
..
m

En la nota se indica que las listas de las cédulas de los afiliados tienen tamaño diferente, además el ingreso de datos es separado por tener origen de datos diferentes.

# INGRESO

# datos de afiliados con fondo de reserva
n = int(input('Afiliados con Fondo de Reserva: '))
freserva = np.zeros(n+1,dtype=int)
i = 1
while not(i>n):
    print(i)
    freserva[i] = input('ingrese cedula:')
    i = i + 1

Al inicio del algoritmo, se supondrá que ningún afiliado cumple con los requisitos, por lo que se usa un arreglo de banderas de cumple o no cumple  (1 ó 0).

# Hipotesis: Ninguno cumple requisito
cumple = np.zeros(n+1,dtype=int)

Realizar una búsqueda ordenada de números de cédula:
– para cada cédula de reserva[i] con n elementos
– realizar una búsqueda en el arreglo de cesantía[j] para los m elementos.

# Revisa listado buscando iguales
total = 0
i = 1
while not(i>n):
    j = 1
    while not(j>m or cumple[i]==1):
        if freserva[i]==cesantia[j]:
            cumple[i] = 1
            total = total + 1
        j = j + 1
    i = i + 1

Repetir el proceso, marcando el arreglo de banderas, cumple, cada vez que se encuentra un valor repetido entre ambas listas.

Tarea: Realizar el ejercicio, construyendo un tercer arreglo con solamente los elementos que cumplen con la condición.

[ algoritmo ] [ diagrama flujo ]
..


Algoritmo en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2007_T3 Garantías de prestamos IESS
# propuesta: edelros@espol.edu.ec

import numpy as np

# INGRESO

# datos de afiliados con fondo de reserva
n = int(input('Afiliados con Fondo de Reserva: '))
freserva = np.zeros(n+1,dtype=int)
i = 1
while not(i>n):
    print(i)
    freserva[i] = input('ingrese cedula:')
    i = i + 1

# datos de afiliados con cesantía
m = int(input('Afiliados con Cesantia: '))
cesantia = np.zeros(m+1,dtype=int)
j = 1
while not(j>m):
    print(j)
    cesantia[j] = input('ingrese cedula:')
    j = j + 1

# PROCEDIMIENTO

# Hipotesis: Ninguno cumple requisito
cumple = np.zeros(n+1,dtype=int)

# Revisa listado buscando iguales
total = 0
i = 1
while not(i>n):
    j = 1
    while not(j>m or cumple[i]==1):
        if freserva[i]==cesantia[j]:
            cumple[i] = 1
            total = total + 1
        j = j + 1
    i = i + 1

# SALIDA: Muestra cedulas de los que cumplen requisito
print('Cumplen requisitos:')
print(total)
print('listado: ')
i = 1
while not(i>n):
    if (cumple[i]==1):
        print(freserva[i])
    i = i + 1

ejemplo de resultado del algoritmo

Afiliados con Fondo de Reserva: 3
1
ingrese cedula:123
2
ingrese cedula:234
3
ingrese cedula:345
Afiliados con Cesantia: 2
1
ingrese cedula:123
2
ingrese cedula:345
Cumplen requisitos:
2
listado: 
123
345
>>> 

[ algoritmo ] [ diagrama flujo ]
..


Diagrama de Flujo

[ algoritmo ] [ diagrama flujo ]


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

ejercicios resueltos Python 1eva_iit2007_t3 pdf

ejercicios resueltos Matlab 1eva_iit2007_t3 pdf

s1Eva_IIT2007_T2 Juego de la Ruleta

Ejercicio: 1Eva_IIT2007_T2 Juego de la Ruleta

[ algoritmo ] [ diagrama flujo ]

La simulación de la ruleta se realiza con la generación de un número entero aleatorio entre 1 y 37.

ruleta = int(rnd.random()*37)+1

Para desarrollar el ejercicio, inicie resolviendo para un solo jugador y un solo intento y mostrando si ganó o no.

Luego continúe incorporando la cantidad de intentos para un solo jugador,

Incorpore la petición de apuestas de los jugadores, antes de hacer rotar la ruleta en un arreglo o lista, para luego poder determinar los resultados de ganadores.

    # Ingreso de apuestas
    j = 1
    while (j<=n):
        print('jugador (',j,') ')
        apuesta[j] = int(input('  número apostado: '))
        j = j

Puede usar contadores para el número de veces ganó cada jugador en los m intentos.

Siguiendo el esquema anterior podrá resolver el ejercicio para todas las rondas con todos los jugadores.

Tarea: Completar el algoritmo para el número que salió la menor cantidad de veces.

[ algoritmo ] [ diagrama flujo ]
..


Algoritmo en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2007_T2 Juego de la Ruleta
# Propuesta: edelros@espol.edu.ec

import numpy as np
import random as rnd

# INGRESO
n = int(input('¿cuántos jugadores?: '))
m = int(input('¿cuántas rondas?: '))

gana    = np.zeros(n+1, dtype=int)
apuesta = np.zeros(n+1, dtype=int)

ronda = 1
while (ronda<=m):

    # Ingreso de apuestas
    j = 1
    while (j<=n):
        print('jugador (',j,') ')
        apuesta[j] = int(input('  número apostado: '))
        j = j + 1

    ruleta = int(rnd.random()*37)+1
    print('Número ruleta: ', ruleta)

    # Revisa ganadores
    j = 1
    while (j<=n):
        if (ruleta==apuesta[j]):
            gana[j] = gana[j]+1   
        j = j + 1
         
    ronda = ronda + 1

# SALIDA
print('Los resultados son:')
j = 1
while (j<=n):
    print(' jugador(',j,') ganó ',gana[j],' veces \n')
    j = j + 1

Tarea: validar que el número de la apuesta esté en el tablero.

un ejemplo de ejecución:

cuantos jugadores: 2
cuantas rondas: 2
jugador ( 1 ) 
  número apostado: 3
jugador ( 2 ) 
  número apostado: 24
Número ruleta:  36
jugador ( 1 ) 
  número apostado: 34
jugador ( 2 ) 
  número apostado: 12
Número ruleta:  34
Los resultados son:
 jugador( 1 ) ganó  1  veces 

 jugador( 2 ) ganó  0  veces 

>>> 

[ algoritmo ] [ diagrama flujo ]
..


Diagrama de Flujo

[ algoritmo ] [ diagrama flujo ]


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

ejercicios resueltos Python 1eva_iit2007_t2 pdf

ejercicios resueltos Matlab 1eva_iit2007_t2 pdf

s1Eva_IIT2007_T1 Hormiga busca arroz

Ejercicio: 1Eva_IIT2007_T1 Hormiga busca arroz

Algoritmo: [ un paso/turno] [ varios pasos/turno] [ diagrama Flujo ]
[ repita-hasta ]

Algoritmo con un paso por cada turno

Considere ingresar la ubicación inicial (xh,yh) de la hormiga y que la posición del arroz (xa,ya) sea fija.

Suponga que la hormiga no ha encontrado el grano de arroz, se encuentran distantes.

Para la dirección del movimiento de la hormiga  se genera un número aleatorio usado para cambiar un valor de coordenada de la hormiga.

Luego se revisa si la hormiga encontró el grano de arroz al comparar que  las coordenadas sean iguales

Cuente un turno completado, y repita el procedimiento hasta que se completen los 100 turnos o se haya encontrado el grano de arroz. Al final muestre los resultados requeridos.

Algoritmo: [ un paso/turno] [ varios pasos/turno] [ diagrama Flujo ]
[ repita-hasta ]
..


Algoritmo en Python con un paso por cada turno

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2007_T1 Hormiga busca arroz
import random as rnd

# INGRESO
xa=int(input(' x arroz: '))
ya=int(input(' y arroz: '))

xh=int(input(' x hormiga: '))
yh=int(input(' y hormiga: '))

# PROCEDIMIENTO
encontro = 0
t = 0
while not((xh==xa and yh==ya) or t>100):
    
    # dirección de movimiento de hormiga
    d = int(rnd.random()*4)+1
    
    if (d==1):
        yh = yh+1
    if (d==2):
        yh = yh-1
    if (d==3):
        xh = xh+1
    if (d==4):
        xh = xh-1

    # Revisa si lo encontró
    if (xh==xa and yh==ya):
        encontro = 1
    t = t + 1

print('¿encontró?: ')
print(encontro)
print('pasos realizados: ')
print(t)

Ejemplo de respuesta con el algoritmo

 x arroz: 5
 y arroz: 3
 x hormiga: 4
 y hormiga: 2
¿encontró?: 
1
pasos realizados: 
34
>>> 

 x arroz: 8
 y arroz: 8
 x hormiga: 3
 y hormiga: 2
¿encontró?: 
0
pasos realizados: 
101

Algoritmo: [ un paso/turno] [ varios pasos/turno] [ diagrama Flujo ]
[ repita-hasta ]
..


Algoritmo en Python con varios pasos por turno

Al ejercicio anterior se le añade una variable «pasos» para que mediante un aleatorio sea diferente en cada turno.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1ra Eval II Termino 2007. Tema 1. Hormiga y arroz
# Propuesta de solución. edelros@espol.edu.ec

import random as rnd
import math

xh = int(input('coordenada x hormiga: '))
yh = int(input('coordenada y hormiga: '))

# PROCEDIMIENTO

# posición del arroz fija
xa = 10
ya = 8

# distancia inicial
dmayor = math.sqrt((xh-xa)**2+(yh-ya)**2)

encontrado = 0
turno = 0
while (turno<100 and encontrado==0):
    
    direccion = int(rnd.random()*4)+1
    pasos = int(rnd.random()*3)+1

    if direccion==1:
        yh = yh + pasos
    if direccion==2:
        yh = yh - pasos
    if direccion==3:
        xh = xh + pasos
    if direccion==4:
        xh = xh - pasos
        
    if (xh==xa and yh==ya):
        encontrado = 1

    distancia = math.sqrt((xh-xa)**2+(yh-ya)**2)
    if distancia>dmayor:
        dmayor = distancia
        
    turno = turno + 1

# SALIDA
print('estado encontrado: ')
print(encontrado)
print('turnos simulados: ')
print(turno)
print('distancia más lejana: ')
print(dmayor)

Resultado del algoritmo:

coordenada x hormiga: 2
coordenada y hormiga: 1
estado encontrado: 
1
turnos simulados: 
92
distancia más lejana: 
23.323807579381203
>>> 
coordenada x hormiga: 0
coordenada y hormiga: 0
estado encontrado: 
0
turnos simulados: 
100
distancia más lejana: 
38.2099463490856
>>> 

En la solución con Python, se usarán las librerías básicas de aleatorios (random) y matemáticas (math). Una alternativa a esta solución es usar la librería numérica Numpy que se descarga e instala como un módulo complementario.

Algoritmo: [ un paso/turno] [ varios pasos/turno] [ diagrama Flujo ]
[ repita-hasta ]
..


Diagrama de Flujo


Algoritmo: [ un paso/turno] [ varios pasos/turno] [ diagrama Flujo ]
[ repita-hasta ]
..


Algoritmo en Python: Bucle Repita-Hasta:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1ra Eval II Termino 2007. Tema 1. Hormiga y arroz
# Propuesta de solución. edelros@espol.edu.ec

import random as rnd
import math

xh = int(input('coordenada x hormiga: '))
yh = int(input('coordenada y hormiga: '))

# PROCEDIMIENTO

# posición del arroz fija
xa = 10
ya = 8

# distancia inicial
dmayor = math.sqrt((xh-xa)**2+(yh-ya)**2)

encontrado = 0
turno = 0
while not(turno>=100 or encontrado!=0):
    
    direccion = int(rnd.random()*4)+1
    pasos = int(rnd.random()*3)+1
    
    if direccion==1:
        yh = yh + pasos
    if direccion==2:
        yh = yh - pasos
    if direccion==3:
        xh = xh + pasos
    if direccion==4:
        xh = xh - pasos
        
    if (xh==xa and yh==ya):
        encontrado = 1

    distancia = math.sqrt((xh-xa)**2+(yh-ya)**2)
    if distancia>dmayor:
        dmayor = distancia

    turno = turno+1

# SALIDA
print('estado encontrado: ')
print(encontrado)
print('turnos simulados: ')
print(turno)
print('distancia más lejana: ')
print(dmayor)

Algoritmo: [ un paso/turno] [ varios pasos/turno] [ diagrama Flujo ]
[ repita-hasta ]


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

ejercicios resueltos Python 1eva_iit2007_t1 pdf

ejercicios resueltos Matlab 1eva_iit2007_t1 pdf

s1Eva_IT2007_T1 Tiro al blanco con dardos

Ejercicio: 1Eva_IT2007_T1 Tiro al blanco con dardos

mientras-repita: [ algoritmo ] [ diagrama flujo ]
repita-hasta: [ algoritmo ] [ diagrama flujo ]

tiro al blanco tableroSea un punto aleatorio representado por sus valores en x, y en el rango del cuadrado que contiene a los círculos.

    x = (rnd.random()*160)-80
    y = (rnd.random()*160)-80

La distancia al centro del tablero se determina como:

 d = math.sqrt(x**2+y**2)

Se utiliza acumuladores de premios para cada franja de color, cuyo valor se determina mediante la comparación de la distancia del punto (x,y) al centro u origen del plano.

    if (d<10):
        premio = premio + 50
    if (d>=10 and d<40):
        premio = premio + 40
    if (d>=40 and d<80):
        premio = premio + 30

Se repite el procedimiento para los n puntos, para al final mostrar el valor acumulado de premio.

Nota: Discutir sobre la validación de dardos en los límites (frontera, borde) del círculo.

mientras-repita: [ algoritmo ] [ diagrama flujo ]
repita-hasta: [ algoritmo ] [ diagrama flujo ]
..


Algoritmo en Python: Mientras-Repita

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2007_T1 Juego Tiro al Blanco con Dardos
# Propuesta solucion: edelros@espol.edu.ec

import random as rnd
import math

# INGRESO
n = int(input('numero de dardos: '))

# PROCEDIMENTO
premio = 0
i = 0
while (i<n):
    x = (rnd.random()*160)-80
    y = (rnd.random()*160)-80
    d = math.sqrt(x**2+y**2)

    if (d<10):
        premio = premio + 50
    if (d>=10 and d<40):
        premio = premio + 40
    if (d>=40 and d<80):
        premio = premio + 30

    i = i+1

# SALIDA
print(' El total ganado es:')
print(premio)

Respuesta del algoritmo

numero de dardos: 10
 El total ganado es:
280
>>> 
numero de dardos: 10
 El total ganado es:
220
>>> 

mientras-repita: [ algoritmo ] [ diagrama flujo ]
repita-hasta: [ algoritmo ] [ diagrama flujo ]
..


Diagrama de Flujo: Mientras-Repita

diagrama de flujo Tiro al blanco con dardos 01

diagrama de flujo Tiro al blanco con dardos 02

mientras-repita: [ algoritmo ] [ diagrama flujo ]
repita-hasta: [ algoritmo ] [ diagrama flujo ]

..


Algoritmo en Python: repita-hasta

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1ra Evaluación I Término 2007 - 2008
# Tema 1. Tiro al blanco
# Propuesta solucion: edelros@espol.edu.ec

import random as rnd
import math

n = int(input('numero de dardos: '))

# PROCEDIMIENTO
premio = 0
i = 0
while not(i>=n):
    x = (rnd.random()*160)-80
    y = (rnd.random()*160)-80
    d = math.sqrt(x**2+y**2)

    if (d<10):
        premio = premio+50
    if (d>=10 and d<40):
        premio = premio+40
    if (d>=40 and d<80):
        premio = premio+30

    i = i+1

# SALIDA
print(' El total ganado es:')
print(premio)

mientras-repita: [ algoritmo ] [ diagrama flujo ]
repita-hasta: [ algoritmo ] [ diagrama flujo ]
..


Diagrama de Flujo: Repita-Hasta

diagrama de Flujo Tiro al blanco con dardos 03

diagrama de flujo Tiro al blanco con dardos 04

mientras-repita: [ algoritmo ] [ diagrama flujo ]
repita-hasta: [ algoritmo ] [ diagrama flujo ]


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

ejercicios resueltos Python 1eva_it2007_t1 pdf

ejercicios resueltos Matlab 1eva_it2007_t1 pdf

s1Eva_IIT2006_T2 Dígito verificador de cuenta

Ejercicio: 1Eva_IIT2006_T2 Dígito verificador de cuenta

[ algoritmo n_dígitos ] [ diagrama flujo ] ; [ algoritmo 4_dígitos ]

Para números de cuenta con 4 dígitos y un verificador, se extrae el dígito verificador usando el residuo para 10; con el cociente de la división para 10 queda el número de cuenta como se indica en la descripción. Referencia, Operaciones básicas

Ejemplo
Código: 25431 codigo = 25431
verificador escrito: 1 escrito = codigo%10
= 25431 % 10 = 1
número de cuenta: 25431 numero = codigo//10
= 25431 // 10 = 2543

se extraen los dígitos del número de posición impar usando también el residuo de 10. Se continua la operación con el siguiente dígito usando la división entera de 10

impar  = numero%10 = 2543%10 = 3
numero = numero//10 = 2543//10 = 254

de forma semejante se obtiene el dígito de posición par, usando el residuo de 10.

par = numero%10 =254%10 = 4
numero = numero//10 = 254//10 = 25

Se continúa con las operaciones para los siguientes dígitos, realizando la operación de suma y multiplicación.

Se obtiene el verificador calculado para compararlo con el verificador recibido, estableciendo si la respuesta es afirmativa o negativa.

[ algoritmo n_dígitos ] [ diagrama flujo ] ; [ algoritmo 4_dígitos ]
..


Algoritmo en Python: para n dígitos

Opción 1. Usando lazos, es más general para usar mayor cantidad de dígitos

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2006_T2 Dígito verificador de cuenta

# INGRESO
codigo = int(input('escriba el codigo completo: '))

# PROCEDIMIENTO
escrito = codigo%10
numero  = codigo//10

multimpar = 1
sumapar   = 0
while not(numero <= 0):
    impar  = numero%10
    numero = numero//10
    multimpar = multimpar*impar

    par = numero%10
    numero  = numero//10
    sumapar = sumapar+par
    
suma = sumapar + multimpar
calculado = suma%10

if (escrito == calculado):
    respuesta = 1
else:
    respuesta = 0

# SALIDA
print(respuesta)

[ algoritmo n_dígitos ] [ diagrama flujo ] ; [ algoritmo 4_dígitos ]
..


Diagrama de Flujo

Ejecución del algoritmo

escriba el codigo completo: 25431
1
>>> 
escriba el codigo completo: 25432
0
>>> 

[ algoritmo n_dígitos ] [ diagrama flujo ] ; [ algoritmo 4_dígitos ]
..


Algoritmo en Python: para 4 dígitos

Opción 2. En caso que requiera repasar más sobre lazos, aún se presenta una solución particular, solo para cuatro dígitos.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1ra Evaluación II Termino 2006
# Tema 2. Verificador cuenta. Ejercicio Básico

# INGRESO
codigo = int(input('escriba el codigo completo: '))

# PROCEDIMIENTO
escrito = codigo%10
numero = codigo//10

a = numero%10
numero = numero//10

b = numero%10
numero = numero//10

c = numero%10
d = numero//10

suma = a*c+(b+d)
calculado = suma%10

if (escrito == calculado):
    respuesta = 1
else:
    respuesta = 0

# SALIDA
print(respuesta)

[ algoritmo n_dígitos ] [ diagrama flujo ] ; [ algoritmo 4_dígitos ]

Propuesta de solución en Python, otras propuestas:

ejercicios resueltos Python 1eva_iit2006_t2 pdf

ejercicios resueltos Matlab 1eva_iit2006_t2 pdf

s1Eva_IIT2005_T4 Juego escaleras y serpientes

Ejercicio: 1Eva_IIT2005_T4 Juego escaleras y serpientes

Algoritmo: [ mientras-repita ] [ repita-hasta ] ; [ diagrama flujo ]escaleraserpiente

En un primer bosquejo, no se considera el lanzar la moneda para ver cuál jugador inicia, semejante al ajedrez en que las fichas blancas salen primero sin considerar el nombre del jugador.

Para determinar las posiciones de las fichas en el tablero, se usarán acumuladores para cada jugador A y B, usando como variables “fichaa” y “fichab”.

# jugador A
dadoa = int(rnd.random()*6)+1
fichaa = fichaa + dadoa

Serán necesarios otras variables como el contador para el turno, cada jugador dispondrá de una variable generada de forma aleatoria dadoa, dadob, que simula un dado de 6 caras.

Se lanza el dado para el jugador A, se avanza acumulando conforme a los puntos del dado, se valida el premio o castigo para luego repetir el proceso para el jugador B, repitiendo el proceso hasta que alguna ficha se ubique o pase la casilla de “llegada”.

    if (fichaa==4 or fichaa==9 or fichaa==29 or fichaa==34 or fichaa==46):
        fichaa = fichaa + 3
    if (fichaa==8 or fichaa==19 or fichaa==38 or fichaa==50 or fichaa==60):
        fichaa = fichaa - 3

Terminado el proceso anterior, se determina cuál jugador ganó, observe que se supone que gana tiene inicialmente el valor de 0, para tener la opción de registrar un empate.

Al final se muestran los resultados del juego simulado.

Tarea: Resolver con el lanzamiento de la moneda para ver cuál inicia.

Algoritmo: [ mientras-repita ] [ repita-hasta ] ; [ diagrama flujo ]

..


Algoritmo en Python: Mientras-Repita

Primero se presenta la solución usando lazo “Mientras-Repita”, luego se muestra la versión con el lazo “Repita-Hasta” que se puede escribir en otros lenguajes de programación.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2005_T4 Juego escaleras y serpientes
# Propuesta de solución: edelros@espol.edu.ec

import random as rnd

# INGRESO
# Sortear quién empieza

# PROCEDIMIENTO
llegada = 64
fichaa = 0
fichab = 0

turno = 0
while (fichaa<llegada or fichab<llegada):

    # jugador A
    dadoa = int(rnd.random()*6)+1
    fichaa = fichaa + dadoa
    if (fichaa==4 or fichaa==9 or fichaa==29 or fichaa==34 or fichaa==46):
        fichaa = fichaa + 3
    if (fichaa==8 or fichaa==19 or fichaa==38 or fichaa==50 or fichaa==60):
        fichaa = fichaa - 3

    #jugador B
    dadob = int(rnd.random()*6)+1
    fichab = fichab + dadob
    if (fichab==4 or fichab==9 or fichab==29 or fichab==34 or fichab==46):
        fichab = fichab + 3
    if (fichab==8 or fichab==19 or fichab==38 or fichab==50 or fichab==60):
        fichab = fichab - 3

    turno = turno + 1

# Revisa ganador
gana = 0
if fichaa > fichab:
    gana = 1
if fichab > fichaa:
    gana = 2

# SALIDA
print('gana el jugador: ')
print(gana)
print('turnos jugados:')
print(turno)

Ejecución del algoritmo

gana el jugador: 
2
turnos jugados:
16
>>> 
gana el jugador: 
2
turnos jugados:
16
>>> 

Algoritmo: [ mientras-repita ] [ repita-hasta ] ; [ diagrama flujo ]
..


Algoritmo en Python: Repita-Hasta

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2005_T4 Juego escaleras y serpientes
# Propuesta de solución. edelros@espol.edu.ec

import random as rnd

# INGRESO
# Sortear quién empieza 
# PROCEDIMIENTO

llegada = 64
fichaa = 0
fichab = 0

turno = 0
while not(fichaa>=llegada or fichab>=llegada):

    # jugador A
    dadoa = int(rnd.random()*6)+1
    fichaa = fichaa+dadoa
    if (fichaa==4 or fichaa==9 or fichaa==29 or fichaa==34 or fichaa==46):
        fichaa = fichaa+3
    if (fichaa==8 or fichaa==19 or fichaa==38 or fichaa==50 or fichaa==60):
        fichaa = fichaa - 3

    #jugador B
    dadob = int(rnd.random()*6)+1
    fichab = fichab + dadob
    if (fichab==4 or fichab==9 or fichab==29 or fichab==34 or fichab==46):
        fichab = fichab + 3
    if (fichab==8 or fichab==19 or fichab==38 or fichab==50 or fichab==60):
        fichab = fichab - 3

    turno = turno+1

gana = 0
if fichaa>fichab:
    gana = 1

if fichab>fichaa:
    gana = 2

# SALIDA
print('gana el jugador: ')
print(gana)
print('turnos jugados:')
print(turno)

Algoritmo: [ mientras-repita ] [ repita-hasta ] ; [ diagrama flujo ]
..


Diagrama de Flujo

 

Algoritmo: [ mientras-repita ] [ repita-hasta ] ; [ diagrama flujo ]

Propuesta de solución:

ejercicios resueltos Python parc_iit2005_t4 pdf

ejercicios resueltos Matlab parc_iit2005_t4 pdf

s1Eva_IIT2005_T3 Entrenamiento atleta: promedios

Ejercicio: 1Eva_IIT2005_T3 Entrenamiento atleta: promedios

[ algoritmo ] [ diagrama flujo ]

Pedir la cantidad de mediciones n a tabular

n = int(input('¿días a cronometrar?: '))

Ingresar todos los tiempos en un arreglo de n elementos.

# Inicia tabla de tiempos
tiempo = np.zeros((n+1),dtype=int)
dia = 1
while (dia<=n):
    print('tiempo[' + str(dia) + ']: ')
    tiempo[dia] = float(input(''))
    dia = dia + 1

Empezar con el promedio anual, acumular en s todos los tiempos.

# Promedio anual
s = 0
dia = 1
while (dia<=n):
    s = s + tiempo[dia]
    dia = dia+1

El promedio anual se obtiene con la suma s al dividirla para n.

pranual = s/n

Para el promedio mensual, desarrollar el algoritmo para el primer mes (día 1 al 30) y luego revisar la relación que existe entre el primer día del mes y el número del mes, revisar también para el último día del mes.

Determinar la relación también para los días de la semana y el número de la semana, comparar resultados.

Tarea: completar el algoritmo, pues la solución propuesta no desarrolla el promedio semanal.

En el caso de Python, es necesario declarar el vector, al menos con valores de 0. Como la primera posición del arreglo es 0 y no existe el día 0, se aumentará el tamaño del vector en 1, a fin de usar el indicador de día de forma más natural.

Se requiere importar la librería Numpy, para trabajar con los arreglos.

[ algoritmo ] [ diagrama flujo ]
..


Algoritmo en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2005_T3 Entrenamiento atleta: promedios
# Propuesta de solución. edelros@espol.edu.ec
# Tarea: realizar promedio por semana

import numpy as np

# INGRESO
n = int(input('¿días a cronometrar?: '))

# Inicia tabla de tiempos
tiempo = np.zeros((n+1),dtype=int)
dia = 1
while (dia<=n):
    print('tiempo[' + str(dia) + ']: ')
    tiempo[dia] = float(input(''))
    dia = dia + 1

# PROCEDIMIENTO

# Promedio anual
s = 0
dia = 1
while (dia<=n):
    s = s + tiempo[dia]
    dia = dia+1
pranual = s/n

# Promedio mensual
mes = 1
maxmes = int(n/30)
while (mes<=maxmes):
    s = 0
    dia = 1+30*(mes-1)
    while (dia<=(30*mes)):
        s = s+tiempo[dia]
        dia = dia+1
    prm[mes] = s/30
    mes = mes+1

# SALIDA
print('Promedio anual: ')
print(pranual)
print('Promedio mensual: ')
mes = 1
if maxmes==0:
    print('Meses completos: 0')
while (mes<=maxmes):
    print(prm[mes])
    mes = mes+1

# Se modificó el algoritmo para
# probar con n de pocos días.

Ejecución del algoritmo

¿días a cronometrar?: 5
tiempo[1]: 
20
tiempo[2]: 
18
tiempo[3]: 
23
tiempo[4]: 
19
tiempo[5]: 
22
Promedio anual: 
20.4
Promedio mensual: 
Meses completos: 0
>>> 

[ algoritmo ] [ diagrama flujo ]
..


Diagrama de Flujo

[ algoritmo ] [ diagrama flujo ]

Propuesta de solución en Python, también en Matlab:

ejercicios resueltos Python parc_iit2005_t3 pdf

ejercicios resueltos Matlab parc_iit2005_t3 pdf

s1Eva_IIT2005_T2 Negocio piramidal

Ejercicio: 1Eva_IIT2005_T2 Negocio piramidal

[ algoritmo ] [ diagrama flujo ]

Para la solución, considere las operaciones descritas en el orden lógico de ejecución: depósitos, comisiones e intereses pagados para calcular el saldo.

siendo x la cantidad de depositantes.

deposito = invitado*x
comision = 0.20*deposito
interespaga = 0.10*x*participa
saldo = saldo+deposito-comision-interespaga
participa = participa+invitado

El control de participantes e invitados permitirá calcular apropiadamente los depósitos de los invitados y los intereses pagados a los participantes.

Los meses se cuentan para cada iteración hasta que se cumpla la condición que los intereses pagados sean mayores al saldo.

while (interespaga<=saldo):

[ algoritmo ] [ diagrama flujo ]
..


Algoritmo en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2005_T2 Negocio piramidal
# Propuesta de solución: edelros@espol.edu.ec

# INGRESO
x = int(input('cantidad por depositante: '))
n = int(input('personas en el mercado: '))

# PROCEDIMIENTO
mes = 0
invitado = 1
participa = 0

saldo = 0
interespaga = 0
while (interespaga<=saldo):
    deposito = invitado*x
    comision = 0.20*deposito
    interespaga = 0.10*x*participa
    saldo = saldo+deposito-comision-interespaga
    participa = participa+invitado

    if (participa<=(n/2)):
        invitado = participa
    else:
        invitado = 0
    
    mes = mes+1

# SALIDA
print('meses con saldo disponible: ')
print(mes)

Ejecución del algoritmo

cantidad por depositante: 100
personas en el mercado: 1000
meses con saldo disponible: 
17
>>>

[ algoritmo ] [ diagrama flujo ]
..


Diagrama de Flujo


[ algoritmo ] [ diagrama flujo ]

Propuesta de solución en Python, también en Matlab:

ejercicios resueltos Python parc_iit2005_t2 py_pdf

ejercicios resueltos Matlab parc_iit2005_t2 pdf

s1Eva_IT2005_T4 Lanza penales

Ejercicio: 1Eva_IT2005_T4 Lanza penales

[ algoritmo ] [ diagrama flujo ]

Propuesta de solución en Python

Se realiza el control de goles conseguidos en cada lanzamiento de balón, contando los lanzamientos hasta que se alcancen 5 .

conseguido = 0
lanza = 0
while not(lanza==5):

El área dónde patea el balón el jugador se ingresa por teclado y la posición del arquero se obtiene de un aleatorio.

    # Patea
    print('Penal número: ', lanza)
    patea = int(input('donde patea: '))
    while not(patea>=1 and patea<=6):
        patea = int(input('OE!..donde patea: '))

    # Arquero
    arquero = int(rnd.random() * 6) +1

Se analiza si hubo gol siempre que donde se patea sea diferente donde está el arquero, con lo que se contabiliza los goles conseguidos.

    # Gol/tapa
    if not(patea==arquero):
        gol = 1
    else:
        gol = 0

    conseguido = conseguido + gol
    lanza = lanza + 1

[ algoritmo ] [ diagrama flujo ]
..


Algoritmo en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2005_T4 Lanza penales

import random as rnd

conseguido = 0
lanza = 0
while not(lanza==5):

    # Patea
    print('Penal número: ', lanza)
    patea = int(input('donde patea: '))
    while not(patea>=1 and patea<=6):
        patea = int(input('OE!..donde patea: '))

    # Arquero
    arquero = int(rnd.random() * 6) +1

    # Gol/tapa
    if not(patea==arquero):
        gol = 1
    else:
        gol = 0

    conseguido = conseguido + gol
    lanza = lanza + 1

    # Resultado
    print('patea, arquero, gol/tapa')
    print(patea, arquero, gol)

print('*** Goles conseguidos: ', conseguido)

Ejemplo de resultado del algoritmo:

Penal número:  0
donde patea: 3
patea, arquero, gol/tapa
3 3 0
Penal número:  1
donde patea: 2
patea, arquero, gol/tapa
2 6 1
Penal número:  2
donde patea: 1
patea, arquero, gol/tapa
1 1 0
Penal número:  3
donde patea: 2
patea, arquero, gol/tapa
2 4 1
Penal número:  4
donde patea: 3
patea, arquero, gol/tapa
3 5 1
*** Goles conseguidos:  3
>>>

[ algoritmo ] [ diagrama flujo ]
..


Diagrama de Flujo

diagrama de flujo ejercicio resuelto

[ algoritmo ] [ diagrama flujo ]

s1Eva_IT2005_T3 Arreglo aleatorio binario a decimal

Ejercicio: 1Eva_IT2005_T3 Arreglo aleatorio binario a decimal

Propuesta de solución en Python 1Eva_IT2005_T3 binario a Decimal

Use un vector de n casillas,

Las casillas pueden iniciar en cero,para luego llenarlas de números aleatorios una por una,

B = np.zeros(n,dtype=int)

Junto a la operación anterior, podría realizar las operaciones requeridas en el enunciado.

B[i] = int(rnd.random()*2)+0

De ser necesario repasar: Binario a Decimal – Algoritmo

Algoritmo en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2005_T3 Arreglo aleatorio binario a decimal
# Tarea: contar los 1's, literal a)

import numpy as np
import random as rnd

# INGRESO
n = int(input('cuantos componentes n: '))

# PROCEDIMIENTO
B = np.zeros(n,dtype=int)
decimal = 0
i = 0
while (i<n):
    B[i] = int(rnd.random()*2)+0
    # orden de binarios es izquierda a derecha
    posicion = n-1-i  
    decimal  = decimal+B[i]*(2**posicion)
    i = i+1

# SALIDA
print('Arreglo de binarios B[i]:')
print(B)
print('equivale en decimal:',decimal)

Resultados de algoritmo realizados para un byte (8 bits):

cuantos componentes n: 8
Arreglo de binarios B[i]:
[0 0 1 0 1 0 1 0]
equivale en decimal: 42
>>> 
cuantos componentes n: 8
Arreglo de binarios B[i]:
[1 1 1 1 1 1 1 1]
equivale en decimal: 255
>>> 
cuantos componentes n: 8
Arreglo de binarios B[i]:
[0 0 1 1 1 1 1 0]
equivale en decimal: 62
>>>