s1Eva_IT2007_T1 Tiro al blanco con dardos

Ejercicio: 1Eva_IT2007_T1 Tiro al blanco con dardos

Propuesta de solución en Python: python en pdf,
también en version matlab en pdf

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

Se utiliza acumuladores de premios para cada franja de color, cuyo valor se determina mediante la comparación de la distancia del punto al centro.

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.

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

Desarrollo con lazo 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)

s1Eva_IIT2003_T4 Juego con icosaedros

Ejercicio: 1Eva_IIT2003_T4 Juego con icosaedros

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

Se propone desarrollar el tema conociendo el número n de lanzamientos que desea participar el jugador, dejando el control del juego como tarea.

Se inicia un contador de lanzamientos y un acumulador de premios.

Un icosaedro se simula con un aleatorio para el color y otro para el número, para luego comparar éstos valores con lo simulado para el segundo icosaedro.

Las reglas descritas se implementan con condicionales, considerando que de cumplirse la tercera, ya se ha pagado premio por igualdad de números y color.

Se repite el juego hasta cumplir el número de lanzamientos.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2003_T4 Juego con icosaedros
# Propuesta solucion: edelros@espol.edu.ec
# Tarea. Completar el control del juego

import random

# INGRESO
n = int(input('Numero de lanzamientos: '))

# PROCEDIMIENTO
i = 0
premio = 0
while (i<n):
    d1num   = int(random.random()*5)+1
    d1color = int(random.random()*4)+1
    d2num   = int(random.random()*5)+1
    d2color = int(random.random()*4)+1

    if d1color==d2color:
        premio = premio+10
    if d1num==d2num:
        premio = premio+10
    if ((d1color==d2color)and(d1num==d2num)):
        premio = premio+30

    s = d1num+d2num
    r = s%2
    if r>0:
        premio = premio+5

    i = i+1

# SALIDA
print('total ganado: ')
print(premio)
print('lanzamientos: ')
print(n)

s1Eva_IIT2012_T3 Hundir barco enemigo

Ejercicio: 1Eva_IIT2012_T3 Hundir barco enemigo

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

Ingrese el número de municiones o disparos que se pueden hacer y las coordenadas del barco a hundir.

Indique las coordenadas al punto de disparo y luego calcule el movimiento del barco de forma aleatoria como se indica en el enunciado. Mueva el barco a la nueva posición.

Compare si las coordenadas de disparo y la nueva posición del barco son iguales para confirmar hundimiento. Sino repita la operación desde el inicio de disparo hasta que se acaben las municiones.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2012_T3 Hundir barco enemigo
# Propuesta de solución. edelros@espol.edu.ec

import random as rnd

n  = int(input('¿Cuántas municiones?: '))
bx = int(input('Barco ¿Coordenada bx?: '))
by = int(input('Barco ¿Coordenada by?: '))

hundido = 0
disparo = 0

# Juego
while (disparo<n and hundido==0):

    print('\nIntento '+str(disparo+1))
    print('Barco enemigo en ('+str(bx)+','+str(by)+')')
    cx = int(input('Disparo ¿Coordenada cx?: '))
    cy = int(input('Disparo ¿Coordenada cy?: '))

    d = int(rnd.random()*4)+1
    p = int(rnd.random()*3)+1

    if d==1:
        by = by + p
    if d==2:
        by = by - p
    if d==3:
        bx = bx + p
    if d==4:
        bx = bx - p
    if (bx==cx and by==cy):
       hundido = 1

    disparo = disparo+1

    print('Movimiento direccion:',d,
          ' con:',p,'casillas')
    print('Disparados: ',disparo)
    print('   Hundido: ',hundido)

# SALIDA
print('Barco Hundido:', hundido)
print('Disparos realizados:',disparo)

Resultado del algoritmo

¿Cuántas municiones?: 5
Barco ¿Coordenada bx?: 10
Barco ¿Coordenada by?: 10

