Está en la página 1de 2

Programación III (2017-2-100): primer parcial

Nombre y código:

Pregunta: 1 2 3

Puntos: 1.0 2.0 2.0

Calificación:

1 Introducción
El siguiente parcial debe ser resuelto de manera individual. El plazo máximo para la entrega de su solición es el
miércoles 20 de septiembre a las 23:59. La entrega se debe realizar al correo electronico gustavo.gutierrez@
utp.edu.co como un documento con extensión pdf o un archivo de texto plano. cualquier otro medio de
entrega no será aceptado.

Level
Pregunta 1: Permutación. M
Escriba el predicado permute(L,R) que es verdad cuando R es una permutación de la lista L. Por ejemplo, la
lista: [1,2,3] es una permutación de la lista [2,3,1]. Formalmente, una lista es una permutación de otra si
la segunda contiene los mismos elementos de la primera sin importar el orden.
Por ejemplo, permute([1,2,3],R) debe ser verdadero si R es cualquiera de las siguientes listas.

• R = [1,2,3]

• R = [1,3,2]

• R = [2,1,3]

• R = [2,3,1]

• R = [3,1,2]

• R = [3,2,1]

Pregunta 2: Representaciones numéricas con listas. Level M


Los números naturales positivos pueden ser codificados mediante listas. Por ejemplo el número 4 va a estar
representado por la lista de 4 átomos [a, a, a, a]. El número 0 se representa por la lista vacı́a []. con esta
codificación de los números se pueden implementar predicados que sumen, multipliquen y resten números.
Defina los siguientes predicados:

1. sum(R,S,T) que es verdadero si T es la lista que codifica el entero correspondiente a la suma de las
representaciones R y S. Por ningún motivo usted debe usar operaciones aritméticas al interior de la
definición.

2. mult(R,S,T) que es verdadero si T es la lista que codifica el entero correspondiente a la multiplicación


de las representaciones R y S. Por ningún motivo usted debe usar operaciones aritméticas al interior de
la definición.

1
3. pow(R,S,T) que es verdadero si T es la lista que codifica el entero correspondiente a RS . Donde R y S
son representaciones de números enteros.

Ejemplos.

• sum([a,a], [a,a,a], R) tendrá como resultado R=[a,a,a,a,a] que codifica a 2 + 3 = 5.

• mult([a,a], [a,a,a], R) tendrá como resultado R=[a,a,a,a,a,a] que codifica a 2 × 3 = 6.

• pow([a,a], [a,a,a], R) tendrá como resultado R=[a,a,a,a,a,a,a,a] que codifica a 23 = 8.

• pow([a,a,a], [], R) tendrá como resultado R=[a] que codifica a 30 = 1.

• pow([a,a,a,a], [a], R) tendrá como resultado R=[a,a,a,a] que codifica a 41 = 4.

Recuerde que aunque no se pueden utilizar operaciones aritméticas directamente las propiedades de estas
operaciones siguen siendo muy relevantes. Por ejemplo, una multiplicación se puede realizar mediante sumas
sucesivas.

Level
Pregunta 3: Ordenamiento. M
Escriba una definición para el predicado msrot(L,S) que es verdadero cuando S es una lista con los mismos
elementos de la lista L ubicados de manera ordenada. Su implementación debe hacer uso del algoritmo de
ordenamiento conocido como merge sort.

• Para completar este ejercicio primero defina el predicado split(L,P,Q) que es verdadero si y solo si
las listas P y Q son una partición de la lista L. Es decir, los elementos de P y los elementos de Q al
ponerlos en una sola lista forman la lista L. Adicionalmente, ambas listas son de longitudes similares
(aproximadamente la mitad de los elementos de L).

• Ahora debe definir el predicado merge(L,M,R) que es verdadero cuando R es la lista resultante de mezclar
las listas ordenadas L y M. Es importante notar que las listas L y M ya están ordenadas.

• Escriba ahora si el predicado msort utilizando los predicados anteriores. La estrategia de merge sort es
simple:
– Una lista de un elemento ya está ordenada.
– Una lista con dos elementos es fácil de ordenar.
– Para ordenar una lista más grande, esta se divide en dos listas más pequeñas que son ordenadas
por separado (pero usando el mismo algoritmo). Las listas resultantes ya están ordenadas y solo
requieren ser mezcladas.

También podría gustarte