Ejercicio de Un motor C++

Iniciado por alfremos, 5 Mayo 2013, 07:01 AM

0 Miembros y 2 Visitantes están viendo este tema.

alfremos

Necesito ayuda con este ejercicio. Tengo que hacer un arranque de un motor en estrella triangulo. Las condiciones son: que el programa solo se ejecute cuando se le presiones una tecla (en este caso pensé en colocarle una especie de menú, tome uno que vi por aquí pero el problema es que cuando ingreso una letra el programa se queda como pegado) luego que el usuario ingrese la letra solo tiene que dar un mensaje como "se arrancó el motor en estrella" luego de esto tiene que haber un contador el cual debe marcar en pantalla unos 5 Seg y luego mostrar el mensaje "el motor paso a triangulo" la única idea que tengo hasta ahora es esta:

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int fin = 0;
   int opcion;

   while (fin == 0)
      {
      system("cls");
      printf("Menú de Arranque\n\n");

      printf("\t1] Arrancar motor.\n");
      printf("\t2] Ayuda.\n");
      printf("\t3] Salir.\n");

      printf("\n\n Opción= ");
      scanf("%i", &opcion);

      switch(opcion)
         {
            case 1:
               fin = 1;
         printf("El Motor Arranca en Estrella.\n");
               break;
            case 2:
               fin = 1;
            printf("Para Arrancar El Motor Ingrese El Numero 1.\n");
               break;
            case 3:
               fin = 1;
               /* No se comando pueda colocar para salir */
               break;

            default:
               fin = 0;
               break;
         }

      }

   system("pause");
   return 0;
}

Saludos y gracias de antemano

leosansan

#1
Cita de: alfremos en  5 Mayo 2013, 07:01 AM
..........................................
luego que el usuario ingrese la letra solo tiene que dar un mensaje como "se arrancó el motor en estrella" luego de esto tiene que haber un contador el cual debe marcar en pantalla unos 5 Seg y luego mostrar el mensaje "el motor paso a triangulo"

La idea no me parece mal, sólo es cuestión de completarla:

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
  int opcion,i;

  while (1)  {
       printf("Menu de Arranque\n\n");
       printf("\t1] Arrancar motor.\n");
       printf("\t2] Ayuda.\n");
       printf("\t3] Salir.\n");
       printf("\n\n Opcion= ");
       scanf("%i", &opcion);
       system("cls");
       switch(opcion){
           case 1:
               system("cls");
               printf("El Motor  en Estrella arranco.\n");
               Sleep(2000);
                system("cls");
                for (i=0;i<5;i++){
                   printf("Arranque en %d segundos: ",5-i);
                   Sleep(1000);
                   system("cls");
               }
              printf("El Motor paso a TRIANGULO .\n");
              return 1;
           case 2:
               printf("Para Arrancar El Motor Ingrese El Numero 1.\n");
               break;
           case 3:
               return 0;
       }
   }
}


Es una idea funcional pero a desarrollar un poco más.

Saluditos!. ....  

alfremos

saludos gracias por la respuesta me funciono muy bien. para complementar un poco mas el programa como puedo evitar que el usuario introduzca en las opciones no un numero si no una letra? cuando se introduce una letra el programa queda pegado y no deja que siga corriendo.. la pregunta es esa como puedo limitar el programa para que solo introduzca numeros.. o que muestre algun tipo de mensaje cuando las personas ingresan letras algo como "opcion no disponible introduzca algun numero de la opcion antes mencionada"

pacoperico

Usa el default en el switch case.

Código (cpp) [Seleccionar]
switch(opcion){
            case 1:
                system("cls");
                printf("El Motor  en Estrella arranco.\n");
                Sleep(2000);
                 system("cls");
                 for (i=0;i<5;i++){
                    printf("Arranque en %d segundos: ",5-i);
                    Sleep(1000);
                    system("cls");
                }
               printf("El Motor paso a TRIANGULO .\n");
               return 1;
            case 2:
                printf("Para Arrancar El Motor Ingrese El Numero 1.\n");
                break;
            default :
                  pritnf("opcion no valida");
                  break;


La instruccion switch case comprueba el valor de una determinada variable, si su valor coiincide con alguno de los valores de los case, entonces ejecuta las instrucciones de cada uno. En caso de que no concuerde con ninguno de los case se ejecuta la instruccion del default.

alfremos

Gracias por responder. ya entendi como trabaja la condicion default en el switch. si el numero que introduce no es el que esta destinado a el menu de arriba va a arrojar el mensaje "opcion no valida" el problema que se sigue presentando es si el usuario teclea una letra y no un numero.. el programa arroja el mensaje "opcion no valida" pero luego no deja introducir ningun otro caracter se queda pegado! saludos y gracias nuevamente

leosansan

Creo que de esta manera funciona como quieres:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main(){
    int i;
    char opc;
    while (1)  {
        printf("Menu de Arranque\n\n");
        printf("\t1] Arrancar motor.\n");
        printf("\t2] Ayuda.\n");
        printf("\t3] Salir.\n");
        do {
            printf("\n\n Opcion= ");
            scanf(" %c", &opc);
            if (opc<49 || opc>51)
                printf("Introduzca un valor de 1 a 3.\n");
            }while (opc<49 || opc>51);
        system("cls");
        switch(opc){
            case '1':
                system("cls");
                printf("El Motor  en Estrella arranco.\n");
                Sleep(2000);
                 system("cls");
                 for (i=0;i<5;i++){
                    printf("Arranque en %d segundos: ",5-i);
                    Sleep(1000);
                    system("cls");
                }
               printf("El Motor paso a TRIANGULO .\n");
               return 1;
            case '2':
                printf("Para Arrancar El Motor Ingrese El Numero 1.\n");
                break;
            case '3':
                return 0;
        }
    }
}



Saluditos! ....   

alfremos

muchas gracias..! estoy tratando de comprender la modificacion con el comando que aplicaste,

Citardo {
           printf("\n\n Opcion: ");
           scanf(" %c", &opc);
           if (opc<49 || opc>51)
               printf("Introduzca un valor de 1 a 3.\n");
           }while (opc<49 || opc>51);

buscare mas informacion a ver de que otra forma lo podemos utilizar, Gracias.

leosansan

Cita de: alfremos en  6 Mayo 2013, 02:11 AM
muchas gracias..! estoy tratando de comprender la modificacion con el comando que aplicaste,


Lo que he hecho es que el dato que se introduce es de tipo char y el uno se corresponde con 49 y el tres con 51 en ASCII e impongo la condición que si no son esos valores vuelva a introducir la opción elegida. Y como opción es char en el switch los case son caracteres, por eso van entre comillas '1 ' , '2',  '3'..

Saluditos! ....

alfremos

pensando como hacer mas completo el programa. como podriamos detenerlo? ya logramos que arrancara en estrella, cambiara a delta pero si queremos detener la operacion? tal vez que no regrese a el menu de arranque nuevamente.. asi podemos "encender" el motor cuantas veces queramos.
actualmente el programa corre y luego que pasa a triangulo el programa se cierra luego de una espera de 5 Seg

Citarprintf("El Motor paso a TRIANGULO .\n\n");
              printf("...Gracias, Que Tenga Un Buen Dia...\n");
              Sleep(5000);
              return 1;
           case '2':
               printf("Ingrese SOLO Numeros.\n\n");
               break;
           case '3':
               return 0;

Saludos  ;-)

leosansan


Para que vuelva al menú después de arrancar basta con cambiar el "return" del case '1' por "break". Si es otra cosa avisa.

Saluditos!.... ..