s3Eva_IT2007_T1 Máquina tragamonedas

Ejercicio3Eva_IT2007_T1 Máquina tragamonedas

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

Considere el siguiente algoritmo de introducción al tema, Simplificando el ingreso del número por teclado:

# 3ra Evaluación I Término 2007
# Tema 1. Juego con maquina tragamonedas

# INGRESO
numero = int(input('numero abc:'))

# PROCEDIMIENTO
c = numero%10
numero = numero//10
b = numero%10
numero = numero//10
a = numero

premio = 0
if ((a==b) and (b==c) and(a==c)):
    premio = 20
if ((a==b)and (a!=c)) or ((a==c) and (a!=b)) or ((b==c) and (b!=a)):
    premio = 10

# SALIDA
print(premio)

Luego de revisar el algoritmo: ¿se comprende mejor la necesidad de usar cocientes y residuos? ¿considera viable el uso e este segundo algoritmo?


Algoritmo usando aleatorios sin Cocientes y Residuos

Instrucciones en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2007_T1 Máquina tragamonedas
# Propuesta: edelros@espol.edu.ec

import random as rnd

# INGRESO
monedas = int(input(" Cuantas monedas tiene?: "))

# PROCEDIMIENTO
caja = 15
trio = 0
par  = 0

turno = 0 
while (monedas>=5 and caja>=15):
    turno = turno + 1
    monedas = monedas - 5
    caja = caja + 5

    # sorteo de números
    # entero(aleatorio*posibles) + inicio
    a = int(rnd.random()*10) + 0
    b = int(rnd.random()*10) + 0
    c = int(rnd.random()*10) + 0
    
    if (a==b and b==c and c==a):
        caja = caja - 20
        monedas = monedas+20
        trio = trio + 1
    else:
        if (a==b or b==c or c==a):
            caja = caja - 10
            monedas = monedas+10
            par  = par + 1

# SALIDA
print(" Turnos jugados: ", turno)
print(" Trios: ", trio)
print(" Pares: ", par)
print(" monedas jugador: ", monedas)

Ejemplo:

>>> 
 Cuantas monedas tiene?: 25
 Turnos jugados:  1
 Trios:  0
 Pares:  1
 monedas jugador:  30
>>> 
 Cuantas monedas tiene?: 30
 Turnos jugados:  5
 Trios:  0
 Pares:  3
 monedas jugador:  35
>>> 

Presentadas las dos formas de algoritmos, ¿podría presentar una versión mejorada que integre lo mejor de las dos soluciones?


Diagrama de Flujo

diagrama de flujo TragaMonedas 02

ejercicios resueltos Python 3eva_it2007_t1 pdf

ejercicios resueltos Matlab 3eva_it2007_t1 pdf

s3Eva_IIT2007_T1 Depreciación por suma de dígitos

Ejercicio: 3Eva_IIT2007_T1 Depreciación por suma de dígitos

Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2007_T1 Depreciación por suma de dígitos
import numpy as np

articulo = input('nombre articulo: ')
anios = int(input('años a depreciar: '))
valor = float(input('valor inicial: '))

# PROCEDIMIENTO
suma = 0
contador = anios
while not(contador<1):
    suma = suma+contador
    contador = contador-1

# vector depreciacion
deprecia = np.zeros(anios+1, dtype=float)
deprecia[0] = 0
contador = anios
fila = 1
while not(contador<1):
    deprecia[fila] = valor*(contador/suma)
    contador = contador-1
    fila = fila+1

actual = np.zeros(anios+1,dtype=float)
fila = 0
actual[0] = valor
fila = 1
while not(fila>anios):
    actual[fila] = actual[fila-1]-deprecia[fila]
    fila = fila+1
    
print(deprecia)
print(' El valor actual por anio es:')

# SALIDA
fila = 0
print(' anio:   valor:')
while not(fila>anios):
    print(str(fila)+' | '+str(actual[fila]))
    fila = fila+1

resultado del algoritmo

nombre articulo: vehiculo
años a depreciar: 5
valor inicial: 10000
[   0.  3333.33333333 2666.66666667  2000.  1333.33333333
  666.66666667]
 El valor actual por anio es:
 anio:   valor:
