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

TAREA PROGRAMADA DOS

 

Introducción

 

            La segunda tarea programada consiste en el diseño e implementación de una clase vector. Debido a que en C++ no se pueden usar vectores y matrices de tamaño variable, es preciso utilizar la sobrecarga de operadores para poder simular el vector en una lista.

            La mayor parte del código fuente del la clase vector es facilitado por el profesor, pero necesita de ciertos ajustes para funcionar de manera correcta. Cuando dichas correcciones finalicen, el programa será capaz de realizar las operaciones básicas de un vector, como lo son agregar y borrar datos, tanto al final como al inicio del vector.  Además el vector podrá ordenarse, para lo cual el profesor nos dio el procedimiento “quick sort”,  el cual se encarga de revisar el vector y ordenar sus elementos.

            Como otro punto importante, se puede notar la ausencia de la invariante en la clase provista por el profesor, por lo cual, será de gran importancia la declaración de esta por parte de los estudiantes.

            El código fuente y la documentación interna y externa se puede encontrar en la dirección  www.geocities.com/

            La implementación de una clase ya diseñada por el profesor es el primer paso para poder diseñar e implementar nuestras propias clases en un futuro, por lo cual la realización adecuada del presente trabajo es de notable importancia en el desarrollo apropiado del curso.

 

Descripción del problema a resolver

 

Problema:

 

            El problema consiste en la implementación de una clase del tipo vector, tomando como base una que fue previamente diseñada por el profesor. Dada la carencia de listas dinámicas en C++, se hace preciso la utilización de la sobrecarga de operadores por lo que se utilizaran procedimientos que no sabemos exactamente como funcionan.  Además es necesario la corrección de ciertos problemas, y es necesario agregar el código fuente necesario para que pueda borrar y copiar elementos al inicio del vector. La invariante de la clase tampoco ha sido definida, por lo cual corresponde al estudiante definirla e implementarla. Resumiendo el problema se puede dividir en 4 puntos:

 

·        Implementar la clase vector, la cual fue previamente diseñada por el profesor.

·        Utilizar procedimientos  de los cuales se conoce su utilidad, más no su arquitectura.

·        Definir e implementar la invariante de la clase vector.

·        Crear el código fuente necesario para que el vector pueda borrar y copiar elementos al inicio del vector.

·         

Solución:

 

Utilizar una sobrecarga de operadores, en la clase vector. La sobrecarga se realizará mediante los métodos implementados, y el uso de archivos *.cpp como ADH_list y Use_list y archivos *.h Tdef y ADH_list como.

 

Objetivos:

           

·        Obtener las nociones básicas para implementar una clase.

·        Lograr trabajar con métodos cuyo funcionamiento es desconocido.

·        Implementar la clase vector.

·        Crear una invariante adecuada para la clase vector.

·        Lograr que el vector realice operaciones básicas, como borrar y agregar, tanto al principio como al final.

·        Lograr que el programa genere secuencias aleatorias en un rango determinado para ordenarlas mediante la función qsort( ).

 

Requerimientos:

 

·        Un compilador de C++. En nuestro caso utilizaremos el compilador, incluido en Visual C++ versión 6.

·        Los *.cpp,  ADH_list y Use_list

·        Los *.h Tdef y ADH_list

           

Abstracción      

 

Especificación de la clase:

 

La clase vector será capaz de realizar una sobrecarga de operadores, para que el vector implementado sea de tamaño variable, y tenga la apariencia de una lista a la vista del usuario del programa. Además, permitirá operaciones como agregar y borrar elementos y ordenar los elementos en orden.

 

Operaciones y métodos[i] :

 

A continuación se presentaran los métodos y operaciones de la clase Vector:

 

Vector: Contiene el constructor y el destructor de la clase

~ADH_list: Elimina todos los nodos de la lista

begin: Señala el primer nodo del vector

end: Señala el ultimo nodo del vector

empty: Dice si el vector esta vacío

Kslice: Traslada al principio de la lista sus últimos k valores,pero sin copiarlos, mediante cirugía de punteros.

Last: obtiene una copia del último valor de la lista

Last: retorna el puntero del último nodo de la lista

Move: traslada en valor de LO a This

pop_back: Elimina el valor del final de la lista

pop_front: Elimina el valor del principio de la lista

push_back: Agrega una copia del valor "v" al final de la lista "*this"

push_front: Agrega una copia del valor "v" al principio de la lista "*this"

Remove: Elimina cada uno de los valores iguales a "v"

Swap: intercambia *this <==> L         

 

 

 

Eficiencia:

 

            La eficiencia del programa es buena, ya que a pesar de que existen métodos  implementados de una manera más bien grande, no afectan el rendimiento del programa ya que la diferencia es mínima y que están pensados de esa manera para que en el futuro los programadores que utilicen esta clase la comprenda de una manera más rápida.  Algo que si puede llegar a afectar la eficiencia es que la interacción con el programa solo se puede dar modificando los datos del código fuente, esto afecta a la hora de hacer las pruebas ya que sería mucho más rápido poder hacerlo en tiempo de ejecución.

 

Especificación del programa:

 

            El programa vector, cuenta con la clase llamada vector que es capaz de borrar elementos y agregar elementos, tanto al final como al principio de la lista, además de crear la lista nueva.  El punto de entrada del programa se encuentra en USE_list.cpp, ya que es aquí donde se interactúa con el programa, dicha interacción no es directa ya que se tiene que hacer desde el código fuente y no en tiempo de ejecución

 

Arquitectura del programa:

 

El programa está construido en una clase, llamada vector. Además, se hace uso del método qsort(). El punto de entrada del programa es el archivo USE_list.cpp, que permite el uso de los métodos de modificación y eliminación de nodos.

 

Implementación

 

 

 

 

 

 

Estructura del programa:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 Modelo de la clase (dibujo)

 

Clase Vector

vector(size_t n); 

~vector();

       

 

+Vector::InOut

+InOut()

+Operator *()

+Operator ++()

+Operator ­ =

 

+Vector::Iterator

+Iterator()

+Operator *()

+Operator ++()

+Operator ­ =

 

+Vector::Nodo

+ADH_list()

+~ADH_list()

+begind()

+empty()

+end()

+first()

+K_slice(int)

+last()

+last_node()

+move()

+pop_back()

+pop_front()

+push_back()

+push_front()

+swap()

 

+operator !=

+operator <<

+operator ==

+operator >>

+print_list

 

 

 

 Invariante de la clase:

 

Los números introducidos en el vector, deben ser números enteros. No podrán objetos de otra clase(como caracteres).

 

 

 Arquitectura interna del programa:

 

El programa esta constituido por la clase vector, implementada para funcionar con sobrecarga de operadores, e incluye a la función “qsort( )” proporcionada por el profesor.

Además esta constituida por los archivos ADH_list y Use_list y los *.h Tdef y ADH_list, que son parte importante de la implementació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

 

El programa puede ejecutarse tiene un inconveniente para ejecutarse, y es que solo pueden modificarse los datos desde el código fuente, es decir, el programa puede ejecutarse normalmente, pero para elegir que rango de números va a utilizar el vector, o para elegir que método utilizar, se debe entrar al código fuente, y modificar directamente la operación.

Esto significa, que solo usuarios conocedores de C++ pueden utilizar este programa, pues, un usuario inexperto no tendría la habilidad necesaria para realizar cambios.

 

 

 

 Datos de prueba del programa

 

Formato de los datos de prueba:

 

Los datos de prueba son números enteros generados aleatoriamente mediante el método rand() en un rango determinado por el programador.

Si se desea cambiar el rango, es necesario introducirse directamente en el código fuente y  cambiarlo.

 

Entradas vs. Salidas esperadas:

 

Las entradas serán números enteros, generados por el mismo  programa, por lo que el usuario no deberá introducir ningún valor. La salida será un vector ordenado de mayor a menor, con los números enteros primero introducidos, mostrados en la pantalla.

 

 

 

 

 



[i] Las especificaciones de los métodos fueron tomadas de la documentación interna de ADH_list.cpp,  Use_list.cpp, USE_list.h, creada por Adolfo di Mare