Intento 1
Barco enemigo en (10,10)
Disparo ¿Coordenada cx?: 10
Disparo ¿Coordenada cy?: 11
Movimiento direccion: 4  con: 1 casillas
Disparados:  1
   Hundido:  0

Intento 2
Barco enemigo en (9,10)
Disparo ¿Coordenada cx?: 9
Disparo ¿Coordenada cy?: 11
Movimiento direccion: 1  con: 1 casillas
Disparados:  2
   Hundido:  1
Barco Hundido: 1
Disparos realizados: 2
>>> 

s1Eva_IIT2005_T4 Juego escaleras y serpientes

Ejercicio: 1Eva_IIT2005_T4 Juego escaleras y serpientes

Propuesta de solución: py_pdf, m_pdf

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

Serán necesarios otras variables como el contador para el turno, cada jugador dispondrá de una variable generada de forma aleatoria 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”.

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.


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

Versión Lazo: Mientras-Repita

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

Versión lazo: 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)

s1Eva_IIT2010_T2 Venta de pasajes tren turístico

Ejercicio: 1Eva_IIT2010_T2 Venta de pasajes tren turístico

Solución propuesta:  py_pdf, versión matlab m_pdf

Inicialmente desarrolle la venta para un solo pedido/comprador, así encontrará las partes principales de la venta y hace el primer esquema del procedimiento a seguir.

En una segunda versión, agregue las demás opciones de control, tales como contadores y acumuladores para controlarlos turnos o la venta de asientos del tren.

En este proceso se añade un lazo para repetir, y se termina mostrando los resultados de boletos vendidos, el dinero cobrado y el total devuelto.

Tarea: Prestar atención en la venta cuando quedan pocos boletos y el usuario quiere comprar más de los que están disponibles

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2010_T1 Venta de pasajes tren turístico
# Propuesta: edelros@espol.edu.ec

turnomax = int(input('¿cuántos turnos?: '))
capacidad = int(input('capacidad del tren?: ')) 

pesodolar = 2.50
pesoeuro  = 3.25
precio    = 7.00
vendido   = 0
cobrado   = 0.00
devuelto  = 0.00

turno = 1
while (turno<=turnomax and vendido<=capacidad):
    print('Turno:')
    print(turno)
    pedido = int(input('¿cuántos pasajes?: '))
    print('   Monedas: 1.Dolar 2.Euro 3.Peso')
    moneda = int(input(' ¿Tipo Moneda?: '))
    cantidad = float(input(' ¿Cantidad de Dinero?: '))

    if (moneda==1):
        valor = cantidad*pesodolar
    if (moneda==2):
        valor = cantidad*pesoeuro
    if (moneda==3):
        valor = cantidad

    pago=pedido*precio
    if (pago<=valor and((vendido+pedido)<capacidad)):
        vendido = vendido+pedido
        cobrado = cobrado+pago
        cambio  = valor-pago
        devuelto = devuelto+cambio

        print('Se vendieron Boletos: ')
        print(pedido)
        print('su cambio: ')
        print(cambio)
    else:
        print('no es dinero suficiente')

    turno = turno + 1

# SALIDA
print('pasajes vendidos: ')
print(vendido)
print('pesos cobrados: ')
print(cobrado)
print('pesos devueltos: ')
print(devuelto)

Resultado del algoritmo

¿cuántos turnos?: 3
capacidad del tren?: 50
Turno:
1
¿cuántos pasajes?: 3
   Monedas: 1.Dolar 2.Euro 3.Peso
 ¿Tipo Moneda?: 1
 ¿Cantidad de Dinero?: 20
Se vendieron Boletos: 
3
su cambio: 
29.0
Turno:
2
¿cuántos pasajes?: 4
   Monedas: 1.Dolar 2.Euro 3.Peso
 ¿Tipo Moneda?: 2
 ¿Cantidad de Dinero?: 20
