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

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

s3Eva_IT2005_T2 Juego biológico

Ejercicio: 3Eva_IT2005_T2 Juego biológico

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)

# TAREA: Desarrollar sobrepoblacion del enunciado

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 ---------------------
n = int(input('tamaño de matriz:'))
m = int(input('cantidad seres vivos: '))

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

# TAREA: Desarrollar sobrepoblacion del enunciado
# crear biologico2 aplicando lo solicitado
# participa2 = porcentaje(biologico2)

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

# TAREA: print('porcentaje final: ', participa2)

Ejemplo de lo realizado, falta completar.:

>>> 
tamaño de matriz:5
cantidad seres vivos: 15
[[0 0 1 0 0]
 [0 1 1 1 0]
 [1 1 1 0 1]
 [1 0 1 1 0]
 [1 1 1 0 1]]
porcentaje inicial: 60.0
>>>

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]]
>>>