Ejercicio 1 Ejercicio 2

Anuncio
Ejercicio 1
Se considera el siguiente tipo mlist (lista de listas de cardinales):
TYPE
(* lista de listas de cardinales *)
mlist = POINTER TO mcelda;
mcelda = RECORD
info: list;
sig: mlist;
END;
(* lista de cardinales *)
list = POINTER TO celda;
celda = RECORD
info: CARDINAL;
sig: list;
END;
a) Escribir un subprograma que reciba una mlist y un cardinal k y retorna 2 cardinales m y n que indican las
coordenadas de la primera aparición del cardinal dentro de la lista. Esto significa que el cardinal k aparece en la msima lista en la celda n-sima. Si el cardinal no aparece en la lista, retorna m y n en el valor 0.
b) Escribir un subprograma que reciba una mlist y retorne una list con los mismos elementos en el mismo orden.
Ejemplo:
entrada: ( (1,2,3) , (5,6), () , (8) )
( 1, 2 , 3, 4, 5, 6, 8 )
salida:
c) Escribir un subprograma que reciba una list y un número n y retorne una mlist cuyos elementos sean las listas
obtenidas agrupando de a n los elementos de la lista de entrada. La última de las listas puede tener menos de n
elementos en caso de que la cantidad de elementos de la lista de entrada no sea un múltiplo de n.
Ejemplo:
(1,2,3,4,5,6,7) 3
entrada:
salida: ( (1,2,3), (4,5,6),(7) )
Observaciones: Cuando se pide subprograma, se hace referencia a función o procedimiento, donde deberá elegir lo
más apropiado. Debe implementar todas las operaciones auxiliares que utilice. Puede hacer los algoritmos recursivos o
iterativos.
Ejercicio 2
Se considera el TAD IndexFile que representa un conjunto de registros. Cada registro tiene una clave asociada. El
conjunto puede recorrerse secuencialmente ordenado según la clave de cada registro y también es posible acceder
directamente a un elemento dada su clave.
El TAD Registro se define como sigue:
IMPLEMENTATION MODULE Registro;
TYPE
Registro; (* tipo opaco *)
Clave;
(* tipo opaco *)
PROCEDURE IgualClave(k1,k2 : Clave) : BOOLEAN;
(* retorna true si k1 = k2 *)
PROCEDURE MenorClave(k1,k2: Clave) : BOOLEAN;
(* retorna true si k1 < k2 *)
PROCEDURE LaClave(reg: Registro) : Clave;
(* retorna la clave asociada al registro *)
(* otras operaciones *)
. . .
El TAD IndexFile representa un conjunto de registros. En todo momento existe un registro que es el llamado registro
corriente; sobre él se realizan muchas de las operaciones. En un momento dado, el registro corriente puede ser
cualquiera de los registros del archivo. Existe un registro especial llamado EOF que siempre representa el último
registro del conjunto (el de clave máxima) Las operaciones del tad IndexFile son:
Crear
Retorna el conjunto de registros vacío. El corriente es el EOF.
Insertar
Agrega un registro al conjunto y pone el corriente en ese registro.
EsEOF
Retorna true si está en EOF.
Buscar
Recibe una clave, y pone como registro corriente aquél que tiene la clave igual a la dada. Si no hay ningún
registro con esa clave, queda como registro corriente el inmediato mayor; si no hay ninguno mayor queda el
EOF.
Borrar
Borra del conjunto el registro corriente. Si está en EOF no tiene efecto.
Siguiente
Corre el registro corriente al más chico de los registros con clave mayor que el corriente. Si no existe tal
registro, queda en EOF.
Previo
Corre el registro corriente al más grande de los registros con clave menor. Si no existe ninguno menor, la
operación no tiene efecto.
Leer Retorna el registro corriente. Tiene como precondición que el corriente no esté en EOF. El registro corriente se
corre al ``siguiente''.
a) Escribir el módulo de definición del TAD IndexFile.
b) Escribir un módulo de implementación para el módulo definido en la parte a).
File translated from TEX by TTH, version 2.01.
On 21 Aug 2001, 17:11.
Descargar