s1Eva_IIT2002_T3 Conjetura de Ullman

Ejercicio: 1Eva_IIT2002_T3 Conjetura de Ullman

Propuesta de solución en Python

Para el número seleccionado o «pensado» se realizan las operaciones paso a paso indicadas en el enunciado.

Para determinar paridad se obtiene el «residuo» de la división del número para 2 y así decidir cuál operación realizar.

Se sustituye el número por el resultado de la operación y se vuelve a aplicar si el resultado aún no es 1.

Para conocer el número de operaciones realizadas se usa un contador.

La secuencia se puede almacenar en un vector (lista) para mostrar al final (TAREA)

Se usa un contador de operaciones para la respuesta

El esquema básico del algoritmo en Python es el siguiente:

# 1Eva_IIT2002_T3 Conjetura de Ullman
# propuesta: edelros@espol.edu.ec
# Tarea: convertir a función

# INGRESO
n = int(input('piensa un número: '))

# PROCEDIMIENTO
contar=0
while not(n==1):
    r=n%2

    if (r==0):
        n=n/2
    else:
        n=n*3+1
    contar=contar+1

# SALIDA
print(n)

s1Eva_IT2004_T2 Verificar ISBN

Ejercicio: 1Eva_IT2004_T2 Verificar ISBN

Propuesta de solución en Python

Tarea: verificar el número de dígitos del ISBN

Se inicia extrayendo el dígito verificador escrito, quedando el resto de dígitos del número hacia la izquierda para realizar los cálculos.

Para la posición del dígito se usa un contador. Las operaciones se acumulan en suma, de la que se obtiene el residuo de la división para 11. El residuo corresponde al verificador calculado que se compara con el verificador escrito para dar el veredicto.

# 1Eva_IT2004_T2 Verificar ISBN
# propuesta: edelros@espol.edu.ec

# INGRESO
ISBN = int(input('cual ISBN: '))

# PROCEDIMIENTO
vescrito = ISBN%10
n = ISBN//10

contador = 9
suma = 0
while (n>0):
    digito = n%10
    n = n//10
    suma =  suma + digito*contador
    contador = contador -1

vcalculado = suma%11

if (vescrito==vcalculado):
    respuesta = 1
else:
    respuesta = 0

#SALIDA
print(respuesta)

s1Eva_IT2011_T3 Calcular ventas por región

Ejercicio: 1Eva_IT2011_T3 Calcular ventas por región

Propuesta de solución en Python. Revise también la version en matlab en pdf

Como referencia para la solución se usa el gráfico, o la animación

Solicitar la cantidad de vendedores a participar, registrar los montos vendidos por cada vendedor y sortearlas regiones asignadas.

También es posible hacer primero el sorteo y luego pedir los montos vendidos, pero dado que no se pide mostrar las asignaciones, el orden de los bloques no afecta el resultado.

Utilizar acumuladores para los montos de cada región. Mostrar los resultados.

Tarea: Cambiarel algoritmo utilizando un vector para los acumuladores de montos por región.

Se presenta la solución por partes por didáctica:

# 1Eva_IT2011_T3 Calcular ventas por región
import random as rnd
import numpy as np

# parte 1) sorteo de regiones a cada vendedor

n = int(input('cuantos vendedores: '))

# PROCEDIMIENTO
region = np.zeros(n, dtype = int)
monto = np.zeros(n, dtype = float)

vendedor = 0
while not(vendedor>=n):
    donde = int(rnd.random()*4)+1
    region[vendedor] = donde
    vendedor = vendedor + 1

# parte 2) calcular montos de venta

# INGRESO DE VENTAS
vendedor = 0
while not(vendedor>=n):
    print('monto['+str(vendedor)+']: ')
    monto[vendedor] = float(input(''))
    vendedor = vendedor+1

# Total de ventas por mes
total = 0
vendedor = 0
while not(vendedor>=n):
    total = total + monto[vendedor]
    vendedor = vendedor+1

# ventas en region costa
totalcosta = 0
vendedor = 0
while not(vendedor>=n):
    if (region[vendedor]==1):
        totalcosta = totalcosta+monto[vendedor]
    vendedor = vendedor+1

# totales en vector totalregion
totalregion = np.zeros(4+1, dtype = float)
vendedor = 0
while not(vendedor>=n):
    donde = region[vendedor]
    cuanto = monto[vendedor]
    totalregion[donde] = totalregion[donde] + cuanto
    vendedor = vendedor+1
    
# SALIDA
print('region asignada: ')
print(region)
print('monto de cada vendedor: ')
print(monto)
print('total de ventas por mes: ')
print(total)
print('total de ventas en la costa')
print(totalcosta)
print('total por regiones:  ')
print(totalregion)

Tarea: De ser posible, reorganizar como un solo algoritmo.

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_IIT2003_T3 Personas asignadas a proyectos

Ejercicio: 1Eva_IIT2003_T3 Personas asignadas a proyectos

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

Ingresar los datos en una matriz, de tamaño nxm, considerando en las filas a las personas y en las columnas a los proyectos.

Para la parte b), realizar la cuenta de personas asignadas al primer proyecto. Cada resultado por columna de proyecto, se guarda como parte de un vector de participa[proyecto].

El vector de participantes es el resultado de la suma de cada columna.

Para la parte c), se requiere encontrar la carga[persona], que es la suma de cada fila. Por lo que se fija el valor de una persona, una fila, y se revisa para cada persona, todas las columnas, el valor se acumula en «carga».

