Programación General > C/C++
Validar un Ciclo EJ: For
infonet:
Solucionado...
y Gracias por sus ayudas....
--- Código: C++ --- #include<stdio.h>#include<conio.h>#include<string.h>#include<stdlib.h>#include<ctype.h>#include <windows.h>#include <math.h>#include <dos.h> int Sigue,Tamano,Cont,PosIni,i,PosVec,j,PosParen,Error,CanTonk,Tamano2,k,Opcion;char string[150],CadenaLeida[150],Bloques[50][150],SiFor[150],Tokens[50][150],NuevaCadena[150];int pIni; int EsOperador(char QueAnalizar){if (QueAnalizar=='+') {return(1);} else if (QueAnalizar=='-') {return(1);} else if (QueAnalizar=='*') {return(1);} else if (QueAnalizar=='/') {return(1);} else if (QueAnalizar=='(') {return(2);} else if (QueAnalizar==')') {return(2);} else if (QueAnalizar=='[') {return(2);} else if (QueAnalizar==']') {return(2);} else if (QueAnalizar=='<') {return(3);} else if (QueAnalizar=='>') {return(3);} else if (QueAnalizar=='=') {return(3);} else if (QueAnalizar=='!') {return(3);} else {return(0);}} void EsFor(){printf("nntDigite la sentencia que desea evaluar: ");//Leer la cadena de caracteres que se va a evaluar.// scanf("%s",CadenaLeida);gets(string); printf("nCadena leida Completa: %s",string); int i; int j; for (i = j = 0; string[i] != ''; i++) if (string[i] != ' ') string[j++] = string[i]; string[j] = ''; printf("nCadena sin Espacios: %s", string);strcpy(CadenaLeida, string);//printf("n Cadena Final : %s ",CadenaLeida);//getche(); //Tomar el tama¤o de la cadena. Tamano=strlen(CadenaLeida); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Recorrer los caracteres de la cadena le¡da para reconocer si es una sentencia. //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ PosParen=0; for(i=0;i<=Tamano-1;i++) {//Si el caracter es un '('. if(CadenaLeida[i]=='(') {PosVec=0; for(j=0;j<=i-1;j++) {SiFor[PosVec]=CadenaLeida[j]; PosVec=PosVec+1; } PosParen=i; break; } } //------------------------------------------------------------------------------- //Si se han producido errores. if(PosParen!=3) {printf("ntLa cadena digitada no cumple con la s¡ntaxis de la intrucci¢n FOR"); printf("ntError: %s", SiFor); } else if (strcmp(SiFor,"for")!=0) {printf("ntLa cadena digitada no cumple con la s¡ntaxis de la intrucci¢n FOR"); printf("ntError: %s", SiFor); } else if (CadenaLeida[Tamano-1]!=')') {printf("ntLa cadena digitada no cumple con la s¡ntaxis de la intrucci¢n FOR"); printf("ntError: %c falta par‚ntesis de cierre final", CadenaLeida[Tamano-1]); } else {Cont=0; PosIni=4; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Recorrer los car cteres de la cadena le¡da para reconocer los bloques del for. //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ for(i=4;i<=Tamano-2;i++) {//Si el caracter es un ';' if(CadenaLeida[i]==';') {PosVec=0; //Guardar parte de la cadena en otra variable. for(j=PosIni;j<=i;j++) {Bloques[Cont][PosVec]=CadenaLeida[j]; PosVec=PosVec+1; } Cont=Cont+1; PosIni=i+1; } } //Guardar parte de la cadena en otra variable. PosVec=0; for(j=PosIni;j<=Tamano-2;j++) {Bloques[Cont][PosVec]=CadenaLeida[j]; PosVec=PosVec+1; } //--------------------------------------------------------------------------- //Si se han producido errores. if (Cont<2) {printf("ntLa cadena digitada no cumple con la s¡ntaxis de la intrucci¢n for"); printf("ntError: faltan bloques del for 'for([init-expr];[cond-expr];[loop-expr])'"); } else if (Cont!=2) {printf("ntLa cadena digitada no cumple con la s¡ntaxis de la intrucci¢n for"); printf("ntError: hay mas de 3 bloques para el for 'for([init-expr];[cond-expr];[loop-expr])'"); } else {//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //Identificar los tokens existentes dentro de los bloques del for. //Almacenar los primero Tokens. strcpy(Tokens[0],SiFor); Tokens[1][0]=CadenaLeida[3]; CanTonk=1; //Recorrer todos los Bloques. for(i=0;i<=Cont;i++) {//Limpiar la variable NuevaCadena. PosVec=0; for(k=0;k<=149;k++) {NuevaCadena[k]=0;} //Tomar el tamano del bloque actual. Tamano2=strlen(Bloques[i])-1; //Buscar los Tokens del Bloque Actual. for(j=0;j<=Tamano2;j++) {if(EsOperador(Bloques[i][j])==0 && Bloques[i][j]!=';') {NuevaCadena[PosVec]=Bloques[i][j]; PosVec=PosVec+1; } else {if (strlen(NuevaCadena)!=0) {CanTonk=CanTonk+1; for(k=0;k<=PosVec;k++) {Tokens[CanTonk][k]=NuevaCadena[k];} //Limpiar la variable NuevaCadena. PosVec=0; for(k=0;k<=149;k++) {NuevaCadena[k]=0;} } CanTonk=CanTonk+1; Tokens[CanTonk][0]=Bloques[i][j]; } } } if (strlen(NuevaCadena)!=0) {CanTonk=CanTonk+1; for(k=0;k<=PosVec;k++) {Tokens[CanTonk][k]=NuevaCadena[k];} //Limpiar la variable NuevaCadena. PosVec=0; for(k=0;k<=149;k++) {NuevaCadena[k]=0;} } CanTonk=CanTonk+1; Tokens[CanTonk][0]=41; //Ascii=')' //--------------------------------------------------------------- printf("nntNUMERO IDENTIFICADOS"); for(i=0;i<=CanTonk;i++) {if (strlen(Tokens[i])>0) {printf("nt%dt%s",i+1,Tokens[i]);} else {printf("nt%dt%c",i+1,Tokens[i]);} {printf("ttOK VALIDADO..!!!");} } } }} main(){Sigue=0; do { system("cls");// clrscr(); printf("nntttPROGRAMA QUE VALIDA"); printf("nntttCICLO FORnn"); printf("nnttt1.ANALIZAR CICLO FORnnn"); printf("nntttDIGITE OPCION: "); scanf("%d", &Opcion);// flushall();fflush(stdin); for(i=0;i<=149;i++) {CadenaLeida[i]=0; SiFor[i]=0; }// for(i=0;i<=49;i++)// {for(j=0;j<=149;j++)// {Bloques[i][j]=0;// Tokens[i][j]=0;// }// } if(Opcion==1) {EsFor(); printf("nnntEJECUTA EL PROGRAMA NUEVAMENTE?? [SI=1][NO=0]: "); scanf("%d",&Sigue); } else {printf("nnError digite una opci¢n valida.");} }while(Sigue!=0);}
Navegación
[*] Página Anterior
Ir a la versión completa