s1Eva2007TII_T1 Hormiga busca arroz

Ejercicio: 1Eva2007TII_T1 Hormiga busca arroz


Algoritmo:

un paso/turno

varios pasos/turno

diagFlujo

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.

hormiga y arroz tablero

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

diagFlujo

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

diagFlujo

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

diagFlujo

repita-hasta


Diagrama de Flujo

s1eva_iit2007_t1 diagrama de flujo 01
s1eva_iit2007_t1 diagrama de flujo 02

Algoritmo:

un paso/turno

varios pasos/turno

diagFlujo

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

diagFlujo

repita-hasta