• Martes 12 de Noviembre de 2024, 21:01

Autor Tema:  Ruego su apollo con este codigo  (Leído 2596 veces)

caballo

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Ruego su apollo con este codigo
« en: Miércoles 27 de Octubre de 2010, 03:09 »
0
Hola, tengo que entregar un scanner sobre un autamata en C++, el problema por el cual estoy recurriendo a ustedes es el siguiente, quiero decirle a C++ atraves de un switch que elija del todas las letras del abcedario la coa rorresponda cuando lea el automata este es parte del codigo que estoy utilizando

Citar
case 'a' ... 'z':         /* es aqui donde no me reconoce poniendolo de esta manera y no se porque no lo reconoce ya que el ingeniero nos dio un ejemplo y a el de el si corre en Dev C++ pero el lo quiere en Borland, estoy usando Borland 5.02.
Espero su amable ayuda*/

                                  agregarLexema(lexema,z);
                                  z==fgetc(arch);
                                  estado=1;
                                  token=comando;
                             break;
                             case '(':
                             case ',':
                             case ')':
                                  agregarLexema(lexema,z);
                                  estado=2;
                                  switch(z){
                                       case '(':
                                            token=parA;
                                       break;
                                       case ',':
                                            token=coma;
                                       break;
                                       case ')':
                                            token=parC;
                                       break;
                                  };
                                  z==fgetc(arch);
                                  break;

alb

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Ruego su apollo con este codigo
« Respuesta #1 en: Viernes 29 de Octubre de 2010, 14:00 »
0
Holà,
No es possible utilizar un case VAL_1 ... VAL_Ultimo. Debes o separarlo en tanto casos :
Código: C++
  1. case 'a':
  2. case 'b':
  3. case 'c':
  4. etc...
  5.  
pero est bastande fastidioso. Puedes utilizar std::isalpha de <cctype> (http://www.cplusplus.com/reference/clibrary/cctype/) que salé differente de 0 si le das una lettra ('a' o 'A') :
Código: C++
  1. if(std::isalpha(letra)!=0)
  2. {
  3.    // do_it
  4. }
  5. else{// letra no es ['a'-'z'] ni ['A'-'Z']
  6. }
  7.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Ruego su apollo con este codigo
« Respuesta #2 en: Viernes 29 de Octubre de 2010, 14:03 »
0
En su caso creo que islower es más adecuado ya que sólo busca las letras minúsculas según su ejemplo.

Saludos

alb

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Ruego su apollo con este codigo
« Respuesta #3 en: Viernes 29 de Octubre de 2010, 14:12 »
0
Cita de: "m0skit0"
En su caso creo que islower es más adecuado ya que sólo busca las letras minúsculas según su ejemplo.
Si. La idea es de mirar en cctype cual es la que le arregle lo mas.

caballo

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Ruego su apollo con este codigo
« Respuesta #4 en: Domingo 31 de Octubre de 2010, 03:45 »
0
Gracias por sus respuestas, la opcion de cctype es para diferenciar entre mayusculas y minusculas pero en realidad lo que necesitaba saber era si se podia expresar en borland el caracter o numero inicial y luego el final asi
Citar
'a'...'z'
ó
Citar
0...9
pero en borland no se puede, en donde si se puede es en Dev C++ pero el ingeniero lo quiere en Borland asi que tube que espresar un case por caracter
 
Citar
case 'a':
case 'b':
case 'c':
case 'd':
etc.

Gracias por sus respuestas, les cuento que ya tengo la mitad del proyecto que es un scanner y me falta programar tres automatas para que me dibuje objetos en pantalla
Citar
Linea(x,y,x2,y2)
rectangle(x,y,x2,y2)
circle(x,y,r)
 

marco18340

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Ruego su apollo con este codigo
« Respuesta #5 en: Jueves 4 de Noviembre de 2010, 17:06 »
0
Si que es un dolor de cabeza la estructuracion de este codigo, por si alcazo ya finalizaste el proyecto, te cuento que estoy en la misma situacion, necesito entregar un proyecto parecido, me gustaria compartieras tu proyecto, buena onda, por si te nace rolar el codigo cuate, mi correo es obdulio.08@hotmail.com

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Ruego su apollo con este codigo
« Respuesta #6 en: Viernes 5 de Noviembre de 2010, 06:51 »
0
Buenas, si tenes un unico token de letras, podes hacer lo siguiente:


Código: C
  1.  
  2. switch(z){
  3.   case '(':
  4.     token=parA;
  5.     break;
  6.   case ',':
  7.     token=coma;
  8.     break;
  9.   case ')':
  10.     token=parC;
  11.     break;
  12.   default:
  13.     if(('a' <= z) && (z <= 'z')
  14.       token=letra;
  15.     break;
  16. };
  17.  
  18.  

Saludos
The sweet smell of a great sorrow lies over the land.


marco18340

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Ruego su apollo con este codigo
« Respuesta #7 en: Viernes 5 de Noviembre de 2010, 22:54 »
0
como ago en borland C ++ para que la pantalla al final de mi programa se detenga asi como un delay ?

es hablando del mismo proyecto.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Ruego su apollo con este codigo
« Respuesta #8 en: Sábado 6 de Noviembre de 2010, 01:03 »
0
Código: C
  1. system("pause");
  2.  

marco18340

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Ruego su apollo con este codigo
« Respuesta #9 en: Sábado 6 de Noviembre de 2010, 09:13 »
0
Con el mismo problema, intenete correr este codigo, pero me da dos errores, alguien que pueda visualizar el error, agradeseria su valiosa ayuda, el error me lo tira en la parte que esta en rojo.....     el objetivo de este codigo es que a travez de un scaner.h que llama a un txt..... me dibuje un circulo, triangulo, linea...
gracias......


#include "scanner.h"
#include <stdlib.h>
#include <dos.h>
#include <graphics.h>
#include <conio.h>  //

int main(int argc, char *argv[])
{
    scanner s;
    char lexema[250];
    int token;
    int estado;
    int var1, var2, var3, var4;
    char comando[250]="";

    s.abrirArchivo("test.txt");
    token=0;
    while (token!=error){
         token=s.getToken(lexema);
         cout<<lexema;
         cout<<" -> "<<token<<"n";
    scanner s;

        token=s.getToken(lexema);
        estado=0;

        while (token !=error) {
         switch (estado) {
            case '0':

                     { if (stremp (lexema,"line")  { estado=1; token=gettoken(lexema));
                      }
                 else { if (stremp (lexema,"rectangle") { estado=2; );
                 else { if (stremp (lexema,"circle") { estado= 3; );

         };
         };
         };

            break; //estado
       case '1':
            if token=parabre{
                estado=2
                token=getToken};
             else { token=error };
       break;

       case '2':
               if (token=numero) {circle(var1, var2, var3);
                   estado=3
                   var1=atoi(lexema);
               };
               else { token=error

               if  variableComando"line"
                    line(var1,var2,var3,var4);

               else { if
                        rectangle(var1,var2,var3,var4);

               else { if
                         circle(var2,var3,var4);

 };
 };
 };
 };
 };
 };
 };
 };
 };

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Ruego su apollo con este codigo
« Respuesta #10 en: Domingo 7 de Noviembre de 2010, 01:37 »
0
Con stremp creo que te refieres a strcmp.