0 | 10000.0
1 | 6666.666666666667
2 | 4000.0000000000005
3 | 2000.0000000000005
4 | 666.6666666666672
5 | 5.684341886080801e-13
>>> 

s3Eva_IIT2006_T1 Crear usuarios en lista de nombres

Ejercicio: 3Eva_IIT2006_T1 Crear usuarios en lista de nombres

Propuesta de solución en Python:

Ejemplo:
>>> 
cuantos empleados: 3
primer nombre: JUAN
segundo nombre: PEDRO
apellido paterno: RODRIGUEZ
primer nombre: MARIA
segundo nombre: ROSA
apellido paterno: PEREZ
primer nombre: CARLOS
segundo nombre: JOSE
apellido paterno: CASTRO
jprodrig
mrperez
cjcastro

algoritmo en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2006_T1 Crear usuarios en lista de nombres
# propuesta: edelros@espol.edu.ec

def user(nombre1,nombre2,apellidop):
    z = ''
    i = 0
    z = z+nombre1[i]
    z = z+nombre2[i]

    # copiar letras del apellido
    n = len(apellidop)

    # Revisando si no hay suficientes letras en el apellido
    i = 0
    while not(i>=6 or i>=n):
        z = z+apellidop[i]
        i = i+1
    z = z.lower()
    return(z)

# PROGRAMA
m = int(input('cuantos empleados: '))
empleado = []
i = 0
while not(i>=m):
    nombre1 = input('primer nombre: ')
    nombre2 = input('segundo nombre: ')
    apellidop = input('apellido paterno: ')
    registro = {'nombre1':nombre1,'nombre2':nombre2,
              'apellidop':apellidop,'usuario':''}
    empleado.append(registro)
    i = i+1

# PROCEDIMIENTO
i = 0
while not(i>=m):
    a = empleado[i]['nombre1']
    b = empleado[i]['nombre2']
    c = empleado[i]['apellidop']
    z = user(a,b,c)
    empleado[i]['usuario'] = z
    i = i+1

# SALIDA
i = 0
while not(i>=m):
    print(empleado[i]['usuario'])
    i = i + 1

s3Eva_IT2006_T4 Juego planta bombas (buscaminas)

Ejercicio3Eva_IT2006_T4 Juego planta bombas (buscaminas)

Nota: contiene tareas por realizar, revisar comentarios en las instrucciones

Instrucciones en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2006_T4 Juego planta bombas (buscaminas)
# propuesta: edelros@espol.edu.ec
import numpy as np
import random as rnd

def plantabombas(m,n):
    campo = np.zeros(shape=(n,n),dtype=int)
    
    bomba = 1
    while not(bomba>m):
        fila = int(rnd.random()*n)+0
        columna = int(rnd.random()*n)+0
        
        if (campo[fila,columna] == 0):
            campo[fila,columna] = 1
            bomba = bomba + 1
            
    return(campo)

# PROGRAMA --------------

# INGRESO
n = int(input('tamaño de tablero[n,n]: '))
m = int(input('cantidad de minas:'))

# TAREA: validar que la cantidad de minas
# sea menor que casillas en tablero

f = int(input('coordenada fila:'))
while not(f>0 and f<(n-1)):
    f = int(input('coordenada fila:'))

c = int(input('coordenada columna:'))
while not(c>0 and c<(n-1)):
    c = int(input('coordenada columna:'))

# PROCEDIMIENTO
# Crear tablero con bombas
territorio = plantabombas(m,n)

# solamente si no hay bomba al aterrizar reporta
if (territorio[f,c] == 0):
    vertical   = territorio[f-1,c]+territorio[f+1,c]
    horizontal = territorio[f,c-1]+territorio[f,c+1]
    # TAREA: Completar las casillas en diagonal
    reporta = vertical + horizontal
else:
    reporta = -1

# SALIDA
print('reporte de llegada: ',reporta)
print('territorio: ')
print(territorio)

Ejemplo, aún falta desarrolar la parte de tarea:

tamaño de tablero[n,n]: 8
cantidad de minas:40
coordenada fila:3
coordenada columna:3
reporte de llegada:  4
territorio: 
[[1 1 0 1 1 1 1 1]
 [1 0 1 0 0 1 1 1]
 [0 1 1 1 1 1 1 0]
 [1 1 1 0 1 1 0 1]
 [0 1 0 1 1 1 0 0]
 [1 0 0 0 1 0 0 0]
 [1 0 1 0 0 1 1 1]
 [1 1 0 1 1 0 0 1]]
