Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
I Semestre 2008
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Examen #3 [solución]

      Duración: 2 horas. Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta la documentación. Cuenta la redacción y la ortografía. Puede hacer el examen con lápiz. Resuelva todas las preguntas. ¡No haga más de lo que se le pide!

 

1) [33 pts] En su tarea programada usted usó la función "rebuildDquote()" para restaurar el valor de la hilera de entrada después de detectar un error en los datos. Otra forma de proceder es leer la hilera a memoria sin hacerle cambios y, si se puede determinar que no hay errores, en ese caso se procede a remplazar los caracteres adecuadamente, como se muestra en estos ejemplos:
   flujo/entrada        memoria        getNextCSV()
+------------------+----------------+----------------+
| ["zero"]         | ["zero"]       | [zero]         |
| [,  "if "" 1" ]  | [  "if "" 1" ] | [  "if "" 1" ] |
| [, ]             | [ ]            | [ ]            |
| [, " 3xt"  \r\n] | [ " 3xt"  ]    | [ " 3xt"  ]    |
| [,"png""\n""\n]  | ["png""\n""\n] | [png"\n"]      |
| [,12345]         | [12345]        | [12345]        |
| [,""\r\n]        | [""\r\n]       | [""]           |
| [,12\r666\r\n]   | [12\r666\r\n]  | [12\r666]      |
| [,12\r\n]        | [12\r\n]       | [12]           |
| [,"con blanco"]  | ["con blanco"] | [con blanco]   |
| [,"con,coma"]    | ["con,coma"]   | [con,coma]     |
+------------------+----------------+----------------+

1.a) [15 pts] Especifique la función "automataCSV()" que sirve para obtener y almacenar en una hilera todos los caracteres que componen el siguiente campo CSV. Incluya los datos de prueba BUnit en su respuesta.

1.b) [18 pts] Use su función "automataCSV()" para implementar la función "getNextCSV()" de la tarea programada. El trabajo que debe hacer es invocar primero "automataCSV()" y luego, si el campo CSV obtenido está de acuerdo a la especificación RFC-4180, procederá a removerle las parejas de comillas dobles [""] sustituyéndolas por una sola comilla doble ["].

 

2) [33 pts]
+--------------------------------+
| MZ..<...'.....7.......o....... |
| ..triturar.................... |
| ..g...6........)("33$.....J... |
| ..P...=...matar........?!??;;^ |
| o.z.o.i.o...o...o...o...o..... |
| ..n...j...f...b.destruir..V... |
| .....bonga..i.H.i.3.i...i...i. |
| i...i...i...i.matanga...i.'.i. |
| ......}...A...1...$....canga.. |
+--------------------------------+
           chunga.exe
      Jimmy Neutron descubrió que muchos de los programas ejecutables que usan los estudiantes de la ECCI incluyen comandos satánicos que es necesario censurar. Para eso, propuso construir un módulo que recibe como entrada un programa ejecutable y produce una lista de las palabras que contiene el texto, en donde "palabra" significa "varias letras juntas, sin espacios ni caracteres raros".

      Escriba un programa que permita extraer todas las hileras de un archivo. Incluya un argumento que indique cuál es el tamaño mínimo de una palabra, para evitar que letras solas aparezcan en la salida. Su programa no debe imprimir cada palabra más de una vez.

 

3) [33 pts] El problema del método replace() de la hilera C++ estándar es que no permite una sub-hilera como argumento. Por ejemplo, no es posible cambiar de un sólo tirón una palabra por otra así:
{
    std::string str;
    // ...
    str.replace("banano", "gorila");
}

3.a) [15 pts] Especifique la clase "str_replace" que aporta la funcionalidad ya mencionada, pero recuerde que en muchas ocasiones una sub-hilera aparece en varios lugares dentro de la hilera. Incluya los datos de prueba BUnit en su respuesta.

3.b) [15 pts] Implemente su clase.

3.c) [3 pts] Explique si vale la pena o no que su nuevo método "replace()" sea implementado como un método "inline".

 

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2008
Derechos de autor reservados © 2008
[home] <> [/\]