Glaas2

"mini comp"

Oct 7th, 2012
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.50 KB | None | 0 0
  1. #include <stdio.h> // Guerra Esquivel Angel 1CM14
  2. #include <string.h>// Glaas2
  3. #include "Pila.h"
  4. int main(int argc, char *argv[])
  5. {
  6.   //************DECLARACIONES E INICIALIZACIONES***************  
  7.   FILE *archivo; // Apuntador al ARCHIVO a leer
  8.   char ruta[100]; // CADENA que guarda la ruta del ARCHIVO
  9.   char c; // CARACTER donde se guardarán los caracteres del ARCHIVO
  10.   int linea=1;  // ENTERO que guardará el número de líneas del archivo
  11.   pila stack=NULL; // Inicialización de la PILA a usar
  12.   nodo aux;
  13.  
  14.   INIT(&stack);
  15.  
  16.   printf("\nIntroduzca nombre y ruta del archivo: "); // Se recibe la RUTA del ARCHIVO
  17.   fflush(stdin);
  18.   gets(ruta);
  19.  
  20.   archivo=fopen(ruta, "r+"); // Se abre el ARCHIVO en la RUTA especificada
  21.   if((archivo=fopen(ruta, "r+"))==NULL)
  22.      {
  23.      fprintf(stderr, "\nError al abrir el archivo.\n");  
  24.      exit(1);
  25.      }
  26.   else
  27.      printf("\nOK %s abierto correctamente.\n\n", ruta);  
  28.      
  29.   c=fgetc(archivo); // c=primer caracter del archivo
  30.   while (c != EOF) // Mientras el caracter sea distinto del fin del archivo
  31.    {    
  32.      switch(c)
  33.       {
  34.             case '{':case '[':case '(': // Si encuentra una llave abierta asigna el valor de la llave al nodo asi como
  35.                  aux.ll=c;              // la linea en la que se encuentra y la mente a la PILA
  36.                  aux.line=linea;
  37.                  PUSH(&stack, aux);                
  38.                  break;
  39.                  
  40.                  
  41.             case '}':case ']':case ')':// Si encuentra una llave cerrada
  42.                  if(EMPTY(stack)) // Si la PILA está vacia en este momento, significa que no están balanceadas las llaves
  43.                  {
  44.                   printf("\nERROR en linea %d: %c jamas abierto.", linea, c); // Indica que falta el complemento del caracter, como "{[("
  45.                   break;
  46.                   }
  47.                  
  48.                  aux=POP(&stack); // Se recupera el valor del primer elemento en la PILA y se asigna a "aux"
  49.                  if(c==')' && aux.ll== '(')// Se compara que el elemento sacado de la PILA sea igual al caracter leído en el momento, si no es
  50.                   printf("\r");            // igual, vuelve a meter al elemento en la PILA
  51.                   else
  52.                  if(c==']' && aux.ll== '[')
  53.                   printf("\r");
  54.                   else
  55.                  if(c=='}' && aux.ll== '{')
  56.                   printf("\r");
  57.                  else
  58.                  {             // Si no se cumplen las condiciones significa error
  59.                   aux.line=linea;
  60.                   PUSH(&stack, aux);
  61.                   printf("\nERROR en linea %d: %c jamas abierto.", linea, c);
  62.                   }
  63.                  break;    
  64.                  
  65.                  
  66.             case '\n': // Aumenta el numero de linea cada que encuentra un salto en el archivo
  67.                  linea=linea+1;
  68.       }
  69.     c=fgetc(archivo);
  70.    }
  71.    
  72. if(EMPTY(stack))// Si en este momento, despues de leer el archivo, la PILA está vacía todo está correcto
  73.   printf("\nLos parentesis, corchetes y las llaves estan balanceados.\n");
  74.  
  75. while(!EMPTY(stack)) // En caso contrario, mientras la PILA no esté vacía imprime los NODOS guardados en la PILA, ya que no están balanceados
  76. {
  77.   aux=POP(&stack);
  78.   printf("\nERROR en linea %d: %c jamas cerrado.", aux.line, aux.ll);
  79. }
  80.  printf("\n\nNumero de lineas = %d.\n\n", linea--); // Número de lineas totales
  81.  fclose(archivo); // Cierre del ARCHIVO
  82.  system("PAUSE");  
  83.  return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment