# Opciones para el compilador.
#CXXFLAGS=-ansi -pedantic -Wall -O3
-CXXFLAGS=-ansi -pedantic -Wall -g3 -DDEBUG
+CXXFLAGS=-ansi -pedantic -Wall -g3
+#CXXFLAGS=-ansi -pedantic -Wall -g3 -DDEBUG
# Pruebas.
TESTS=
unicode.o: unicode.cpp unicode.h
-#quicksort.o: quicksort.cpp quicksort.h
-
-#universalstring.o: universalstring.h universalstring.cpp
-
universalstring: ascii.o unicode.o universalstring.cpp
+tp4: ascii.o unicode.o tp4.cpp
+
# Regla para borrar.
clean:
# Preety-printing del código fuente.
FUENTES=ascii.h ascii.cpp unicode.h unicode.cpp universalstring.h \
- quicksort.h quicksort.cpp
+ quicksort.h tp4.cpp
code.ps: $(FUENTES)
@enscript -j -Ecpp -U2 -C --fancy-header=squeeze --color -pcode.ps \
$(FUENTES)
# Informe.
-informe: code.ps corrida.txt
+informe: code.ps
@doxygen
@cd latex && make refman.pdf && cd ..
@doxygen Doxyfile.imprimible
--- /dev/null
+/* vim: set et sts=4 sw=4 fdm=indent fdn=1 fo+=t tw=80:
+ *
+ * Taller de Programación (75.42).
+ *
+ * Ejercicio Número 4:
+ * Ordena texto ASCII o Unicode.
+ *
+ * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
+ * Puede copiar, modificar y distribuir este programa bajo los términos de
+ * la licencia GPL (http://www.gnu.org/).
+ *
+ * Creado: lun sep 29 01:37:10 ART 2003
+ *
+ * $Id$
+ */
+
+#include "ascii.h"
+#include "unicode.h"
+#include "universalstring.h"
+#include "quicksort.h"
+
+#include <vector>
+#include <iostream>
+#include <cstdlib>
+#include <cstring>
+
+using namespace std;
+
+/// String ASCII.
+typedef UniversalString< Ascii > StringA;
+
+/// String Unicode.
+typedef UniversalString< Unicode > StringU;
+
+/// Vector con strings ASCII.
+typedef vector< StringA > VectorA;
+
+/// Vector con strings Unicode.
+typedef vector< StringU > VectorU;
+
+/**
+ * Dibuja el menú en pantalla.
+ */
+void print_menu(void) {
+ cout << "Menu:" << endl;
+ cout << " 1. Ingresar frase al vector ASCII." << endl;
+ cout << " 2. Ingresar frase al vector Unicode." << endl;
+ cout << " 3. Copiar palabra de vector a vector." << endl;
+ cout << " 4. Ordenar vectores." << endl;
+ cout << " 5. Listar vectores." << endl;
+ cout << " 6. Salir." << endl;
+}
+
+/**
+ * Obtiene la selección del menú del usuario.
+ */
+char get_entrada(void) {
+ char c;
+ cout << "Elija una opción: ";
+ cin >> c;
+ return c;
+}
+
+/**
+ * Programa principal.
+ * Este es el programa que se encarga de resolver el trabajo práctico.
+ *
+ * \return EXIT_FAILURE si hubo un error, si no EXIT_SUCCESS.
+ */
+int main(void) {
+ // Creo vectores.
+ VectorA va;
+ VectorU vu;
+ // Strings temporales para obtener entrada de usuario.
+ StringA sa;
+ StringU su;
+ // Muestra menú.
+ print_menu();
+ // Obtengo entrada del usuario.
+ char entrada = get_entrada();
+ // Mientras no sea '6' (salir), se mantiene en el loop.
+ while (entrada != '6') {
+ // Mientras la entrada sea inválida, muestra mensaje de error.
+ while ((entrada < '1') || (entrada > '6')) {
+ cout << endl << endl << endl;
+ print_menu();
+ cout << "Debe elegir un número entre 1 y 5!" << endl;
+ entrada = get_entrada();
+ }
+ cout << endl;
+ switch (entrada) {
+ case '1': // Ingresa frase al vector ASCII
+ cout << "Ingrese frase al vector ASCII: ";
+ cin >> sa;
+ va.push_back(sa);
+ break;
+ case '2': // Ingresa frase al vector Unicode
+ cout << "Ingrese frase al vector Unicode: ";
+ cin >> su;
+ vu.push_back(su);
+ break;
+ case '3': // Copia palabra de vector a vector
+ // TODO: Hacer que vaya preguntando. Tipo: Desde Hasta número
+ // (cin >> desde >> hasta >> numero; con todos char).
+ break;
+ case '4': // Ordena vectores
+ quicksort(va, 0, va.size() - 1);
+ quicksort(vu, 0, vu.size() - 1);
+ break;
+ case '5': // Imprime vectores
+ cout << "Vector de strings ASCII:" << endl;
+ cout << " ";
+ copy(va.begin(), va.end(),
+ ostream_iterator< StringA >(cout, " \n"));
+ cout << endl;
+ cout << "Vector de strings Unicode:" << endl;
+ cout << " ";
+ copy(vu.begin(), vu.end(),
+ ostream_iterator< StringU >(cout, " \n"));
+ cout << endl;
+ break;
+ case '6': // Sale
+ continue;
+ }
+ cout << endl << endl;
+ print_menu();
+ entrada = get_entrada();
+ }
+ // Salió todo ok.
+ return EXIT_SUCCESS;
+}
+