PRÀCTICA Nº 3: 1 sesió
(del 27 de Març al 2 de Abril de 2003)
US DEL TAD PILA
0. ObjeCtiUs
El objectiu d’esta pràctica és l’implementació del TAD Pila i el seu us en la construcció d’una versió (acadèmica, no eficient) del algorisme d’ordenació per inserció.
Utilització correcta en un programa de les dos implementacions del TAD pila, de manera que, en el seu us, siga transparent el tipus d’implementació utilitzada.
1. Introducció
L’algorisme d’ordenació per inserció és un algorisme directe, de cost mitja n2 (on n és el número d’elements a ordenar) basat en la comparació d’elements entre sí.
L’idea és la següent: es tracta de mantindre un conjunt d’elements parcialment ordenat que va creixent de la següent manera:
El algorisme eficient en espai, gasta com a estructura de dades el propi vector d’elements desordenats. Visualment l’algorisme podría funcionar de la següent manera:
En esta pràctica utilitzarem com a estructura auxiliar el TAD pila per a conseguir el mateix funcionament. L’idea és la següent:
Gastarem dos piles A i B per a obtindre en cada momento, el lloc que l’hi correspon a cada nou element dins del conjunt parcialment ordenat. La pila A no estarà en cap moment buida i va contenint el conjunt parcialment ordenat. La pila B servirà per a guardar temporalment els elements de la pila A que es desapilen de A per a deixar lloc per al nou element. Sense entrar en detalls, el algorisme consistiria en els següents punts. A partir d’un vector V d’elements desordenats:
Al acabar el procés, en la pila A es troba el vector ordenat, sent el cim de la pila l’element major o menor (segons el criteri d’ordenació).
Per últim s’actualitza el vector V amb el contingut de la pila A.
2. RealiTzació de la prÀctica
a) Implementació de la clase i comprobació del seu correcte funcionamient
En esta tercera pràctica, es deu implementar una clase en C++ que permitisca representar el TAD pila, asumint l’interficie estàndar vista en teoría:
class Pila { public: Pila (void); // Constructor por defecto bool Apilar (Valor); bool Desapilar (void); bool CimaPila (Valor &); bool PilaVacia (void); private: .??. };
Es construiràn les dos implementacions concretes vistes en teoria utilitzant com a noms dels archius
##PilaE.h
i ##PilaE.cpp per a l’implementació estàtica.##PilaD.h
i ##PilaD.cpp per a l’implementació dinàmica.A més a més es crearà un programa complet anomenat ##insercion.cpp on s’implementarà l’algorisme d’ordenació exposat. Este algorisme serà un subprograma que es cridarà desde la funció main(). El programa principal s’encarregarà d’iniciar aleatoriament un vector de sencers de TALLAMAX i escriurà per pantalla el vector avanç de l’ordenació i després d’ésta. Este programa complet deurà de funcionar tant amb la versió estàtica com amb la versió dinàmica de les pilas.
b) Tarea opcional: Una millora de l’algorisme consistix en no buidar completament la pila B en cada nova inserció de elements de V, sino anar transvasant elements de A a B o viceversa fins que tingam en la pila A els elements menors que l’element a inserir i en la pila B tingam els majors.
Després de l’última inserció pasarem tots els elemets de B a A, de manera que tindrem tots els elements ordenats en A.
4. Lliurament de Programes
Al començament de la següent sessió de pràctiques s’entregaràn al professor cinc o sis fitxers:
1) Fitxers de la clase Pila (##PilaE.cpp, ##PilaE.h, ##PilaD.cpp i ##PilaD.h)
2) Fitxer principal on es realitza l’ordenació (##insercion.cpp).
3) Opcionalment: programa opcional (##op_insercion.cpp).
Nota Molt Important
Avanç de poder començar a realitzar qualsevol de les pràctiques es necesari presentar les fulles d’especificació de programes (documentació de programes).
LLIURAMENT DE PROGRAMES:
En començar la sessió de pràctiques del 3 al 9 d’Abril.