Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Compila pero no imprime

Estas en el tema de Compila pero no imprime en el foro de C/C++ en Foros del Web. hola buenas, necesito una ayudita con un programa, el programa hasta ahora esta hecho y les explico en que consiste es una maquina de estados ...
  #1 (permalink)  
Antiguo 30/11/2010, 14:57
Avatar de extremoo  
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 0
Exclamación Compila pero no imprime

hola buenas, necesito una ayudita con un programa, el programa hasta ahora esta hecho
y les explico en que consiste es una maquina de estados que busca la palagra god ingresada por teclado. ejemplo

"god is bad" se ingresa de teclado jajaja
la idea es que imprima el "is" me ubico en el arreglo hasta la "i" y luego voy guardando y luego imprimo hasta que encuentro el espacio.

EL PROBLEMA ES QUE COMPILA, pero en el 'case 4' me da la impresion tener el drama si alguien me puede ayudar seria genial

el codigo es el siguiente
Código C++:
Ver original
  1. #include<iostream>
  2. #include<string.h>
  3.  
  4. using namespace std;
  5.  
  6. int main (int argc, char *argv[])
  7. {
  8. int estado=0;
  9. int cont_numeros=0;
  10. char oracion[500];
  11.  
  12.  
  13. cin.getline(oracion,500);
  14. strlen(oracion);
  15.  
  16. for(int i=0; i<strlen(oracion); i++)
  17. {
  18.  switch(estado)
  19.  {
  20.    case 0:
  21.          if(oracion[i]==' ')
  22.          {
  23.          oracion[i]=oracion[i+1];
  24.          estado=1;
  25.          }        
  26.    case 1:
  27.          if(oracion[i] == 'g' || oracion[i] == 'G')
  28.          {
  29.          oracion[i]=oracion[i+1];
  30.          estado=2;
  31.          }
  32.    case 2:        
  33.          {
  34.          if(oracion[i] == 'o' || oracion[i] == 'O')  
  35.          oracion[i]=oracion[i+1];
  36.          estado=3;
  37.          }
  38.    case 3:        
  39.          {
  40.          if(oracion[i] == 'd' || oracion[i] == 'D')  
  41.          oracion[i]=oracion[i+1];
  42.          estado=4;
  43.          }
  44.    case 4:
  45.          if(oracion[i]==' ')
  46.          {
  47.          oracion[i]=oracion[i+1];
  48.          char aux[10];
  49.          for(int a=0; oracion[i] != ' ' ; a++)
  50.          {
  51.            int j;
  52.            j=0;
  53.            while(j<10)
  54.            {
  55.        oracion[i]=aux[j];
  56.            j++;
  57.            }
  58.          cout<<aux[j];
  59.          }
  60.          }
  61.   }
  62. }
  63.  
  64. return 0;
  65. }
  #2 (permalink)  
Antiguo 01/12/2010, 01:50
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Compila pero no imprime

No imprime porque no le has dicho que imprima. En el código que has posteado no veo ni un solo cout, ni printf, ni nada que se le parezca.

Otra cuestión es que en tu bloque switch debes finalizar cada case con un break. Si no, cuando termine con un case te va a ejecutar las sentencias del siguiente case.
  #3 (permalink)  
Antiguo 01/12/2010, 03:32
 
Fecha de Ingreso: noviembre-2010
Mensajes: 38
Antigüedad: 13 años, 5 meses
Puntos: 2
Respuesta: Compila pero no imprime

En el case 4 no entiendo que quieres hacer. Que no imprima es el menor de los problemas.

1. Tienes un bucle donde 'a' se incrementa hasta el infinito

for(int a=0; oracion[i] != ' ' ; a++)

Como no haces nada con la variable 'a' en el bucle, esa linea es idéntica a:

while(oracion[i] != ' ')

2. Sobreescribes el valor de oracion con una variable no inicializada (aux):

oracion[i]=aux[j];

3. Además, la máquina de estados no me parece que esté bien planteada. Imagina si tienes la frase "voy a jugar al golf y despues me comeré una hamburguesa".

Cuando encuentra la 'g' de la palabra golf pasa al estado 2, en el estado 2 pasa al 3 pues encuentra la 'o', al encontrar la 'l' debería resetear el estado, pero no lo hace, así que cuando llegue a la 'd' de 'despues me voy a comer un hamburguesa', el algoritmo habrá encontrado la palabra god. Cosa que no es cierta.

4. Lo que menciona Fw190 sobre la falta de breaks, no se si lo has hecho en forma intencional. Si no es así, no le veo la lógica a la linea:

oracion[i]=oracion[i+1];

Y hay más errores, yo en tu lugar volvería a empezar de cero.

Etiquetas: imprime
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:37.