>>>

s3Eva_IT2005_T4 Tabla de Pozo millonario

Ejercicio: 3Eva_IT2005_T4 Tabla de Pozo millonario

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

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2005_T4 Tabla de Pozo millonario
# Propuesta de solucion: edelros@espol.edu.ec

import numpy as np
import random as rnd

# INGRESO
n = int(input('seleccionar:'))
m = int(input('de cuantos:' ))

# PROCEDIMIENTO
# Ninguno seleccionado
tabla = np.zeros(m+1,dtype=int)

# sorteando sin repetir
i = 1
while not(i>n):
    sorteado = int(rnd.random()*m)+1
    if (tabla[sorteado]==0):
        tabla[sorteado] = 1
        i = i + 1

#SALIDA
k = 1
print('Los numeros de la tabla son:')
while not(k>m):
    if (tabla[k]==1):
        print(k)
    k = k + 1

resultado del algoritmo

seleccionar: 10
de cuantos: 20
Los numeros de la tabla son:
1
3
4
5
10
11
12
16
17
19
>>> 

Tarea: extraer los sorteados en otro arreglo que contenga solo los números seleccionados

ejercicios resueltos Python mejo_it2005_t4 pdf

ejercicios resueltos Matlab mejo_it2005_t4 pdf

s3Eva_IT2005_T2 Juego biológico

Ejercicio: 3Eva_IT2005_T2 Juego biológico

Resultado esperado:

tamaño de matriz nxn:5
cantidad seres vivos: 20
[[1 1 1 1 0]
 [1 1 1 0 1]
 [0 1 1 1 1]
 [1 1 1 1 1]
 [0 0 1 1 1]]
porcentaje inicial: 80.0
nueva matriz:
[[1 1 1 1 0]
 [1 0 1 0 1]
 [0 1 0 1 1]
 [1 1 1 0 1]
 [0 0 1 1 1]]
porcentaje final: 68.0
>>> 

Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2005_T2 Juego biológico
# propuesta: edelros@espol.edu.ec
# por ser semejante, se usa la funcion de: 
#  3Eva_IT2006_T4 Juego planta bombas (buscaminas)
import numpy as np
import random as rnd

def plantabombas(m,n):
    campo = np.zeros(shape=(n,n),dtype=int)
    bomba = 1
    while not(bomba>m):
        fila = int(rnd.random()*n)+0
        columna = int(rnd.random()*n)+0
        if (campo[fila,columna]==0):
            campo[fila,columna] = 1
            bomba = bomba + 1
    return(campo)

def porcentaje(campo):
    tamano = np.shape(campo)
    n = tamano[0]
    m = tamano[1]
    suma = 0
    fila = 0
    while not(fila>=n):
        columna = 0
        while not(columna>=m):
            suma = suma + campo[fila,columna]
            columna = columna + 1
        fila = fila + 1
    z = 100*suma/(n*n)
    return(z)

# PROGRAMA  literal a ------------------
n = int(input('tamaño de matriz nxn:'))
vivos = int(input('cantidad seres vivos: '))

# PROCEDIMIENTO
biologico  = plantabombas(vivos,n)
participa1 = porcentaje(biologico)

# SALIDA
print(biologico)
print('porcentaje inicial:', participa1)

# PROGRAMA  literal b ------------------
fila = 1 # desde segunda fila
while not(fila>=(n-1)): # hasta penultima fila

    columna = 1 # desde segunda columna
    while not(columna>=(n-1)): # hasta penultima columna

        # suma celda izquierda y derecha
        suma = biologico[fila-1,columna]+ biologico[fila+1,columna]
        # suma celda arriba y abajo
        suma = suma + biologico[fila,columna-1]+biologico[fila,columna+1]
        
        if suma >=4: # sobrepoblacion, en la celda no se sobrevive
            biologico[fila,columna] = 0
            
        columna = columna + 1
        
    fila = fila + 1

participa2 = porcentaje(biologico)
print('nueva matriz:')
print(biologico)
print('porcentaje final:', participa2)

s3Eva_IIIT2004_T4 Enmascara frase cambiando pareja de letras

