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