Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * TP1 - Sintaxis y semántica de los lenguajes
- * ----------------------------------------------------
- * Autores Lucrecia Peralta, Natalia Johansen,
- * Fernando Uranga, Elias Martinez,
- * Sergio Milardovich
- */
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- #define C clrscr()
- #define F flushall()
- void main()
- {
- char ei, ef[8], ea, t[10][5], cad[20];
- int opc,i,j,cont,f=0,k,l,co,ctrl=0, largo, posy, posx, opc2;
- /*----------------------------------------------------*\
- * Construimos el menú de opciones *
- \*----------------------------------------------------*/
- do
- {
- C;
- printf("TRABAJO PRACTICO\n\n\n");
- printf("1. Ingreso de simbolos\n");
- printf("2. Ingreso de estados\n");
- printf("3. Completar la tabla\n");
- printf("4. Evaluacion de cadenas\n");
- printf("0. Salir\n");
- printf("Su opcion es: ");
- scanf("%d",&opc);
- switch (opc)
- {
- case 1: C;
- i=1;
- printf("Ingrese los simbolos, finaliza con 0\n");
- do
- {
- flushall();
- scanf("%c",&t[0][i]);
- i++;
- } while ((i<=3) && (t[0][i-1]!='0'));
- i--;
- if (t[0][i]=='0') i--; // i es la cantidad de simbolos
- break;
- case 2: C;
- j=1;
- printf("Ingrese los estados finaliza con 0\n");
- do{
- flushall();
- scanf("%c",&t[j][0]);
- j++;
- } while ((j<=8) && (t[j-1][0]!='0'));
- j--;
- if (t[j][0]=='0') j--; // j es la cantidad de estados
- // Ingresamos el estado inicial
- do{
- C;
- printf("Ingrese estado inicial\n");
- flushall();
- ei=getche();
- ea=ei; // ea es el estado actual
- for(cont=1; cont<=j; cont++)
- if (ei==t[cont][0]) f=1;
- if (f!=1) printf("\nEl estado indicado no pertenece al conjunto de estados\n");
- getch();
- }while(f!=1);
- // Estados finales
- linea1:
- printf ("\nIngrese los estados finales,finaliza con 0\n");
- for (cont=0; cont<=6; cont++)
- {
- f=0;
- flushall();
- scanf("%c",&ef[cont]);
- if (ef[cont]!='0')
- {
- for(co=1; co<=j; co++)
- if (ef[cont]==t[co][0]) f=1;
- if (f!=1)
- {
- printf ("El estado indicado no pertenece al conjunto de estados\n");
- cont--;
- } else ctrl=1;
- }
- else if (ctrl!=1)
- {
- printf ("Debe ingresar al menos un estado final\n");
- goto linea1;
- }
- else break;
- }
- break;
- case 3: C;
- for (k=1;k<=j;k++) // Estados
- for (l=1;l<=i;l++) // Símbolos (aristas)
- {
- printf ("Ingrese estado al que se llega desde el nodo %c con la arista %c\n",t[k][0],t[0][l]);
- f=0;
- F;
- scanf (" %c",&t[k][l]);
- for (cont=1; cont<=j; cont++)
- if (t[k][l]==t[cont][0]) f=1;
- if (f!=1)
- {
- printf ("El estado indicado no pertenece al conjunto de estados\n");
- getch();
- l--;
- }
- }
- printf ("Finalizo\n");
- getch();
- break;
- case 4:
- linea3:
- C;
- printf("Ingrese cadena a evaluar\n");
- F;
- gets(cad);
- largo = strlen(cad);
- for (cont=0; cont<=(largo-1); cont++)
- {
- f=0;
- for (co=1; co<=i; co++)
- if (cad[cont]==t[0][co]) f=1;
- if (f!=1) {
- printf ("La cadena contiene simbolos que no pertenecen a la expresion\n");
- getch();
- goto linea2;
- } else
- {
- for (k=0; k<=i; k++)
- if (cad[cont]==t[0][k]) posx=k;
- for (k=0; k<=j; k++)
- if (ea==t[k][0]) posy=k;
- }
- ea=t[posy][posx];
- }
- f=0;
- // Nos fijamos si coincide ea con algún estado final
- for (cont=0;cont<=6;cont++)
- if (ea==ef[cont]) f=1;
- if (f==1)
- {
- printf ("La cadena pertenece al lenguaje\n");
- } else
- {
- printf ("La cadena no pertenece al lenguaje\n");
- }
- getch();
- linea2:
- C;
- printf ("1.Desea ingresar otra cadena\n2.Volver al menu\n");
- F;
- scanf("%d",&opc2);
- if (opc2==1) goto linea3;
- break;
- case 0: break;
- }
- } while (opc!=0);
- }
Advertisement
Add Comment
Please, Sign In to add comment