Ejercicio: 3Eva_IIIT2004_T4 Enmascara frase cambiando pareja de letras

resultado obtenido:

frase :TE SALUDO
enmascarada:   ETLASODU
>>>

Instrucciones en Python

# 3Eva_IIIT2004_T4 Enmascara frase cambiando pareja de letras

# INGRESO
frase = input('frase :')
salto = 2

# PROCEDIMIENTO
n = len(frase)
# posiciones iniciales de letras
posicion = []
for i in range(0,n,1):
    posicion.append(i)

# intercambia posiciones
i = 0
while i<n:
    if (i+salto)<n:
        temporal = posicion[i]
        posicion[i] = posicion[i+salto]
        posicion[i+salto] = temporal
    i = i + salto + 1

# reordena letras
reordena = ''
for i in range(0,n,1):
    cual = posicion[i]
    reordena = reordena + frase[cual]

# SALIDA
print('enmascarada: ', reordena)

s3Eva_IIIT2004_T1 Carrera de ranas

Ejercicio: 3Eva_IIIT2004_T1 Carrera de ranas

Resultados esperados:

longitud de la pista: 20
ganador:  A
saltos:  16
>>> 

longitud de la pista: 20
ganador:  B
saltos:  23
>>> 

Instrucciones Python

# 3Eva_IIIT2004_T1 Carrera de ranas
import random as rnd

# INGRESO
n = int(input('longitud de la pista: '))

# PROCEDIMIENTO
A = 0
B = 0 
turno = 0
gana = ''
while gana=='':
    saltoA = int(rnd.random()*3)+0
    saltoB = int(rnd.random()*3)+0
    A = A + saltoA
    B = B + saltoB
    turno = turno + 1
    if A>n:
        gana = 'A'
    if B>n:
        gana = 'B'

# SALIDA
print('ganador: ', gana)
print('saltos: ',turno)

Tarea: Considere que los turnos de saltos no corresponden a los saltos de cada rana, observe cuando se queda en el mismo puesto, no es un salto.

s3Eva_IT2004_T3 Multiplicar con campesino egipcio

Ejercicio: 3Eva_IT2004_T3 Multiplicar con campesino egipcio

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

Literal a. La función en forma recursiva considera cuatro casos para q y el residuo de q con 2. Usar un condicional en cada caso siguiendo lo descrito en la fórmula.

mult(p,q) = \begin {cases} 0 , && q=0 \\ p ,&& q=1 \\ mult \Big(2p,cociente\big(\frac{q}{2}\big)\Big) , && q\ge 2 \text {, q es par} \\ mult \Big(2p,cociente\big(\frac{q}{2}\big)\Big)+p , && q\ge 2 \text{, q es impar }\end{cases}

Literal b.  Requiere que sea un programa estructurado, separando las partes de las funciones de usuario y el programa que lo usa.

En el bloque de ingreso del programa se pide cuál tabla de multiplicar se va a generar. Se require que la tabla se genere usando la función creada en el literal a.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2004_T3 Multiplicar con campesino egipcio
# propuesta: edelros@espol.edu.ec

def mult(p,q):
    if q==0:
        z = 0
    if q==1:
        z = p
    r = (q%2)
    if (q>=2 and r==0):
        z = mult(2*p, int(q/2))
    if (q>=2 and r>0):
        z = mult(2*p, int(q/2))+p
    return (z)

# PROGRAMA ---------------
import numpy as np

# INGRESO
n = int(input('¿cual tabla?: '))

# PROCEDIMIENTO
r = np.zeros(13,dtype=int)
i = 1
while (i<=12):
    r[i] = mult(n,i)
    i = i + 1

# SALIDA
i=1
while (i<=12):
    print(str(n)+' x '+str(i)+' = ',str(r[i]))
    i = i + 1

Tarea: validar n entre cero y 12

resultado del algoritmo

¿cual tabla?: 8
8 x 1 =  8
8 x 2 =  16
8 x 3 =  24
8 x 4 =  32
8 x 5 =  40
8 x 6 =  48
8 x 7 =  56
8 x 8 =  64
8 x 9 =  72
8 x 10 =  80
8 x 11 =  88
8 x 12 =  96
>>> 

ejercicios resueltos Python mejo_it2004_t3 pdf

ejercicios resueltos Matlab mejo_it2004_t3 pdf