Se muestra solo aquellas personas que tienen carga de trabajo 0.

Tarea: Validar los datos quese ingresan a la matriz Asigna[persona,proyecto]. Desarrollar la parte para c)

# 1Eva_IIT2003_T3 Personas asignadas a proyectos
# Propuesta: edelros@espol.edu.ec
# Tarea: validar los datos de asignado

import numpy

# INGRESO
n = int(input('cuantas personas: '))
m = int(input('cuantos proyectos: '))
asignado = numpy.zeros((n+1,m+1),dtype=int)
persona = 1
while (persona<=n):
    proyecto = 1
    while (proyecto<=m):
        print('persona: '+str(persona)+
              ', proyecto: '+
              str(proyecto))
        asignado[persona,proyecto] = int(input(' /asignado (1/0): '))
        proyecto = proyecto + 1
    persona = persona+1

# PROCEDIMIENTO
# participantes por proyecto
participan = numpy.zeros(m+1,dtype=int)
proyecto = 1
while (proyecto<=m):
    s = 0
    persona = 1
    while (persona<=n):
        s = s + asignado[persona,proyecto]
        persona = persona+1
    participan[proyecto] = s
    proyecto = proyecto+1

# Carga de trabajo por persona
carga = numpy.zeros(n+1,dtype=int)
persona = 1
while (persona<=n):
    s = 0
    proyecto = 1
    while (proyecto<=m):
        s = s+asignado[persona,proyecto]
        proyecto = proyecto+1
    carga[persona] = s
    persona = persona+1

# SALIDA
print('Participantes/Proyecto:')
proyecto = 1
while (proyecto<=m):
    print(participan[proyecto])
    proyecto = proyecto+1

print('Persona sin carga de trabajo:')
persona = 1
while (persona<=n):
    if carga[persona]==0:
        print(persona)
    persona = persona+1

s1Eva_IIT2005_T2 Negocio piramidal

Ejercicio: 1Eva_IIT2005_T2 Negocio piramidal

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

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

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.

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

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_IIT2010_T3 Juego del amigo secreto

Ejercicio: 1Eva_IIT2010_T3 Juego del amigo secreto

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

iniciar el sorteo con banderas de amigo/amiga en cero, para poner luego el valor sorteado a cada uno, si aún no se ha repetido.

# 1Eva_IIT2010_T3 Juego del amigo secreto
# Propuesta de solucion. edelros@espol.edu.ec

import numpy
import random

# INGRESO
n = int(input('¿número de parejas?: '))

# PROCEDIMIENTO
AmigA = numpy.zeros(n+1,dtype=int)
AmigO = numpy.zeros(2*n+1,dtype=int)

i = 1
while (i<=n):
    dama=int(random.random()*n)+(n+1)
    if (AmigO[dama]==0):
        AmigO[dama] = i
        i=i+1

j = n+1
while (j<=(2*n)):
    caballero = int(random.random()*n)+1
    if (AmigA[caballero]==0):
        AmigA[caballero] = j
        j=j+1

# SALIDA
print('pareja de caballeros')
i = 1
while (i<=n):
    print(i,' , ',AmigA[i])
    i = i+1
print('pareja de damas')
j = n+1
while (j<=(2*n)):
    print(j,' , ',AmigO[j])
    j = j+1

s1Eva_IIT2005_T3 Entrenamiento atleta: promedios

Ejercicio: 1Eva_IIT2005_T3 Entrenamiento atleta: promedios

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

Ingresar todos los tiempos en un arreglo de n elementos.

Empezar con el promedio anual, acumular todos los tiempos y dividirlos para 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.

# 1Eva_IIT2005_T3 Entrenamiento atleta: promedios
# Propuesta de solución. edelros@espol.edu.ec
# Tarea: realizar promedio por semana

import numpy

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

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

# 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 di­as.

s1Eva_IIT2010_T1 Censo de instrucción por género

Ejercicio: 1Eva_IIT2010_T1 Censo de instrucción por género

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

Los datos se almacenan en vectores y se los tabula/cuenta en una matriz.  Las filas representan la instrucción y columna el género.

Se inicializan los contadores al inicializar la matriz para luego procesar los datos de todos los formularios registrados.

Para facilitar la lectura del algoritmo se usan como variables f y c para referenciar las filas y columnas. Una forma más larga de solución podría usar contadores individuales para contar primaria/masculino, primaria/femenino, etc.

Tarea: validar el ingreso de género e instrucción por cada formulario

# 1Eva_IIT2010_T1 Censo de instrucción por género
# propuesta: edelros@espol.edu.ec

import numpy as np

#INGRESO
n = int(input('¿Cuántos formularios: '))

genero = np.zeros(n+1,dtype=int)
instruccion = np.zeros(n+1,dtype=int)

i = 1
while not(i>n):
    print('Formulario:',i)
    genero[i] = int(input('  genero: '))
    instruccion[i] = int(input('  instruccion: '))
    i = i+1

# PROCEDIMIENTO
tabla = np.zeros(shape=(3+1,2+1),dtype=int)
i = 1
while not(i>n):
    f = instruccion[i]
    c = genero[i]
    tabla[f,c] = tabla[f,c]+1
    i = i+1

# SALIDA
print('Instr  M  F ')
f = 1
while not(f>3):
    c = 1
    cadena = ''
    while not(c>2):
        cadena = cadena+' '+str(tabla[f,c])
        c = c+1
    print('   '+str(f)+': '+cadena)
    f = f+1