Se vendieron Boletos: 
4
su cambio: 
37.0
Turno:
3
¿cuántos pasajes?: 2
   Monedas: 1.Dolar 2.Euro 3.Peso
 ¿Tipo Moneda?: 3
 ¿Cantidad de Dinero?: 30
Se vendieron Boletos: 
2
su cambio: 
16.0
pasajes vendidos: 
9
pesos cobrados: 
63.0
pesos devueltos: 
82.0
>>> 

s1Eva_IT2011_T1 Ahorros de Juan vs Pedro

Ejercicio: 1Eva_IT2011_T1 Ahorros de Juan vs Pedro

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

Ingresar los datos para cada depositante en variables separadas.

Luego, calcular por cada año los saldos para cada depositante, repitiendo hasta que se cumpla la condición que Juan tenga más dinero que Pedro.

La variable “año” es un contador simple que inicia en cero, en finanzas significa el momento en que se deposita.

Cuando termina el año completo se considera incrementado en 1.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2011_T1 Ahorros de Juan vs Pedro
# Propuesta: edelros@espol.edu.ec

# INGRESO
ca = float(input('Banco A - Capital Inicial:   '))
ra = float(input('Banco A - Tasa Interés Anual:'))
cb = float(input('Banco B - Capital Inicial:   '))
rb = float(input('Banco B - Tasa Interés Anual:'))

# PROCEDIMIENTO
anio = 0
sa = ca
sb = cb

while (sa<=sb):
    anio = anio + 1
    sa   = ca*((1+ra)**anio)
    sb   = cb*((1+rb)**anio)

# SALIDA
print('años transcurridos: ', anio)

Resultado del algoritmo

Banco A - Capital Inicial:   100
Banco A - Tasa Interés Anual:0.065
Banco B - Capital Inicial:   120
Banco B - Tasa Interés Anual:0.055
años transcurridos:  20
>>> 
Banco A - Capital Inicial:   100
Banco A - Tasa Interés Anual:0.067
Banco B - Capital Inicial:   120
Banco B - Tasa Interés Anual:0.055
años transcurridos:  17
>>> 

s1Eva_IIT2012_T2 Número camiseta equipo

Ejercicio: 1Eva_IIT2012_T2 Número camiseta equipo

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

Para el bloque de ingreso usar tres variables: día, mesy año.

Primero realice la suma de los componentes de la fecha para obtener el número de trabajo n.

Se separan los dígitos de n usando el residuo y cociente, acumulando los dígitos en s, repitiendo la operación hasta que no queden más dígitos que separar.

Si el resultado de s tiene más de un dígito, se actualiza el valor de n con s y se repite el proceso anterior para acumular dígitos hasta obtener un resultado de un dígito. Se muestra el resultado “s”.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2012_T2 Número camiseta equipo
# Propuesta: edelros@espol.edu.ec

# INGRESO
dia  = int(input('dia: '))
mes  = int(input('mes: '))
anio = int(input('anio: '))

# PROCEDIMIENTO
n = dia + mes + anio
while (n>=10):
    s = 0
    while (n>0):
        r = n%10
        n = n//10
        s = s + r
    n = s

# SALIDA
print('número buscado es: ')
print(n)

Resultado del Algoritmo

dia: 12
mes: 8
anio: 2000
número buscado es: 
4
>>> 
dia: 25
mes: 12
anio: 2000
número buscado es: 
3
>>> 

s1Eva_IIT2012_T1 Sucesión de Padovan

Ejercicio: 1Eva_IIT2012_T1 Sucesión de Padovan

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

Para este ejercicio se necesitaran 4 variables simpes, a, b y c se inicializan en 1 como indica la secuencia.

1, 1, 1, 2, 2, 3, 4, 5, 7, ...
a, b, c, d
   a, b, c, d
      a, b, c, d

El valor del siguiente término “d” es siempre la suma de a y b.

