ALGORITMOS Y ESTRUCTURAS DE DATOS II Ingeniería Técnica en Informática de Gestión Ingeniería Técnica en Informática de Sistemas CURSO 2003/04 Práctica 1 Diseño Modular y creación de TAD Objetivos § § § § Familiarizarnos con el uso de los TAD como base del diseño modular. Repasar la creación de unidades en Pascal. Valorar la importancia de documentar, de forma correcta, la especificación de un TAD. Valorar la importancia de proporcionar robustez a los TAD creados. Enunciado Se desea especificar e implementar, mediante POO, un TAD para manejar vectores de números enteros. Dicho TAD será implementado mediante la clase TVector, que tendrá las siguientes características: § § § § § § § § § § La estructura de un vector está basada en una lista simplemente enlazada. Cada nodo de la lista corresponde a una componente del vector. El tamaño de un TVector es variable, pero nunca superará las 10 componentes. En un TVector se almacenará cualquier número entero. El entero cero (0) sirve para indicar que una componente está vacía. Se permiten elementos repetidos. Método crearVector: si el tamaño que se le pasa por parámetro es <=0 o >10 se produce una excepción y no se crea el TVector Método asigna: se produce una excepción si el valor del índice i no se encuentra en el intervalo correcto (mayor que 0 y menor que el tamaño del TVector). Método copia: si los dos operandos tienen distinto tamaño, se vacía el TVector receptor(v) y se crea de nuevo con el tamaño y las componentes de v1. En caso contrario se asignan las componentes de v1 en v siempre que la componente de v1 no sea la vacía. Por ejemplo, si v[3]=-6 y v1[3]=0, entonces v[3]=-6 después de aplicar la operación. Método suma: ambos operandos deben tener el mismo tamaño. En caso contrario, se produce una excepción, y no se realizará la operación, devolviendo el TVector vacío. Además, si se suma una posición cualquiera con una posición vacía, dicha posición será vacía en el TVector resultado. Método esInverso: ambos operandos deben tener el mismo tamaño. En caso contrario, no se asegura cual es el resultado de la operación. Tratamiento de excepciones: todas las operaciones que controlen excepciones devolverán una variable booleana indicando el estado final de la operación. Para implementar el TAD TVector se diseñará la clase TVector, formada por dos atributos privados: vector: atributo de tipo puntero a componente, donde componente es un registro formado por un entero y un puntero a componente tam: atributo de tipo natural (almacena el tamaño del TVector) y un conjunto de métodos públicos, cuyas cabeceras serán las siguientes: constructor crearVectorPorDefecto; constructor que crea un TVector vacío de 10 componentes constructor crearVector(n: natural; var res: booleano); constructor que crea un TVector vacío de n componentes función esVacío: booleano; devuelve verdad si el TVector tiene todas sus componentes vacías y falso en caso contrario función numComponentes: natural; devuelve el número de posiciones que tiene un TVector función componentesNoVacias: natural; devuelve el número de posiciones no vacías que tiene un TVector Página 1 función asigna(i: natural; n: entero): booleano; inserta el entero n en la posición i del TVector self función suma(V1,V2: TVector): booleano; suma, componente a componente, los vectores V1 y V2, dejando el resultado en el TVector self función esInverso(V1: TVector): booleano; devuelve verdadero si las componentes del TVector V1 son las mismas que las del TVector self, pero en sentido inverso, y falso en caso contrario procedimiento copiaV(V1: TVector); realiza una copia de V1 en self según la explicación mostrada anteriormente destructor eliminaV; elimina el TVector, liberando la memoria que tenía reservada procedimiento verVector; muestra por pantalla el contenido del TVector self, separando cada componente por un espacio en blanco (sin guiones, saltos de línea ni mensajes). Para las componentes vacías se mostrará la palabra VACIO, y si el TVector está vacío se imprimirá el mensaje TVECTOR VACIO. Se pide 1. Especificar e implementar el TAD TVector en un módulo (unidad) independiente. Un a vez compilado, dicho fichero debe llamarse tadVect.tpu Evaluación de la práctica La evaluación de la primera práctica consistirá simplemente en la entrega de la documentación de la especificación semi-formal del TAD propuesto, siguiendo las normas detalladas a continuación. Tiempo estimado de realización 2 clases (se entregará en la semana del 10 al 14 de noviembre durante la clase de prácticas) Página 2 NORMAS PARA LA PRESENTACIÓN DE PRÁCTICAS Cada práctica entregada deberá contener OBLIGATORIAMENTE la siguiente información: § Portada: Contiene el título de la práctica, nombre y apellidos del alumno, grupo de prácticas al que pertenece (A1 .. A9) y titulación (I.T.I. de Gestión ó I.T.I. de Sistemas). (SEGÚN LA PLANTILLA QUE TENEIS EN LA PÁGINA WEB) § Indice: Contiene los apartados de los que se compone la práctica, indicando el número de página en el que se encuentran. Tipo de letra: Arial (10 pt.) § Documento de especificación semi-formal de cada TAD: Se hará especial hincapié en su correcta documentación. Para definir los tipos, se indicará su nombre, su utilidad y los valores válidos que se pueden almacenar en él. La documentación de las operaciones se realizará utilizando las cinco cláusulas explicadas en teoría, tal como se puede ver en el siguiente ejemplo: constructor CreaFicha (nombre: cadena; edad, hijos: byte, var res: byte); { Parámetros: nombre: cadena de caracteres donde se almacena el nombre de la persona edad: número natural que indica la edad de la persona hijos: número natural que indica el número de hijos que tiene la persona res: almacena el estado de realización de la operación Devuelve: Precondiciones: 0 £ edad £ 110 hijos £ 15 Efecto: Crea una ficha con los valores indicados en los argumentos y almacena en res el valor 1 Excepciones: Si (edad < 16 y hijos > 0) no se crea la ficha y se almacena en res el valor 0 } Tipo de letra: § Para las cabeceras: Arial (12 pt.) con palabras reservadas en negrita § Para la documentación: Arial (10 pt.) § Conclusiones y evaluación: Breve opinión personal de la práctica realizada. Descripción de las situaciones "particulares" surgidas durante la realización de la misma, indicando las soluciones adoptadas en cada caso. NOTA La práctica se presentará en un portafolios de plástico Página 3