Site hosted by Angelfire.com: Build your free website today!

TAREA PROGRAMADA TRES 

Introducción

 

         La tarea programada 3 consiste en la implementación de una clase lista. A diferencia de la implementada en la tarea anterior, esta vez haremos uso de una lista doblemente enlazada, a la cual se le debe agregar el método “move_after”, cuya estructura básica fue proporcionado por el profesor y el cual permitirá mover un valor desde un nodo hacia otro, como se ve en las siguientes figuras:

 

 

 

 

 


Valores iniciales de una lista:

 

 

 

 


Así queda después de utilizar move_after  con 1 en el valor de “to” y 3 en el valor de “from”:

 

 

 

         El programa también debe incluir la implementación de SelectionSort( ), el cual debe ser modificado para trabajar sobre una lista y no sobre un vector.

         Como en los trabajos anteriores la mayoría del código fuente es proporcionado por el profesor, por lo cual el trabajo a realizar es en su mayoría búsqueda y corrección de errores en la clase lista.  Una vez corregidos los errores se podrá comprobar el funcionamiento correcto de la lista y del método move_after.

 

Esta documentación se puede encontrar en la dirección:

https://www.angelfire.com/bug/larias

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Problema

 

         En esta tarea se nos da el código fuente de una lista doblemente enlazada, dicha lista contiene errores y además hay que implementarle dos métodos para que realice las funciones solicitadas por el profesor, en especifico el problema se divide en los siguientes puntos:

 

·        Localización y corrección de los errores en el código dado por el profesor.

·        Implementación con éxito del método move_after( ).

·        Implementación con éxito del método SelectionSort( ).

·        Utilización de una lista doblemente enlazada.

·        Poder utilizar procedimientos que no se saben como funciona, pero de los cuales si se conoce su utilidad.

 

 

Objetivos:

        

·        Familiarizarse con el uso de punteros.

·        Implementar el método “move_after”.

·        Implementar el método SelectionSort( ).

·        Corregir los errores en el código fuente suministrado.

·        Lograr que la lista funcione de la manera requerida.

        

 

 

 

Requerimientos:

 

v    Un compilador de C++.

v    Los *.cpp  ADH_list2, Use_list2 y lbubsort.

v    Los *.h Tdef y ADH_list2.

v    El código fuente del método Move_after.

          

Abstracción

 

Especificación de la clase

 

La clase  ADH_lst2 es una de las más importantes porque contiene la implementación de la lista, así como los métodos necesarios para su manipulación adecuada. Es en esta clase, donde encontramos a la función ADH_lst2::move_after, la cual le permitirá al usuario del programa, mover los números dentro de la lista, especificando en que localización los desea. 

 

Operaciones / métodos

 

Los métodos de esta clase son:

 

·        Void ADH_lst2::push_front( ):  Este método se encarga de introducir un valor al principio de la lista.

·        Void ADH_lst2::push_back( ): Este método se encarga de introducir un valor al final de la lista.

·        Void ADH_lst2::pop_front( ):  Este método se encarga de eliminar el valor que se encuentra al principio de la lista.

·        Void ADH_lst2::pop_back( ):  Este método se encarga de eliminar el valor que se encuentra  al final de la lista.

·        ADH_lst2::nodo * ADH_lst2::last_node( ): Se encarga de devolver el puntero que apunta al último nodo de la lista.

·        Void ADH_lst2::swap( ):  Se encarga de intercambiar nodos dentro de la lista.

·        Void ADH_lst2::move( ):  Traslada valores a un lugar determinado.

·        Void ADH_lst2::move_after( ): Se encarga de trasladar un nodo(llamado “from” ) para colocarlo después de un valor (“llamado to”).

·        Void printList( ): Muestra en pantalla el contenido de la lista.

 

También esta implementado un operador, ADH_lst2& ADH_lst2::operator=( ),  que se encarga de borrar los valores de una lista, para luego  copiar otra. 

Además, se incluye un destructor llamado ADH_lst2::~ADH_lst2( ), que se encarga de eliminar todos los nodos de la lista, dejándola vacía.

 

Eficiencia

 

Una vez implementado, el programa será capaz de realizar todas las funciones implementadas de forma satisfactoria, a menos que la lista este vacía, lo cual provocará error en algunos casos.

El único aspecto delicado del programa, es su manipulación, debido a que esta debe realizarse desde el código fuente, dificultando su uso para aquellos usuarios inexpertos. 

 

Especificación del programa

 

El programa será capaz no solo de crear listas enlazadas, sino de realizar diversas operaciones con ellas (mover, copiar, intercambiar valores, eliminar, etc.). Cuenta con el archivo ADH_lst2.cpp, el cual contiene todos los métodos de manipulación de la lista.

Esta clase, se accesa mediante USE_lst2.cpp, el cual será el punto de entrada, debido a que contiene el método main( )(es decir, de ahí se llaman a los otros métodos).

 

 Arquitectura del programa

 

El programa esta formado por dos archivos cpp: ADH_lst2, el cual contiene la implementación de los métodos, y USE_lst2, el cual es el punto de entrada para la utilización del programa.

También, necesitan incorporarse otros dos archivos, los cuales son ADH_lst2.h y el Tdef.h, los cuales proporcionan soporte para algunas de las funciones creadas.

 

 

 

 

 

 

 

 

 

 

Implementación

 

Modelo de la clase

Clase Lista

Creador y Destructor

 

ADH_lst2(); 

~ADH_lst2();

       

Métodos

 

Pop_front

Pop_back

Push_front(const T& v)

Push_back(const T& v)

Move_after(

    iterator from,

         iterator to   )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Estructura del programa

 




 
 

 

 

 

 

 

 

 

 

 


Invariante de la clase

 

Para la lista:

    (this->_prm == 0) || (this->_prm == p ) apunta a un nodo

 

Para cada nodo de una lista

    (p->_val es correcto && (p->next == 0 || p->next apunta a un nodo válido )

                         && (p->prev == 0 || p->prev apunta a un nodo válido )

 

 

 

 

 

 

Arquitectura interna del programa

 

El programa esta formado por un punto de entrada, el cual es USE_lst2.cpp, el cual contiene el método main( ) y se encarga de llamar a los demás métodos. 

El main( )llama a la clase ADH_lst2.cpp, la cual contiene los métodos necesarios para la ejecución del programa.

 

Compilador usado

 

Para el programa, se utilizó el compilador incluido en la versión 6 de Visual C++.

 

¿Cómo compilar el programa?

 

Para compilar el programa, solo es necesario cargar la versión de C++ que se este utilizando, y buscar la opción “compilar”.  En la versión 6.0, la compilación puede realizarse de tres maneras diferentes. La primera accediendo al botón compilar en la mini barra de construcción. La segunda, en la barra de menú, en la opción Build, en el menú que se despliega, se escoge Compile. Y la tercera manera de compilar es apretando simultáneamente las teclas Control + F7.

 

 

Guía de uso del programa

 

Para ejecutar el programa, es necesario buscar la opción “ejecutar” en el compilador utilizado. El programa ya tiene unos datos introducidos por el programador. Si se desean resultados diferentes, la modificación debe realizarse directamente en el código fuente.

 

Datos de prueba del programa

 

Formato de los datos de prueba

 

Los datos de prueba del programa, serán números enteros, introducidos por el programador, en la implementación del método. 

 

Entradas vs. Salidas esperadas

 

Las entradas esperadas son los números enteros que vienen con la construcción del método. 

La salida esperada es una lista, con esos números, ordenados de la manera en que fueron introducidos.