Se preparan los valores siguientes reemplazandoa con b, b con c, y c con d, con el objetivo de poder repetir la operación para el siguiente término.

Un contador de términos “i” permite controlar el número de términos calculados para mostrar solo el requerido.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2012_T1 Sucesión de Padovan
# propuesta: edelros@espol.edu.ec

# INGRESO
n = int(input('cuál término:'))

# PROCEDIMIENTO
a = 1
b = 1
c = 1
i = 3
while (i<n):
    d = a+b
    a = b
    b = c
    c = d
    i = i+1

# SALIDA
print(d)

Resultado del algoritmo

cuál término:5
2
>>>
cuál término:6
3
>>>
cuál término:7
4
>>>

Lazo repita-hasta:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2012_T1 Sucesión de Padovan
# propuesta: edelros@espol.edu.ec

# INGRESO
n = int(input('cuál término:'))

# PROCEDIMIENTO
a = 1
b = 1
c = 1
i = 3
while not (i>=n):
    d = a+b
    a = b
    b = c
    c = d
    i = i+1

# SALIDA
print(d)

s1Eva_IT2010_T2 Número Omirp

Ejercicio: 1Eva_IT2010_T2 Número Omirp

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

Nota: Omirp se lee de derecha a izquierda como primo.

Repasar algoritmo de validación de números primos, también el algoritmo para invertir dígitos de un número. En este ejercicio es necesario usar ambos.

Primero para verificar si el número a verificar es primo, luego para invertir sus dígitos y finalmente verificar si el número con dígitos invertidos también es primo.

Si ambos son primos entonces el número es omirp.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2010_T2 Número Omirp
# Propuesta: edelros@espol.edu.ec

# INGRESO
n = int(input('numero a validar omirp: '))

# PROCEDIMIENTO

# revisa si es primo
esprimo = 1
i = 2
while (i<n):
    r = n%i
    if r==0:
        esprimo = 0
    i = i+1

# invierte los dígitos del número
m = n
alreves = 0
while (m>0):
    r = m%10
    m = m//10
    alreves = alreves*10 + r

# revisa si alreves es primo
esprimoA = 1
i = 2
while (i<alreves):
    r = alreves%i
    if r==0:
        esprimoA = 0
    i = i + 1

# revisa si es omirp
if (esprimo==1 and esprimoA==1):
    omirp = 1
else:
    omirp = 0

# SALIDA
print('es número omirp: ', omirp)

Resultado del algoritmo

numero a validar omirp: 1597
es número omirp:  1
>>> 
numero a validar omirp: 1598
es número omirp:  0
>>> 

s1Eva_IIT2003_T2 Sumar términos de progresión geométrica

Ejercicio: 1Eva_IIT2003_T2 Sumar términos de progresión geométrica

Propuesta de solución en Python: python en pdf, y en versión matlab en pdf

Ingresar la cantidad n de términos, el factor a y r, validando que r no sea 1.

S = \sum_{i=0}^{n} a + ar + ar^2 + ar^3 + ... + ar^n

Iniciar con 0 las variables: s que acumula términos, i como el contador de términos que adicionalmente se usa como exponente.

Como paso siguiente, calcular cada término y acumularlos en s tantas veces como sea necesario hasta que que i llega a n.

El resultado buscado se encontrará en s.

Observe que el primer término es solo la constante a, con equivalente ar0.

Lazo mientras-repita:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2003_T2 Sumar términos de progresión geométrica
# Propuesta de solución. edelros@espol.edu.ec.

# INGRESO
n = int(input('¿Valor de n?: '))
a = float(input('factor a: '))
r = float(input('factor r: '))
while (r==1):
    r = int(input('factor r debe ser diferente de 1: '))

# PROCEDIMIENTO
s = 0
i = 0
while (i<=n):
    t = a*(r**i)
    s = s + t
    i = i + 1

# SALIDA
print(s)