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

[SOLUCIONADO] Problema con las variables en C

Estas en el tema de Problema con las variables en C en el foro de C/C++ en Foros del Web. Saludos, mi problema es con un programa en C que tiene que dar instrucciones a un motor a pasos para poder mover el alerón de ...
  #1 (permalink)  
Antiguo 24/09/2015, 02:04
 
Fecha de Ingreso: septiembre-2015
Mensajes: 3
Antigüedad: 8 años, 7 meses
Puntos: 0
Pregunta Problema con las variables en C

Saludos, mi problema es con un programa en C que tiene que dar instrucciones a un motor a pasos para poder mover el alerón de un avión, en realidad el programa ya lo tengo hecho y es el siguiente:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <conio.h>
  4.  
  5. int main()
  6. {
  7.     int opcion,p=1,px=0,x;
  8.     float ang=0;
  9.     reinstruccion:
  10.     printf("PROGRAMA PARA MOVER UN ALERON\n\n");
  11.     printf("Para elejir direcci%cn hacia arriba presiona 1.\n",162);
  12.     printf("Para elejir direcci%cn hacia abajo presiona 2.\n",162);
  13.     printf("Para salir del programa presiona 3.\n");
  14.     scanf("%i",&opcion);
  15.     switch(opcion)
  16.     {
  17.                   case 1:
  18.                   printf("¿Cu%cntos pasos muevo el aler%cn: \n",160,162);
  19.                   scanf("%i",&p);                        
  20.                   if(p<=25)
  21.                   {
  22.                         while(1){
  23.                   x=1; ang=ang+1.8; px=px+1;
  24.                   printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
  25.                   if(px>=p)break;
  26.                   x=2; ang=ang+1.8; px=px+1;
  27.                   printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
  28.                   if(px>=p)break;
  29.                   x=4; ang=ang+1.8; px=px+1;
  30.                   printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
  31.                   if(px>=p)break;
  32.                   x=8; ang=ang+1.8; px=px+1;
  33.                   printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
  34.                   if(px>=p)break;
  35.                   }
  36.                   }
  37.                   else
  38.                   {
  39.                          printf("No es un caso v%clido\n\n",160);
  40.                   }
  41.                   break;
  42.                   case 2: printf("¿Cu%cntos pasos muevo el aler%cn: \n",160,162);
  43.                   scanf("%i",&p);
  44.                   if(p<=25)
  45.                   {
  46.                            while(1){
  47.                   x=8; ang=ang+1.8; px=px+1;
  48.                   printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
  49.                   if(px>=p)break;
  50.                   x=4; ang=ang+1.8; px=px+1;
  51.                   printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
  52.                   if(px>=p)break;
  53.                   x=2; ang=ang+1.8; px=px+1;
  54.                   printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
  55.                   if(px>=p)break;
  56.                   x=1; ang=ang+1.8; px=px+1;
  57.                   printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
  58.                   if(px>=p)break;
  59.                   }
  60.                   }
  61.                   else
  62.                   {
  63.                       printf("No es un caso v%clido\n\n",160);
  64.                   }
  65.                   break;
  66.                   case 3:
  67.                        system("pause");
  68.                        exit (0);
  69.                   break;
  70.                   default: printf("No es un caso v%clido\n\n",160);
  71.     }
  72.     goto reinstruccion;
  73. }

Pero el problema surge cuando lo ejecuto, se supone que al ejecutarlo y dar la instrucción de cuantos pasos tiene que recorrer el motor, el programa tiene que sacar la secuencia de pasos que se le pidió, además del ángulo de movimiento y el número del dato enviado al puerto,y posteriormente al terminar la ejecución de las instrucciones tiene que permitirme volver a empezar el proceso y ejecutar las instrucciones desde cero como la primera vez. Lo últimono no sucede con mi programa, al ingresar las instrucciones la primera vez, el programa las ejecuta bien, pero al terminar esas instrucciones y volver a dar otras, el programa no las ejecuta desde cero, sigue la secuencia en donde se quedo la ejecución de las instrucciones anteriores. Mi profesor dijo algo de que tenía que reiniciar variables, pero no le entendí, por eso les pido de favor su ayuda para resolver el problema, se que es un programa muy sencillo, pero en realidad soy novato en tanto programación ya que lo que yo estudio es Ing. Aeroespacial, espero me puedan responder y gracias.

*Así es como se tiene que ejecutar el programa:


*Así se ejecuta el mío:


Por si no se ven las imágenes, el primer link es la ejecución correcta y el segundo es de la incorrecta:
https://onedrive.live.com/?id=E90264D6367A6D61%21730&cid=E90264D6367A6D61&gr oup=0&parId=root&authkey=%21AGNhDeGU0BMZapI&o=OneU p

https://onedrive.live.com/?id=E90264D6367A6D61%21731&cid=E90264D6367A6D61&gr oup=0&parId=root&authkey=%21AGNhDeGU0BMZapI&o=OneU p

Última edición por uriel_bla; 24/09/2015 a las 02:26
  #2 (permalink)  
Antiguo 24/09/2015, 04:57
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: Problema con las variables en C

Lo que evita que el programa funcione es que al volver a reinstruccion no vuelves a poner la variable que has creado para contar los pasos (px) a 0, sino que sigue contando.
  #3 (permalink)  
Antiguo 24/09/2015, 08:01
 
Fecha de Ingreso: septiembre-2015
Mensajes: 3
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Problema con las variables en C

Pero, ¿En dónde tengo que volver a poner la variable?
  #4 (permalink)  
Antiguo 24/09/2015, 08:24
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Problema con las variables en C

Cita:
Iniciado por uriel_bla Ver Mensaje
Pero, ¿En dónde tengo que volver a poner la variable?
No tienes que volver a ponerla... tienes que reiniciar su valor.

Para saber dónde tienes que realizar este tipo de tareas tienes que tener claro el comportamiento que esperas del programa para ver dónde empieza a dar problemas.

Te planteo el problema desde otra perspectiva: imagínate que estás dando vueltas a un circuito y quieres saber el tiempo que tardas en dar cada vuelta, ¿dónde reinicias el cronómetro? en mitad de la vuelta? en un punto aleatorio del circuito? al inicio de la vuelta?

Por otro lado, salvo que te lo pidan expresamente yo intentaría evitar a toda costa el uso de goto en los programas. Es mucho mejor usar un while, da menos problemas.
  #5 (permalink)  
Antiguo 24/09/2015, 10:05
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Problema con las variables en C

El goto hace que los códigos sean difíciles de seguir y en este caso que lo usas se puede cambiar sin problema por un bucle do...while o el que quieras.

Etiquetas: Ninguno
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 02:40.