Programación General > C/C++

 Como Valido un Ciclo???

(1/1)

infonet:
Estimados tengo la dura tare de Validar en C++ con DEV C++ el Cliclo For y tengo una vaga ide, plis si me pueden apoyar gracias

les adjunto el codigo realizado hasta el momento

Por ejemplo que me valide esta instruccion:

for(x=1;x<=10;x=x+1)



--- Código: C++ --- #include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#include <windows.h> #include <math.h> void gotoxy(short x, short y) { HANDLE hConsoleOutput; COORD Cursor_Pos = {x, y};hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hConsoleOutput, Cursor_Pos); }  void carga_caracteres(){ int i  ;    char car_mayusculas[100]; char car_minusculas[100]; char car_letras[100];   // for ( i=65; 90; i++);  // mayusculas//  car_mayusculas[i]=i; // for (i=97; 122; i++);  // minusculas//  car_minusculas[i]=i; //return;  }   void  est_exit(int num){ switch(num)   {     case 0 :gotoxy(10,10);printf("Debe ingresar una f, en la primera posicion ");break;     case 1 :gotoxy(10,11);printf("Debe ingresar una o, en la segunda posicion");break;     case 1 :gotoxy(10,12);printf("Debe ingresar una r, en la tercera posicion");break;     case 2 :gotoxy(10,13);printf("Debe ingresar parentecis (");break;     case 3 :gotoxy(10,14);printf("Debe ingresar parentecis )");break;     case 4 :gotoxy(10,15);printf("Debe ingresar un blanco");break;     case 5 :gotoxy(10,16);printf("Debe ingresar una condición");break;     case 6 :gotoxy(10,17);printf("Debe ingresar una una llave {");break;     case 7 :gotoxy(10,18);printf("Debe ingresar una una llave }");break;} getch();}      main(){char sentencia [100];int n;int i;int cont=0;char validos[11]; validos[0]='('; validos[1]=')'; validos[2]='{'; validos[3]='}'; validos[4]='<'; validos[5]='>'; validos[6]='='; validos[7]='!'; validos[8]='&'; validos[9]='|'; validos[10]=char(32);        system("cls");                  gotoxy(5,5);printf(" Ingrese sentencia--> ");scanf("%s",sentencia);            n=strlen(sentencia);            i=0;      //      do {          if (sentencia[i] != 'f')             est_exit(i);          else            {                        i=i+1;              if (sentencia[i]!= 'o')                  est_exit(i);              else                 {                        i=i+1;              if (sentencia[i]!= 'r')                  est_exit(i);              else             {                i=i+1;                printf("%d",i);                if ( sentencia[i] !=  ' ' )                   est_exit(4);                else;                  do {                     cont=cont+1;                     i=i+1;                    } while ( sentencia[i]= '(') ;                }                 }                 //         } while ( i != n);                    }   

infonet:
También estaba pensando en dejar en una variable el largo de la sentencia y con  otro for validar…
Que Opinan

infonet:
LISTO.

--- Código: C++ ---  int Sigue,Tamano,Cont,PosIni,i,PosVec,j,PosParen,Error,CanTonk,Tamano2,k,Opcion;char CadenaLeida[150],Bloques[50][150],SiFor[150],Tokens[50][150],NuevaCadena[150];int pIni;char wh[10],od[10]; 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: "); scanf("%s",CadenaLeida);  Tamano=strlen(CadenaLeida); PosParen=0; for(i=0;i<=Tamano-1;i++) {  if(CadenaLeida[i]=='(')  {PosVec=0;   for(j=0;j<=i-1;j++)   {SiFor[PosVec]=CadenaLeida[j];    PosVec=PosVec+1;   }   PosParen=i;   break;  } } if(PosParen!=3) {printf("ntLA SENTENCIA DIGITADANO NO CUMPLE CON LA SINTAXIS DEL FOR");  printf("ntERROR: %s", SiFor); } else   if(strcmp(SiFor,"for")!=0 && strcmp(SiFor,"For")!=0 && strcmp(SiFor,"FOR")!=0)  {printf("ntLA SENTENCIA DIGITADANO NO CUMPLE CON LA SINTAXIS DEL FOR");  printf("ntERROR: %s", SiFor); } else if (CadenaLeida[Tamano-1]!=')') {printf("ntLA SENTENCIA DIGITADANO CUMPLE CON LA SINTAXIS DEL FOR");  printf("ntERROR: %c FALTA PARENTESIS DE CIERRE FINAL", CadenaLeida[Tamano-1]); } else {Cont=0;  PosIni=4;  for(i=4;i<=Tamano-2;i++)  {   if(CadenaLeida[i]==';')   {PosVec=0;    for(j=PosIni;j<=i;j++)    {Bloques[Cont][PosVec]=CadenaLeida[j];     PosVec=PosVec+1;    }    Cont=Cont+1;    PosIni=i+1;   }  }   PosVec=0;  for(j=PosIni;j<=Tamano-2;j++)  {Bloques[Cont][PosVec]=CadenaLeida[j];   PosVec=PosVec+1;  }  if (Cont<2)  {printf("ntLA SENTENCIA DIGITADANO CUMPLE CON LA SINTAXIS DEL FOR");   printf("ntERROR: FALTAN BLOQUES DEL FOR 'for([init-expr];[cond-expr];[loop-expr])'");  }  else if (Cont!=2)  {printf("ntLA SENTENCIA DIGITADANO CUMPLE CON LA SINTAXIS DEL FOR");   printf("ntERROR: HAY 3 BLOQUES PARA EL FOR 'for([init-expr];[cond-expr];[loop-expr])'");  }  else  {   strcpy(Tokens[0],SiFor);   Tokens[1][0]=CadenaLeida[3];   CanTonk=1;     for(i=0;i<=Cont;i++)   {    PosVec=0;    for(k=0;k<=149;k++)    {NuevaCadena[k]=0;}    Tamano2=strlen(Bloques[i])-1;     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];}             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];}    PosVec=0;    for(k=0;k<=149;k++)    {NuevaCadena[k]=0;}   }   CanTonk=CanTonk+1;   Tokens[CanTonk][0]=41; //Ascii=')'   printf("nntTOKENS 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("ttTOKENS OK VALIDADO..!!!");}    }   }  }}main(){Sigue=0; do {   system("cls");  printf("nnttttPROGRAMA    QUE    VALIDA");  printf("nntttttCICLO FORnn");  printf("nnttt1. ANALIZAR CICLO FORnnn");  printf("nnttttDIGITE OPCION: ");  scanf("%d", &Opcion);  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("nnERROE DIGITE UNA OPCION VALIDA.");} }while(Sigue!=0);}  

ocelot_76:
Tengo una duda a que te refieres con validar si te refieres a lo k imagino k es simplemente k kon otros metodos justifikar k un bucle for funciona, yo kreo k lo mas sencillo es acerlo kon la recursividad de funciones, tan facil como llamar una funcion el numero de vezes k es el bucle for i en cada llamada incrementar ese contador

Salu2

El conozimiento es poder el poder es superioridad

OuGi

Navegación

[0] Índice de Mensajes

Ir a la versión completa