Mejoramiento III Término 2004 - 2005. Marzo, 2005 /ICM00794
Tema 1. Dos ranas están en el inicio de una pista de 20 m.
En cada turno cada rana realiza aleatoriamente una de las siguientes acciones:
No se mueve
salta un metro
salta dos metros
Escriba un programa que simule el recorrido de ambas ranas y determine cuál gana la carrera y cuántos saltos realizó.
Rúbrica: control de corredores (5 puntos), generar aleatorios (5 puntos), control de carrera (5 puntos), contrador de saltos (5 puntos), programa estructurado (5 puntos)
longitud de la pista: 20
ganador: A
saltos: 16
>>>
longitud de la pista: 20
ganador: B
saltos: 23
>>>
Algoritmo en Python
# 3Eva_IIIT2004_T1 Carrera de ranasimport 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'# SALIDAprint('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.
Mejoramiento I Término 2004 - 2005. Agosto 31, 2004 /ICM00794
Tema 4. Escriba un programa en C/C++ que permita controlar las herramientas de una ferretería en el archivo C:\producto.txt, implementando el siguiente menú:
1. Ingreso de una nueva herramienta
2. Compra de una herramienta existente
3. Venta de una herramienta existente
4. Consulta Individual de una herramienta
5. Reporte de herramientas
6. Salir
Escriba la función en C/C++ que permita hacer la compra de una herramienta existente.
Suponga que las demás funciones ya están implementadas.
Utilice la siguiente estructura para la información:
Mejoramiento I Término 2004 - 2005. Agosto 31, 2004 /ICM00794
Tema3. Para efectuar la multiplicación entre 2 números enteros p y q, se puede utilizar un método recursivo denominado el Campesino Egipcio:
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}
a) Escriba la función recursiva mult(p,q) en C/C++ que reciba dos argumentos enteros p y q, y devuelva el resultado de su multiplicación.
b) Escriba un programa en C/C++ que, pida al usuario un número entre 0 y 12 y muestre la tabla de multiplicar de dicho número, utilizando la función anterior.
Rúbrica: función recursiva (8 puntos), validar número para tabla (4 puntos), tabla de multiplicar con función recursiva (4 puntos), salida ordenada (4 puntos)
Mejoramiento I Término 2004 – 2005. Agosto 31, 2004 /ICM00794
Tema 2. Escriba una función prod_vectorial(a,b) que reciba como argumento dos estructuras correspondientes a dos vectores a y b en IR3 y retorne otra estructura correspondiente al vector que representa su producto vectorial (producto cruz).
Ej: si a=(1,3,1) y b=(-2,1,0) entonces:
La función debe retornar el vector (-1,-2,7)
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 requiere que la tabla se genere usando la función creada en el literal a.
Algoritmo en Python
# ICM00794-Fundamentos de Computación - FCNM-ESPOL# 3Eva_IT2004_T3 Multiplicar con campesino egipcio# propuesta: edelros@espol.edu.ecdefmult(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
>>>
Propuesta de solución con diagrama de flujo, Python y otra versión con Matlab