SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: caballo en Miércoles 27 de Octubre de 2010, 03:09

Título: Ruego su apollo con este codigo
Publicado por: caballo en Miércoles 27 de Octubre de 2010, 03:09
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;
Título: Re: Ruego su apollo con este codigo
Publicado por: alb en Viernes 29 de Octubre de 2010, 14:00
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.  
Título: Re: Ruego su apollo con este codigo
Publicado por: m0skit0 en Viernes 29 de Octubre de 2010, 14:03
En su caso creo que islower (http://www.cplusplus.com/reference/clibrary/cctype/islower/) es más adecuado ya que sólo busca las letras minúsculas según su ejemplo.

Saludos
Título: Re: Ruego su apollo con este codigo
Publicado por: alb en Viernes 29 de Octubre de 2010, 14:12
Cita de: "m0skit0"
En su caso creo que islower (http://www.cplusplus.com/reference/clibrary/cctype/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.
Título: Re: Ruego su apollo con este codigo
Publicado por: caballo en Domingo 31 de Octubre de 2010, 03:45
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)
 
Título: Re: Ruego su apollo con este codigo
Publicado por: marco18340 en Jueves 4 de Noviembre de 2010, 17:06
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
Título: Re: Ruego su apollo con este codigo
Publicado por: Epa en Viernes 5 de Noviembre de 2010, 06:51
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
Título: Re: Ruego su apollo con este codigo
Publicado por: marco18340 en Viernes 5 de Noviembre de 2010, 22:54
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.
Título: Re: Ruego su apollo con este codigo
Publicado por: m0skit0 en Sábado 6 de Noviembre de 2010, 01:03
Código: C
  1. system("pause");
  2.  
Título: Re: Ruego su apollo con este codigo
Publicado por: marco18340 en Sábado 6 de Noviembre de 2010, 09:13
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);

 };
 };
 };
 };
 };
 };
 };
 };
 };
Título: Re: Ruego su apollo con este codigo
Publicado por: m0skit0 en Domingo 7 de Noviembre de 2010, 01:37
Con stremp creo que te refieres a strcmp.