REPUBLICA BOLIVARIANA - Universidad del Zulia

Anuncio
REPUBLICA BOLIVARIANA
DE VENEZUELA.
UNIVERSIDAD DEL ZULIA
FACULTAD DE INGENIERÍA
DIVISIÓN DE POSTGRADO
COMPUTACIÓN APLICADA
TÉCNICAS DE PROGRAMACIÓN: TAREA 2
Profesor: Ing. Daniel Finol
Nombre: José V. Gómez D.
CI: 10.084.584.
MARACAIBO, MARZO DEL 2006.
I. Tarea 2: Crear un programa que lea un texto de la entrada estándar y lo imprima a la
salida estándar verificando lo siguiente:
1. Los caracteres tipo "llave": ('{', '[', '(', ')', ']', '}') concuerden, es decir, que cada
"llave" que se abra se cierre (en el orden inverso al abierto).
2. Que las comillas que se abran se cierren. (Las comillas se abren y se cierran con
el mismo caracter (")).
3. Dentro de la comillas los caracteres tipo llave se ignoran, es decir, no cuentan
para la verificación de concordancia.
En estos ejemplos:
1. Este ejemplo [aquí hay texto entre corchetes (y aquí...] hay más).
2. Si este es el { texto "esta llave } se ignora".
3. Aquí hay más texto (etcétera { más todavía "este corchete [ se debe imprimir
pero ignorar" ] } ).
4. Esta frase: "abre paréntesis (" abre corchete [, abre { etcétera } ] ).
Los errores serían:
1. Se cierra el corchete primero cuando se debe cerrar primero el último que se
abrió (el paréntesis).
2. No se cierra la llave.
3. Hay un corchete cerrado de más.
4. Hay un paréntesis cerrado de más.
Consideraciones:
 Se debe imprimir el texto hasta que se encuentre un error y se debe indicar el
número de línea y de columna del error.
 El número de columna es el número de caracter de la línea donde se encontró el
error.
 Si el error es que se llegó al final del archivo quedaron "llaves" o comillas sin
cerrar sólo hay que indicar qué fue lo que quedó sin cerrar (no es necesario dar
números de línea ni columna).
Aunque los ejemplos son de una línea el programa debe verificar el texto completo;
no línea por línea; es decir, es correcto que un paréntesis abra en una línea y cierre
en la siguiente
Explicación del Código fuente:
En la función main se obtiene la longitud tiene cada línea del arreglo de caracteres
y se le llena al mismo tiempo en line[i]. Para ello se utiliza la función getline:
int getline(void) {
int c, i;
for (i=0; i<MAXLINE-1 && (c=getchar()) != EOF && c != '\n'; ++i)
line[i]=c;
if (c=='\n') {
line[i]=c;
i+1;
}
line[i]='\0';
return i;
} /*cierre de la funcion getline*/
El valor que retorna i se le asigna a len (que es la longitud de la línea verificada),
cuando es llamada la funcion getline desde el ciclo While en la función principal. Si el
texto tiene una línea en blanco, i trae el valor de 1 (ya que en el ciclo de getline, su
contador i toma el valor de 0 y 1 para asignar a line[i] el valor de ‘\n’ y luego de ‘\0’).
Con el ciclo While se llama a la función getline para obtener la cadena de
caracteres y verificar si tiene “(“, “[“, “{“ , “}”, “]”, “)” y comillas (“”).
El ciclo For nos ayuda verificar e imprimir carácter por carácter cada línea del
texto hasta que se consigue un error(llaves no cerradas correctamente) .
Se verifica si se abrió una comilla para no tomarlas en cuenta en la validación
cierre los caracteres “(“, “[“, “{“ , “}”, “]”, “)” con :
if (comi==2)
comi=0;
if (line[i]=='"' || comi==1 || comi==2){ /*se cumple al estar abierto una comilla*/
if (line[i]=='"' & comi==1)
comi=2;
if (line[i]=='"' & comi==0)
comi=1;
}
Sino no se abrió una comillas o se cerro una comilla abierta se hace la validación
de paréntesis, corchetes y llaves - “(“, “[“,y“{“ - abiertas para ver si están cerradas
correctamente . Esto se hace al conseguir un paréntesis, corchete y llave abierta en el
texto y sacando del tope de la pila (con la función pop) el paréntesis, corchete o llave
para compararlos y verificar así que este cerrado correctamente. Si no esta cerrado
correctamente se dice cual es el error y en que línea y columna esta el mismo.
El ciclo For esta dentro del ciclo While, ya que while presenta línea por línea; mientras
que el for carácter por carácter.
Al salirnos del for verificamos si quedo sin cerrar un paréntesis, corchete o llave y lo
mostramos por lo salida estándar.
CODIGO FUENTE DEL PROGRAMA:
TAREA2-JOSEGOMEZ.C
Descargar