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