• No se han encontrado resultados

TRABAJO PRACTICO Nº 1 Traductor de Juegos de Caracteres

N/A
N/A
Protected

Academic year: 2021

Share "TRABAJO PRACTICO Nº 1 Traductor de Juegos de Caracteres"

Copied!
7
0
0

Texto completo

(1)

TRABAJO PRACTICO Nº 1 – Traductor de Juegos de Caracteres

1) Objetivo del T.P. :

El objetivo del presente trabajo consiste en la realización de una serie de aplicativos en modo consola, codificados en ANSI-C, que conviertan un texto recibido por stdin (Standard Input), escrito en un juego de caracteres A, en otro texto generado sobre stdout (Standard Output), con un juego de caracteres B, y viceversa.

En particular un par de aplicativos debe permitir convertir un texto con juego de caracteres ASCII a otro con juego de caracteres ISO-8859-1 (Latin-1), y viceversa. El otro par de aplicativos debe permitir la conversión de un texto escrito con caracteres ASCII a tipografía de matriz de puntos (y, opcionalmente, viceversa).

Los programas a desarrollar deben poder ser compilados sin errores ni advertencias com GCC/DJGPP.

2) Alcance del T.P.:

Mediante el presente TP se busca que el Estudiante adquiera y aplique conocimientos sobre los siguientes temas:

• Programas en modo consola.

• Piping.

• Juego de caracteres ASCII.

• Tipos enumerativos.

• Operadores de Bits y sistema de numeración hexadecimal.

• Matrices estáticas.

• Cadenas de caracteres y arreglos de cadenas de caracteres.

• Salida de datos con formato.

• Utilización de ciclos de control.

• Directivas al preprocesador C.

• Compilación por medio de línea de comandos.

3) Desarrollo del T.P. :

Para el presente T.P. se deberán construir cuatro (4) programas ejecutables invocables por línea de comandos:

• Programa I – Traductor ASCII → ISO8859 : convertirá un texto compuesto por símbolos del alfabeto ASCII (caracteres) a otro idéntico en contenidos pero compuesto por símbolos del alfabeto ISO-8859-1.

• Programa II - Traductor ISO8859 → ASCII : convertirá un texto compuesto por símbolos del alfabeto ISO- 8859-1, a otro archivo idéntico en contenidos, pero compuesto por símbolos (caracteres) del alfabeto ASCII.

1

(2)

Estos dos programas deberán ser invocados de la siguiente forma:

type textoASCII.txt | ascii2iso>textoISO.txt (DOS) cat textoASCII.txt | ascii2iso>textoISO.txt (UNIX)

type textoISO.txt | iso2ascii>textoASCII.txt (DOS) cat textoISO.txt | iso2ascii>textoASCII.txt (UNIX)

en donde "textoISO.txt" y "textoASCII.txt" son dos archivos de texto usados como ejemplo, conteniendo símbolos de los alfabetos ISO-8859-1 y ASCII, respectivamente.

• Programa III – Traductor ASCII → Dot-Matrix : convertirá un texto compuesto por símbolos del alfabeto ASCII (caracteres) a otro idéntico en contenidos pero compuesto por símbolos de matriz de puntos 7 x 5.

En este archivo cada línea abarca LINE_WIDTH / (5+1) caracteres, y la cantidad de líneas del archivo es un múltiplo de (7+1), ya que la tipografía es de 7 x 5 pixeles, más una línea de separación (tanto horizontal como vertical).

• [OPTATIVO] Programa IV - Traductor Dot-Matrix → ASCII : convertirá un texto compuesto por símbolos de matriz de puntos 7 x 5 a otro idéntico en contenidos pero compuesto por símbolos ASCII (caracteres).

(3)

Estos dos programas deberán ser invocados de la siguiente forma:

type textoASCII.txt | ascii2dm>texto_dm.txt (DOS) cat textoASCII.txt | dm2ascii>texto_dm.txt (UNIX)

type texto_dm.txt | dm2ascii>textoASCII.txt (DOS) cat texto_dm.txt | dm2ascii>textoASCII.txt (UNIX)

en donde "texto_dm.txt" y "textoASCII.txt" son dos archivos de texto usados como ejemplo, conteniendo símbolos de los alfabetos matriz de puntos 7 x 5 y ASCII, respectivamente.

• Utilización de buffer de I/O - Matriz de impresión:

A los fines de este TP y para la conversión ASCII → Matriz de puntos, el contenido de salida debe ser generado sí o sí ser sobre una matriz estática temporal de caracteres, la cual, al ser barrida de manera conveniente, volcará su contenido a stdout.

Para la conversión de matriz de puntos a texto ASCII debe leerse cada carácter sobre la matriz temporal para luego, una vez completa, convertir cada símbolo a alfabeto ASCII. Tener presente que un archivo de matriz de puntos siempre contendrá todos los caracteres de una matriz completa.

