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.
x = (rnd.random()*160)-80 y = (rnd.random()*160)-80
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.
d = math.sqrt(x**2+y**2)
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 >>>
Diagrama de Flujo Mientras-Repita
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)
Diagrama de Flujo Repita-Hasta