Programación General > C/C++

 Validar un Ciclo EJ: For

<< < (2/2)

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

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa