Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DarkJack en 25 Agosto 2011, 05:56 am



Título: Ayuda con menu de programa
Publicado por: DarkJack en 25 Agosto 2011, 05:56 am
bueno pues me han encargado un menu de conversiones de divisas, he hecho el programa en c, pero debido a que aun no conozco mucho del lenguje siento que hay muchas cosas que se pueden simplificar en mi programa, espero me puedan ayudar, y explicar como puedo mejorarlo :D, muchas gracias
Esta hecho en C, con el compilador Dev C++.



#include <stdio.h>
#include <windows.h>
#define dolar 12.47
#define yen 0.16
#define euro 17.98

int menuPrincipal(void){//muestra el menu
    int retorno, i;
    system("cls");
    printf("\n\n\n\t\t%c", 201);
    for(i = 0; i < 30; i++) {
       printf("%c", 205);
    }
    printf("%c\n", 187);
    printf("\t\t%c", 186);
    printf("    Conversor de divisas      %c\n", 186);
    printf("\t\t%c ============================ %c\n", 186, 186);
    printf("\t\t%c 1.- De dolares a pesos       %c\n", 186, 186);
    printf("\t\t%c 2.- De yens a pesos          %c\n", 186, 186);
    printf("\t\t%c 3.- De Euro a pesos          %c\n", 186, 186);
    printf("\t\t%c 4.- Salir                    %c\n", 186, 186);
    printf("\t\t%c", 200);
    for(i = 0; i < 30; i++) {
       printf("%c", 205);
    }
    printf("%c\n", 188);
    printf("\n\n\t\t  Opcion ---------> ");
    scanf("%d", &retorno);
    return(retorno);
}


int main(int argi, char** argc) {
    float pesos, cant; // definicion de variable flotante
    int i = 0;
    while(i < 4) {
      i = menuPrincipal(); // ejecuta la funcion menu
      switch(i) {
               case 1: { //de dolares a pesos
                    printf("\n\n\t\tCual es la cantidad de pesos a cambiar? -> ");
                    scanf("%f", &pesos);
                    cant = pesos / dolar;
                    printf("\t\tLa cantidad de dolares es: -> %f\n\n\t", cant);   
                    system("PAUSE");
               break;
               }
               case 2: { //de yens a pesos
                    printf("\n\n\t\tCual es la cantidad de pesos a cambiar? -> ");
                    scanf("%f", &pesos);
                    cant = pesos/yen;
                    printf("\t\tLa cantidad de yens es: -> %f\n\n\t", cant); 
                    system("PAUSE");
               break;
               }
               case 3: { //de euro a pesos
                    printf("\n\n\t\tCual es la cantidad de pesos a cambiar? -> ");
                    scanf("%f", &pesos);
                    cant = pesos/euro;
                    printf("\t\tLa cantidad de euros es: -> %.2f\n\n\t", cant);
                    system("pause");
               break;
               }
               default: {
                        printf("Este numero no esta dentro del menu, porfavor elige otro\n\n\t\t");
                        system("pause");
                        break;
                        }
           }
    }
return 0;
}


Título: Re: Ayuda con menu de programa
Publicado por: Alien-Z en 25 Agosto 2011, 15:43 pm
Aunque yo programo en C++ lo veo bastante bien para no usar clases o estructuras, lo que si creo es que hay demasiados "printf", puedes usar el mismo para imprimir en pantalla varias cosas en renglones diferentes usando: "\n", asi se simplificaría el programa.

Saludos.


Título: Re: Ayuda con menu de programa
Publicado por: тαптяα en 25 Agosto 2011, 17:20 pm
Dev-C++ no es un compilador.


Título: Re: Ayuda con menu de programa
Publicado por: rir3760 en 25 Agosto 2011, 18:13 pm
El programa se puede reducir bastante.

* Para empezar seria mejor eliminar las llamadas a 'system("pause")' ya que, siendo estrictos, no son parte del programa. Bien se utiliza la característica de "pausa automática" soportada por la mayoría de los IDEs (con excepción de Dev-C++) o bien se ejecuta mediante el interprete de comandos.

* No es necesario colocar llaves después de cada etiqueta y todos los casos, salvo el ultimo, inician con la impresión de la misma cadena (Se puede sacar del "switch").

Con esos mas otros cambios la función principal se puede reducir a:
Código
  1. int main(void)
  2. {
  3.   char *moneda[] = {"dolares", "yens", "euros"};
  4.   float cambio[] = {dolar, yen, euro};
  5.   float pesos;
  6.   int i;
  7.  
  8.   do {
  9.      i = menuPrincipal();
  10.  
  11.      if (i >= 1 && i <= 3){
  12.         printf ("\n\n\t\tCual es la cantidad de pesos a cambiar? -> ");
  13.         scanf ("%f", &pesos);
  14.         printf ("\t\tLa cantidad de %s es: -> %.2f\n\n\t", moneda[i - 1], pesos / cambio[i - 1]);
  15.      }else
  16.         printf ("Este numero no esta dentro del menu, porfavor elige otro\n\n\t\t");
  17.   }while (i < 4);
  18.  
  19.   return 0;
  20. }

También debes decidir donde se debe validar la opción elegida por el usuario (función principal o en el menú).

Un saludo