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
Ir a la versión completa