Description
Pr´actica 4
Nota Importante:
Realice las implementaciones del ejercicio 1 en un fichero de nombre power.ml y las del ejercicio 2 en un fichero de nombre mcd.ml. All´ı donde se pidan explicaciones y razonamientos, inclu´yalos en estos mismos ficheros entre comentarios.
Cuando se solicite la entrega de esta pra´ctica, cada alumno debera´ subir a su repositorio de pra´cticas (del cual se indicara´ su ubicaci´on ma´s adelante) un directorio p4 cuyo contenido debe ser u´nicamente los ficheros power.ml y mcd.ml.
Sea muy cuidadoso a la hora de crear el directorio y los ficheros, y respete los nombres indicados. En particular, f´ıjese que todos estos nombres so´lo contienen letras en minu´sculas, nu´meros y puntos.
Adema´s, todos los ficheros deben compilar sin errores con las siguientes o´rdenes:
ocamlc -c power.ml ocamlc -c mcd.ml
Ejercicios:
1. Si x es un nu´mero entero cualquiera e y es nu´mero entero mayor que 0, se cumple la siguiente propiedad:
xy = x × xy−1
Utilizando directamente esta propiedad, defina en OCaml (recursivamente) una funcio´n power: int -> int -> int tal que, para cualesquiera x:int, y:int, y >= 0, power x y tenga el valor de xy. Por ejemplo, power 2 10 = 1024.
Tambi´en son ciertas las siguientes propiedades (raz´onelas desde el punto de vista matema´tico):
es par
xy = x × (x × x)y/2, si y es impar
Utilice directamente estas dos propiedades para definir en OCaml una funcio´n power’: int -> int -> int, que sea una versio´n mejorada (en t´erminos de eficiencia) de la definicio´n anterior.
Explique por qu´e power’ deber´ıa ser mejor que power en t´erminos de eficiencia y razone si realmente merece la pena la ganancia obtenida al estar operando en int (y no en Z).
Todo lo anterior ser´ıa igualmente va´lido para potencias de base real y exponente natural.
Defina una funcio´n powerf: float -> int -> float, tal que powerf x n tenga el valor de xn, para cualesquiera x:float, n:int, n >= 0.
2. Implemente en OCaml una funci´on mcd: int * int -> int, tal que, para cualesquiera x:int, y:int, x >= 0, y >= 0, (x <> 0 || y <> 0), mcd (x,y) sea el m´aximo comu´n divisor de x e y.
Defina (recursivamente) esta funcio´n basa´ndose en las siguientes propiedades:
mcd(x,y) = mcd(y,x) mcd(x,y) = mcd(x mod y,y),si y > 0
Reviews
There are no reviews yet.