milardovich

TP1 Sintaxis

Jul 3rd, 2012
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.99 KB | None | 0 0
  1. /*
  2. *   TP1 - Sintaxis y semántica de los lenguajes
  3. *   ----------------------------------------------------
  4. *   Autores     Lucrecia Peralta, Natalia Johansen,
  5. *           Fernando Uranga, Elias Martinez,
  6. *           Sergio Milardovich
  7. */
  8. #include <stdio.h>
  9. #include <conio.h>
  10. #include <string.h>
  11. #define C clrscr()
  12. #define F flushall()
  13.  
  14. void main()
  15. {
  16.     char ei, ef[8], ea, t[10][5], cad[20];
  17.     int opc,i,j,cont,f=0,k,l,co,ctrl=0, largo, posy, posx, opc2;
  18.  
  19.     /*----------------------------------------------------*\
  20.      * Construimos el menú de opciones           *
  21.     \*----------------------------------------------------*/
  22.    
  23.     do
  24.     {
  25.         C;
  26.         printf("TRABAJO PRACTICO\n\n\n");
  27.         printf("1. Ingreso de simbolos\n");
  28.         printf("2. Ingreso de estados\n");
  29.         printf("3. Completar la tabla\n");
  30.         printf("4. Evaluacion de cadenas\n");
  31.         printf("0. Salir\n");
  32.         printf("Su opcion es: ");
  33.         scanf("%d",&opc);
  34.  
  35.         switch (opc)
  36.         {
  37.             case 1: C;
  38.                   i=1;
  39.                   printf("Ingrese los simbolos, finaliza con 0\n");
  40.                   do
  41.                   {
  42.                     flushall();
  43.                     scanf("%c",&t[0][i]);
  44.                     i++;
  45.                   } while ((i<=3) && (t[0][i-1]!='0'));
  46.                   i--;
  47.                   if (t[0][i]=='0') i--;   // i es la cantidad de simbolos
  48.             break;
  49.  
  50.             case 2: C;
  51.                 j=1;
  52.                 printf("Ingrese los estados finaliza con 0\n");
  53.                 do{
  54.                     flushall();
  55.                     scanf("%c",&t[j][0]);
  56.                     j++;
  57.                 } while ((j<=8) && (t[j-1][0]!='0'));
  58.                 j--;
  59.                 if (t[j][0]=='0') j--;   // j es la cantidad de estados
  60.                 // Ingresamos el estado inicial
  61.                 do{
  62.                     C;
  63.                     printf("Ingrese estado inicial\n");
  64.                     flushall();
  65.                     ei=getche();
  66.                     ea=ei; // ea es el estado actual
  67.                     for(cont=1; cont<=j; cont++)
  68.                     if (ei==t[cont][0]) f=1;
  69.                     if (f!=1) printf("\nEl estado indicado no pertenece al conjunto de estados\n");
  70.                     getch();
  71.                 }while(f!=1);
  72.                 // Estados finales
  73.                 linea1:
  74.                     printf ("\nIngrese los estados finales,finaliza con 0\n");
  75.                     for (cont=0; cont<=6; cont++)
  76.                     {
  77.                         f=0;
  78.                         flushall();
  79.                         scanf("%c",&ef[cont]);
  80.                         if (ef[cont]!='0')
  81.                         {
  82.                             for(co=1; co<=j; co++)
  83.                                 if (ef[cont]==t[co][0]) f=1;
  84.                             if (f!=1)
  85.                             {
  86.                                 printf ("El estado indicado no pertenece al conjunto de estados\n");
  87.                                 cont--;
  88.                             } else ctrl=1;
  89.                         }
  90.                         else if (ctrl!=1)
  91.                         {
  92.                             printf ("Debe ingresar al menos un estado final\n");
  93.                             goto linea1;
  94.                         }
  95.                         else break;
  96.                     }
  97.             break;
  98.             case 3: C;
  99.                 for (k=1;k<=j;k++)   // Estados
  100.                 for (l=1;l<=i;l++)  //  Símbolos (aristas)
  101.                 {
  102.                     printf ("Ingrese estado al que se llega desde el nodo %c con la arista %c\n",t[k][0],t[0][l]);
  103.                     f=0;
  104.                     F;
  105.                     scanf (" %c",&t[k][l]);
  106.                     for (cont=1; cont<=j; cont++)
  107.                     if (t[k][l]==t[cont][0]) f=1;
  108.                     if (f!=1)
  109.                     {
  110.                         printf ("El estado indicado no pertenece al conjunto de estados\n");
  111.                         getch();
  112.                         l--;
  113.                     }
  114.                 }
  115.                 printf ("Finalizo\n");
  116.                 getch();
  117.             break;
  118.             case 4:
  119.                 linea3:
  120.                 C;
  121.                 printf("Ingrese cadena a evaluar\n");
  122.                 F;
  123.                 gets(cad);
  124.                 largo = strlen(cad);
  125.                 for (cont=0; cont<=(largo-1); cont++)
  126.                 {
  127.                     f=0;
  128.                     for (co=1; co<=i; co++)
  129.                     if (cad[cont]==t[0][co]) f=1;
  130.                     if (f!=1) {
  131.                         printf ("La cadena contiene simbolos que no pertenecen a la expresion\n");
  132.                         getch();
  133.                         goto linea2;
  134.                     } else
  135.                     {
  136.                         for (k=0; k<=i; k++)
  137.                         if (cad[cont]==t[0][k]) posx=k;
  138.                         for (k=0; k<=j; k++)
  139.                         if (ea==t[k][0]) posy=k;
  140.                     }
  141.                     ea=t[posy][posx];
  142.                 }
  143.                 f=0;
  144.                 // Nos fijamos si coincide ea con algún estado final
  145.                 for (cont=0;cont<=6;cont++)
  146.                 if (ea==ef[cont]) f=1;
  147.                 if (f==1)
  148.                 {
  149.                     printf ("La cadena pertenece al lenguaje\n");
  150.                 } else
  151.                 {
  152.                     printf ("La cadena no pertenece al lenguaje\n");
  153.                 }
  154.                 getch();
  155.                 linea2:
  156.                 C;
  157.                 printf ("1.Desea ingresar otra cadena\n2.Volver al menu\n");
  158.                 F;
  159.                 scanf("%d",&opc2);
  160.                 if (opc2==1) goto linea3;
  161.             break;
  162.             case 0: break;
  163.         }
  164.     } while (opc!=0);
  165. }
Advertisement
Add Comment
Please, Sign In to add comment