Los caracteres convertidos a tipografía de matriz de puntos deben ser almacenados en una matriz temporal de caracteres de:

LINE_WIDTH x LINE_HEIGHT caracteres (por ejemplo 78 x 8 caracteres).

En este caso habrá 13 x (5+1) = 78 caracteres a lo ancho, y 1 x (7+1) = 8 caracteres a lo alto. Esta organización corresponde a um display de 1 línea de 13 caracteres matriciales.

La matriz, una vez completa, debe ser volcada sobre stdout.

La implementación de este buffer temporal (matriz de caracteres) es obligatorio para la aprobación del TP

La matriz de puntos (display) debe ser visualizada por pantalla (stdout). Los caracteres de fondo y activos deben estar parametrizados. Los caracteres típicos serán

3

(4)

Modo Positivo:

Carácter de fondo: (blanco), ‘ ‘ Carácter activo: X

Modo Negativo:

Carácter de fondo: X Carácter activo: (blanco), ‘ ‘

Debe utilizarse una macro de Preprocesador C para configurar el modo de impresión: positivo o negativo.

• Tipografía:

Cada carácter debe tener un ancho de 5 pixeles y una altura de 7 pixeles.

Debe definirse un tipo de letra para graficar cada símbolo del alfabeto. Sólo a modo de ejemplo se presenta la siguiente tipografía:

Símbolo: ‘A’ (0X7C, 0X12,0X11,0X12,0X7C) X

X X

X X

X X

X X X X X

X X

X X

Símbolo: ‘B’ (0X7F,0X49,0X49,0X4E,0X70)

X X X

X X

X X

X X X X

X X

X X

X X X X X

Símbolo: ‘C’ (0X3E,0X41,0X41,0X41,0X22)

X X X

X X

X X X

X X

X X X

NOTA: Estos caracteres deben estar definidos dentro de un Diccionario, es decir, no pueden estar diseminados a lo largo del código fuente. Utilizar un archivo fuente separado para albergar el diccionario (dot_matrix_7x5.c).

(5)

Notar que no todos los caracteres ASCII son imprimibles. En el caso de un tabulador horizontal puede reemplazarse este carácter por uno o cuatro espacios (a elección), para disminuir la complejidad del trabajo.

La presencia del caracter line-feed (‘\n’) provoca que se complete el resto de los elementos de la matriz, y que se imprima por stdout, para iniciar luego una nueva línea.

Para ahorrar tiempo puede codificarse con tipografía de matriz de puntos sólo los símbolos ASCII naturales, descartando vocales acentuadas, com diéresis, etc.

4) Restricciones:

La realización de ambos programas está sujeta a las siguientes restricciones:

• No está permitido almacenar en memoria la totalidad de los caracteres leídos de stdin sobre un arreglo (además, tampoco hace falta).

• No está permitida la utilización de memoria dinámica.

• No está permitida la utilización de funciones específicas para manejo de archivos (de texto). Como funciones de E/S sólo pueden ser utilizadas las funciones de biblioteca fgetc(), getchar(), scanf(), printf(), fprintf() ,putc(), fputc(), puts(), fputs() o similares, ungetc() y feof().

• Los caracteres deben ser leídos de a uno a la vez, i.e., no está permitido leer cadenas de caracteres del archivo de entrada, ya que se desconoce la longitud de toda la línea, y no se puede hacer ninguna suposición previa (salvo en el caso de conversión dot-matrix → ASCII).

• Puede asumirse, de acuerdo a la tabla del juego de caracteres ISO-8859-1, que cualquier símbolo de su alfabeto no contiene más de 10 caracteres. Además, los caracteres especiales siempre comienzan con el carácter ampersand ("&") y finalizan con punto y coma (";"). Ejemplo: á (á), ñ

(ñ).

• Dado que no todos los caracteres del juego ISO-8859 tienen un carácter ASCII asociado, cuando el traductor encuentre alguno de estos símbolos, el Desarrollador puede elegir el símbolo equivalente que lo reemplazará, o bien optar por traducirlo com um carácter comodín.

Ejemplo: El símbolo "©" representa al elemento "", el cual no es parte del alfabeto ASCII.

En este caso, el Desarrollador puede especificar su traducción por otro símbolo, como por ejemplo la cadena de caracteres: "Copyright:". Obviamente la relación no será biunívoca.

Dicho de otra forma, el archivo original y recuperado en el siguiente caso, no necesariamente deben coincidir en cuanto a su contenido, si existen símbolos no presentes en ASCII:

cat textoISO_original.txt | iso2ascii | ascii2iso > texto_recuperado.txt (UNIX) o bien:

type textoISO_original.txt | iso2ascii | ascii2iso > texto_recuperado.txt (DOS)

Lo mismo sucede para otros símbolos ASCII no contemplados en ISO-8859. Ej.: "√", "²", o "Ω".

Si se desea, puede optarse por ignorar un carácter que no pueda ser traducido, pero debe documentarse luego la estrategia adoptada en la Documentación del Proyecto.

• No está permitido en absoluto tener hard-codings del estilo:

...c=getchar();

...

if (c=='a') printf("%s"," xxxxxxx"); /* hard-coded!!!*/

else if(c=='ñ') printf("%s","yyyyyyyy"); /* hard-coded!!!*/

5

(6)

sino que debe recurrirse a la implementación, aunque sea poco sofisticada, de un pequeño diccionario de datos compuesto de los símbolos del alfabeto, a partir de los conocimientos adquiridos hasta el momento.

Símbolo ASCII Símbolo ISO-8859-1

Á á

... ...

ñ ñ

... ...

¿ ¿

... ...

• Hay otras cuestiones que no han sido especificadas intencionalmente en este Requerimiento, para darle al Desarrollador la libertad de elegir implementaciones que, según su criterio, resulten más convenientes en determinadas situaciones. Por lo tanto, se debe explicitar en el Informe cada una de las decisiones adoptadas , y el o los fundamentos considerados para las mismas.

5) Entrega del Trabajo Práctico:

1) Deberá presentarse la correspondiente Documentación de desarrollo del TP impresa y encarpetada, siguiendo la numeración siguiente para cada ítem, incluyendo:

1) Carátula del TP. Incluir la dirección de correo electrónico de cada integrante del grupo.

2) Enunciado del TP.

3) Estructura lógica de los programas desarrollados (diagramas de flujo).

4) Estructura funcional de los programas desarrollados (si se utilizó Funciones).

5) Explicación de cada una de las alternativas consideradas y las estrategias adoptadas.

6) Resultados de la ejecución (corridas) de los programas, captura de las pantallas, bajo condiciones normales e inesperadas de entrada.

7) Reseña sobre los problemas encontrados en el desarrollo de los programas y las soluciones implementadas para subsanarlos.

8) Diskette (no CD ni DVD) con los Fuentes y el Informe en formato electrónico. El disco debe estar ensobrado y firmemente contenido en la carpeta dentro de la cual se presenta la documentación.

Si el disco está suelto o sujeto con cinta adhesiva, se rechazará el TP.

NOTA: El Informe deberá ser redactado en correcto idioma castellano, con tipografía Times New Roman, Arial, o Verdana, de tamaño 11 para los párrafos, y 13 ó 14 para los títulos.

2) Deberá entregarse una impresión de los códigos fuentes (implementación y headers) de los programas desarrollados. NO entregar archivos de códigos objeto y/o ejecutables.

3) Deberá entregarse un archivo script de compilación (archivo BAT[DOS] o SH/KSH[UNIX]) que indique cómo deben ser compilados los códigos fuentes mediante el compilador C

GCC/DJGPP.

SI NO SE PRESENTA LO INDICADO EN CADA UNO DE ESTOS ITEMS, SERA RECHAZADO EL TP.

(7)

6) Bibliografía:

Debe incluirse la referencia a toda bibliografía consultada para la realización del presente TP: libros, artículos, URLs, etc., citando:

• Denominación completa del material (Título, Autores, Edición, Volumen, etc.).

• Código ISBN del libro (opcional: código interbibliotecario).

• URL del sitio consultado.

7

Referencias

Documento similar

Se dice que la Administración no está obligada a seguir sus pre- cedentes y puede, por tanto, conculcar legítimamente los principios de igualdad, seguridad jurídica y buena fe,

Industrial concentrado Industrial disperso Agrícola-Secano Agrícola-Regadío Otros usos rurales Forestal. Infraestructuras: carreteras Infraestructuras: ferrocarriles

[r]

En relación con la Jurisdicción: son procesales las normas que regulan la organización judicial, y que componen lo que se llama “Derecho Orgánico”: clases de Juzgados y

ELABORACIÓN DE LOS MAPAS DE PELIGROSIDAD Y RIESGO REQUERIDOS POR EL R.D...

Escriba un fichero de procesamiento por lotes para borrar el fichero introducido como parámetro. El programa debe comprobar previamente si se ha introducido algún parámetro y si

La dimensión constitucional del Estatuto resulta, finalmente, del hecho de que los mismos son normas disponibles para el constituyente, en la medida, primero, que la

La parte práctica del texto se centra en la versión teatral de Grzegorz Jarzyna (preestreno el 26 de marzo de 2009, Schaubühne am Lehniner Platz, Berlín) de la pieza