Validacion de cadenas C++

Iniciado por Gabiita, 6 Septiembre 2010, 08:58 AM

0 Miembros y 1 Visitante están viendo este tema.

Gabiita

HOLA!! UNA DUDITA DE NUEVO JEJEJE, stoy trabajando en Borland C++ y me han dejado un proyecto en la clase de Lenguajes formales y automatas, se trata de hacer una automata finito que valide una URL, desde http://www.hola.com.gt/cosa.html y asi cuantos ficheros desee, pues ya hice el diagrama de transiciones y los analizadores lexicos, pero sorpresa! hay que hacer un programa a nivel de consola :S y pues no se que me pueden recomendar hacer???

Pensaba algo asi como que ingrese la cadena, y por partes ir evaluando, pero no se si tienen otra buena idea???

Tambien tengo que dibujar el enoooorme diagrama de transiciones a nivel de consola, no graphics :(:(:(:( ideas? gotoxy creo que seria cansado :S o algo con graphics pero que se vea como consolita XD JEJEJEJE

Espero puedan darme sugerencias y consejos :) ;-)
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no"
— Albert Einstein

Littlehorse

Hola Gabi  :D.

Para la validación, lamentablemente no te queda otra que recorrer la cadena verificando si corresponde con los esquemas aceptados para el ingreso de la URL, que pueden ser uno u varios (www., http://, http://www etc).

Para lo de los gráficos, te dieron una gama de opciones o simplemente te dijeron que no uses graphics?
Igualmente supongo yo que la idea es hacerlo a mano, porque si no, no tiene sentido que te digan que no uses graphics si todavía no se despegaron de Borland!

Besos!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

SirLanceCC

#2
una opción medio fácil de realizar para convertir un autómata a programa es más o menos así en pseudoc:


i=0;
estado = 1;

while(cadena[i] != 0){
 if(estado == 1){
   if(cadena[i] == 'h') estado = 2;
   else if(cadena[i] == 'w') estado = 1;
   ...
   else ERROR();
 }
 if(estado == 2){
   ...
 }
 ...

 i++;
}


Después de ese ciclo solo haces un if para ver que el estado en que se terminó es un estado de aceptación. ERROR() puede ser un simple break.

Para simplificar las cosas puedes pasar todo a minúsculas primero y puedes quitar algunas cosas de tu analisis si lo deseas, por ejemplo el http:// lo puedes verificar con alguna función de string.h y empezar con i=7.

Edito:
Este código representaría un autómata donde q1 es el estado inicial. Desde el estado q1 si se lee una h se va al estado q2, y si se lee una w se queda en el estado q1...

Gabiita

SirLanceCC MIL GRACIAS POR TU RECOMENDACIÓN!! Había olvidado algo tan importante de un autómata, trabajar en C por estados!! Sabes también hay otro detalle que nos pasaron hoy en la clase, como hay que generar la tabla de transiciones, como me recomendarias armarla? con una matriz dependiendo de los stados verdad? y cuando hay error en algún estado hay que marcar la conexion fila/columna de la tabla de trasiciones en el estado en el que ocurrio el error..  :-\

Ahora si todo sale bien pues, imprime la tabla y el diagrama! pero mi diagrama tiene casi 30 stados! :S Dioos XD

Espero ideas! y muchas gracias por tu ayudaaaaaaaaaaa!

Littlehorse! ya no te eh visto por mi msn XD jejejee, que stes bien!!!  :-*

y sí verdad? creo que es a pura posicion como tendré que dibujar :S me recomiendas algo?
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no"
— Albert Einstein