s2Eva_IIT2008_T1 Carrera de caracoles

Ejercicio: 2Eva_IIT2008_T1 Carrera de caracoles

Propuesta de solución en Python para dos caracoles A y B:

# 2Eva_IIT2008_T1 Carrera de caracoles
# solo dos caracoles

import random  as rnd
# INGRESO
meta = int(input('meta maxima: '))

# PROCEDIMIENTO
A = 0
B = 0
t = 0
while (A<meta and B<meta):
    mueveA = int(rnd.random()*5)-1
    A = A + mueveA
    mueveB = int(rnd.random()*5)-1
    B = B + mueveB
    t= t+1

gana = 0
if (A>B):
    gana =1
if (A>B):
    gana = 2
    
# SALIDA
print('ganó el caracol: ',gana)
print('tiempo transcurrido: ', t)

Carrera para n caracoles use un vector e indices entre 1 y n

# 2Eva_IIT2008_T1 Carrera de caracoles
import random  as rnd
import numpy as np

# INGRESO
meta = int(input('meta maxima: '))
n = int(input('cuantos jugadores: '))

# PROCEDIMIENTO
# no se usa la posicion 0, caracoles entre[1,n]
posicion = np.zeros(n+1, dtype = int)
t = 0
gana = 0
while not(gana>=0):
    jugador = 0
    while not(jugador>=n):
        mueve = int(rnd.random()*5)-1
        posicion[jugador] = posicion[jugador] + mueve
        if (posicion[jugador]>meta):
            gana=jugador
        jugador = jugador +1
    t = t+1

# SALIDA
print('posiciones finales:')
print(posicion)
print('ganó el caracol: ',gana)
print('tiempo transcurrido: ', t)

s1Eva_IIT2007_T2 Juego de la Ruleta

Ejercicio: 1Eva_IIT2007_T2 Juego de la Ruleta

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

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

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, y así sucesivamente para el resto de jugadores.

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.

# 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 

>>> 

s1Eva_IIT2007_T3 Garantías de prestamos IESS

Ejercicio: 1Eva_IIT2007_T3 Garantías de prestamos IESS

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

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.

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.

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

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

Repetir el proceso, marcando el arreglo de banderas 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.

# 1Eva_IIT2007_T3 Garantías de prestamos IESS
# propuesta: edelros@espol.edu.ec

import numpy

# INGRESO
n = int(input('Afiliados con Fondo de Reserva: '))

freserva = numpy.zeros(n+1,dtype=int)
i = 1
while not(i>n):
    print(i)
    freserva[i] = input('ingrese cedula:')
    i = i+1

m = int(input('Afiliados con Cesantia: '))
cesantia = numpy.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=numpy.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

s1Eva_IT2008_T2 Criba de Eratóstenes

Ejercicio: 1Eva_IT2008_T2 Criba de Eratóstenes

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

Llenar un arreglo de marcas o tachado con la hipótesis que todos son primos(1).

La prueba de hipótesis consiste en usar un indicador para el número de criba, y otro indicador i para anular marcando con cero (0) las posiciones de los múltiplos.

Inicie eliminando los múltiplos de 2, para luego cambiar a los múltiplos de 3, etc.

Mostrar como resultado solo aquellos números mantienen en marcas válidas (1).

Tarea: Analizar si es necesario hacer funcionar el algoritmo de la prueba de hipótesis hasta n o un número menor. Realizar la validación que n sea mayor que 1.

# 1Eva_IT2008_T2 Criba de Eratóstenes
# Propuesta: edelros@espol.edu.ec

import numpy

n = int(input('primos menores que :'))

# PROCEDIMIENTO
marcado = numpy.zeros((n+1),dtype=int)
criba = 2
while (criba<=n):
    marcado[criba] = 1
    criba = criba+1
criba = 2
while (criba<=n):
    i = criba*2
    while (i<=n):
        marcado[i] = 0
        i = i+criba
    criba = criba+1

# SALIDA
criba = 2
while (criba<=n):
    if marcado[criba]==1:
        print(criba)
    criba = criba+1

s1Eva_IIT2008_T1 Odometro OCTAL

Ejercicio: 1Eva_IIT2008_T1 Odometro OCTAL

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

Se usa el concepto para cambio de base numérica, se extrae cada dígito para acumular el valor ponderando por cada posición referenciada con la variable i.

Si se usa residuo de la división para 10, el primer digito a extraer es el menos significativo (unidades).

Se acumulan los valores de acuerdo a la ponderación o peso por posición y se repite hasta que no queden dígitos que ponderar.

Tarea: validar que el número es octal (rango de dígitos entre 0-7)-

# 1Eva_IIT2008_T1 Odometro OCTAL
# Propuesta de solución. edelros@espol.edu.ec
# Tarea: Validar que el ingreso sea en octal.

octal = int(input('¿numero en octal?: '))

# PROCEDIMIENTO
i = 0
decimal = 0
while (octal>0):
    r = octal%10
    octal = octal//10
    decimal = decimal+r*(8**i)
    i = i+1

# SALIDA
print('valor en decimal: ')
print(decimal)

s1Eva_IT2008_T3 Simular Precio del Petróleo

Ejercicio: 1Eva_IT2008_T3 Simular Precio del Petróleo

Propuesta de solución en Python: py_pdf

También como diagrama en pdf y en versión matlab: m_pdf

Se deja la pregunta c) como tarea a fin de que se desarrolle el problema usando un arreglo.

Se ingresa la cantidad de días del mes, o se puede considerar directamente 30, también es opcional ingresar el rango de precio mínimo y precio máximo, que son los límites del número aleatorio.

Para la pregunta a) se calcula el promedio como el acumulado de precios de cada día dividido para los n días.

Enla pregunta b) se usa el algoritmo del menor, con la hipótesis que el díamenor es el primero, y que el precio menor es el máximo posible, a fin que se reemplace con el primer menor encontrado.

# 1Eva_IT2008_T3 Simular Precio del Petróleo
# Propuesta: edelros@espol.edu.ec
# Tarea: Realizar el literal c)

import random

n=int(input('días del mes: '))

# PROCEDIMIENTO
prcmax = 150
prcmin = 130
rango = prcmax-prcmin+1
diamenor = 1
pmenor = prcmax

dia = 1
total = 0
while (dia<=n):
    precio = int(random.random()*rango)+prcmin
    total = total+precio

    if (precio<pmenor):
        diamenor = dia
        pmenor = precio

    dia = dia+1

promedio = total/n

print('promedio: ')
print(promedio)
print('dí­a de menor precio:')
print(diamenor)

Versión Usando Arreglos:

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

# 1Eva_IT2008_T3 Simular Precio del Petróleo
# Tema 3. Precio petroleo-Arreglo
# Propuesta: edelros@espol.edu.ec

import random
import numpy

n = int(input('dí­as del mes: '))

# PROCEDIMIENTO
prcmax = 150
prcmin = 130
rango = prcmax-prcmin+1
precio = numpy.zeros((n+1),dtype=int)

# algoritmo promedio
total = 0
dia = 1
while (dia<=n):
    precio[dia] = int(random.random()*rango)+prcmin
    total = total+precio[dia]
    dia = dia+1

promedio=total/n

# algoritmo menor
diamenor = 1
dia = 1
while (dia<=n):
    if precio[dia]<precio[diamenor]:
        diamenor = dia
    dia = dia+1

# algoritmo precio superior al promedio
superior = 0
dia = 1
while (dia<=n):
    if precio[dia]>promedio:
        superior = superior+1
    dia = dia+1

# SALIDA
print('promedio: ')
print(promedio)
print('dí­a de menor precio:')
print(diamenor)
print('dí­as con precio sobre promedio:')
print(superior)

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.

# 1Eva_IT2007_T1 Juego Tiro al Blanco con Dardos
# Propuesta solucion: edelros@espol.edu.ec

import random
import math

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

# PROCEDIMENTO
premio = 0
i = 0
while (i<n):
    x = (random.random()*160)-80
    y = (random.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)

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
import math

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

# PROCEDIMIENTO
premio = 0
i = 0
while not(i>=n):
    x = (random.random()*160)-80
    y = (random.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_IT2009_T1 Suma de serie con signo alternado

Ejercicio: 1Eva_IT2009_T1 Suma de serie con signo alternado

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

Solicitar el número n, calcular cada término i-ésimos y acumularlos en una variable s.

El signo se puede alternar multiplicando una variable signo por -1. También se puede usar (-1)i+1 para alternar el signo.

1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+\frac{1}{5}+\text{...}+\frac{1}{n}

observe:

(-1)^{(1+1)}1+(-1)^{(2+1)}\frac{1}{2}+(-1)^{(3+1)}\frac{1}{3}+ ...

La primera solución se presenta usando el lazo “Mientras-Repita”

Lazo mientras-repita:

# 1Eva_IT2009_T1 Suma de serie con signo alternado
# Propuesta de solución. edelros@espol.edu.ec

# INGRESO
n = int(input('¿Cuántos términos?: '))

# PROCEDIMIENTO
i = 1
s = 0
signo = 1
while (i<=n):
    s = s+signo*(1/i)
    i = i+1
    signo = (-1)*signo

# SALIDA
print(s)

lazo repita-hasta:

# 1Eva_IT2009_T1 Suma de serie con signo alternado
# Propuesta de solución. edelros@espol.edu.ec

# INGRESO
n = int(input('¿Cuántos términos?: '))

# PROCEDIMIENTO
i = 1
s = 0
signo = 1
while not(i>n):
    s = s+signo*(1/i)
    i = i+1
    signo = (-1)*signo

# SALIDA
print(s)

s1Eva_IIT2007_T1 Hormiga busca arroz

Ejercicio: 1Eva_IIT2007_T1 Hormiga busca arroz

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

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

Suponga que la distancia inicial es la mayor y que la hormiga no ha encontrado el grano de arroz.

Para la dirección del movimiento de la hormiga y la cantidad de pasos se generan números aleatorios cuyos valores se usan para simular el movimiento al cambiar las coordenadas de la hormiga.

Luego de cada movimiento, se revisa si la hormiga encontró el grano de arroz o que las coordenadas sean iguales; también se puede revisar si la nueva distancia es mayor a las anteriores.

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

Tarea: Realizar las modificaciones para mostrar la cantidad de pasos en lugar de turnos.

# 1Eva_IIT2007_T1 Hormiga busca arroz
import random

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

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

encontro = 0
t=0
while not((xh==xa and yh==ya) or t>100):
    d=int(random.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

    if (xh==xa and yh==ya):
        encontro=1
        
    t=t+1

print(encontro)

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

Usando lazo Mientras-Repita:

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

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

# PROCEDIMIENTO
xa = 10
ya = 8
dmayor = math.sqrt((xh-xa)**2+(yh-ya)**2)
encontrado = 0
turno = 0
while (turno<100 and encontrado==0):
    dir = int(random.random()*4)+1
    pasos = int(random.random()*3)+1

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

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

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

Usando lazo 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
import math

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

# PROCEDIMIENTO
xa = 10
ya = 8
dmayor = math.sqrt((xh-xa)**2+(yh-ya)**2)

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

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

    turno=turno+1

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