Implementa un nou mètode de la classe Queue que divideix els elements de la cua entre el paràmetre implícit i la cua que passen com a paràmetre. Els elements en posició senar estaran en el paràmetre implícit i els elements en posició parell en la cua que ens passen com a paràmetre.
D’entre els fitxers que s’adjunten en aquest exercici, trobaràs queue.old.hpp, a on hi ha una implementació de la classe genèrica Queue. En primer lloc, hauràs de fer:
cp queue.old.hpp queue.hpp
A continuació si obres el fitxer queue.hpp al final del mateix trobaràs el mètode que has d’implementar:
// Pre: Sigui [e1,e2...,en] el contingut inicial de la cua des del // principi fins al final i q és buida. // Post: El contingut final del pi és [e1, e3, e5, ...] (manté els // elements en posicions senars) i el contingut de q és [e2, e4, ...] // (conté els elements en posicions parells). void split(Queue &q);
IMPORTANT: No toquis la resta de la implementació de la classe, excepte si per algun motiu, consideres que necessites afegir algun mètode auxiliar o atribut a la part privada.
D’entre els fitxers que s’adjunten a l’exercici també hi ha program.cpp (programa principal) i Makefile per a compilar i generar l’executable. El programa principal que t’oferim ja s’encarrega de llegir les cues i fer les crides al mètode indicat. Només cal que implementis el mètode split.
Per a pujar la teva solució, has de crear el fitxer solution.tar així:
tar cf solution.tar queue.hpp
Hauries d’aconseguir implementar el mètode demanat a base d’intercanviar els punters de l’objecte. De fet, una solució a base d’usar push i pop potser et permetrà passar els jocs de proves, però atès que la solució ha de ser eficient en temps i espai, aquest tipus de solució serà fortament penalitzat.
Recorda que si crees funcions auxiliars, has d’afegir-hi les corresponents Precondició (Pre) i Postcondició (Post). En els bucles inclou l’invariant del bucle (Inv) i la funció de fita (FF). En les funcions recursives inclou la hipòtesi d’inducció (HI) i la funció de fita (FF).
Entrada
L’entrada del programa és una seqüència de cues.
Per llegir les cues, s’utilitza l’operador >>
que es troba definit en el fitxer queue.hpp.
Sortida
Per cada cua s’escriurà el resultat del mètode split, és a dir, les dues cues (paràmetre implícit i paràmetre).
Per escriure les cues, s’ha utilitzat l’operador <<
que es troba definit en el fitxer queue.hpp.
Input
10 1 2 3 4 5 6 7 8 9 10 10 2 4 6 8 10 12 14 16 18 20 9 -1 -2 -3 -4 -5 -6 -7 -8 -9 3 100 1000 10000
Output
5 1 3 5 7 9 5 2 4 6 8 10 --- 5 2 6 10 14 18 5 4 8 12 16 20 --- 5 -1 -3 -5 -7 -9 4 -2 -4 -6 -8 --- 2 100 10000 1 1000 ---
Input
2 -9 -7 1 3 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Output
1 -9 1 -7 --- 1 3 0 --- 9 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 --- 8 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 ---