Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: OmarHack en 23 Abril 2013, 19:39 pm



Título: Reto para los que están aprendiendo C++.
Publicado por: OmarHack en 23 Abril 2013, 19:39 pm
El código es muy básico pero está echo para que cualquiera sepa modificarla, entenderla y ver como yo la hice. Suele ser lo primero que hacemos cuando empezamos a programar y solemos tener problemas así que si es tú caso puedes orientarte un poco. El código se puede mejorar y acortar mucho.
También lo típico para ver el resultado del programa al ejecutarlo y para que no desaparezca solemos poner un "getchar()" o un "system("pause")" Aquí tenéis una función con un bucle for que lo hace sin salirse del ANSI ni tener que incluir ninguna biblioteca.

Si queréis practicar el lenguaje podéis arreglar los warning. Es muy sencillo, tal como están no dan ningún tipo de problemas para la función que hacen, pero esta bien que sepáis solucionarlos. Podéis añadir una función para que haga alguna cosa más la calculadora, por ejemplo la media aritmética y veréis que os va a dar algún que otro problema. También podéis hacer que el programa escriba un texto si el usuario elige un número que no está en la lista.

Repito que el código se puede mejorar y mucho. Lo pongo por si alguien que esté aprendiendo quiere algún reto para ver si puede con él.
El código está completamente comentado así que no puede ser muy difícil arreglarlo y añadirle funciones.

Un saludo y que no se os complique.
 :silbar:
 
Código
  1. #include <iostream> //Librería de entrada y salida.
  2. using namespace std; //Indicamos que usaremos la biblioteca standart.
  3. typedef long double LD; //Añadimos un identificador a long double llamado "LD".
  4. //A continuación la de claración de variables globales y funciones.
  5. int      numeroUsuario         ; //Variable para almacenar los números del usuario
  6. LD       uno            (LD,LD); //Prototipo de función para sumar.
  7. LD       dos            (LD,LD); //Prototipo de funcion para restar.
  8. LD       tres           (LD,LD); //Prototipo de funcion para multiplicar.
  9. LD       cuatro         (LD,LD); /*Prototipo de funcion para dividir que...
  10. ............................... .tambien devuelve el resto.*/
  11. LD       resto                 ; //El resto que devuelve la división.
  12. LD       resultado             ; //Resultado de las funciones.
  13. LD       primerNumero          ; //Primer numero para la opereción.
  14. LD       segundoNumero         ; //Segundo número para la operación.
  15. int      numeroResto           ; //Pasar a int el LD del primer número para usar modulus.
  16. int      numeroResto2          ; //Igual que el anterior pero con el segundo número.
  17. int      segundosSalir         ; //Segundos que quiero que tarde el programa en cerrarse.
  18. void     funcionEspera(int)    ; //Funcion para que el programa espere "x" segundos antes de salir.
  19.  
  20.  
  21.  
  22. int main() //Funcion principal del programa.
  23. { // Simbolo para declarar dentro de la funcion main.
  24.    Reiniciar: //Punto desde donde se reiniciará el programa.
  25.  
  26.    cout << "\t\t\t    ..CALCULADORA.. " << endl; //Muestra en pantalla el texto.
  27.  
  28.      cout << "........................................................." <<
  29.    "......................."<<endl; //Crea una linea de puntos para dar mejor aspecto.
  30.  
  31.    cout << endl << "Introduzca el numero correspondiente a la operacion y pulse enter..." << endl;
  32.    cout <<endl<<endl<<endl<<endl<<endl; //Muestra el texto en pantalla.
  33.    cout << "1 Sumar\n2 Restar\n3 Multiplicar\n4 Dividir\n8 Reiniciar\n9 Salir" <<
  34.    endl <<endl<<endl<<endl<<endl; //Muestra el texto en pantalla;
  35.    cout << endl << "                            ..OPERACIONES.." <<endl;//Muestra el texto en pantalla.
  36.    cout << "........................................................." <<
  37.    "......................."<<endl; //Muestra el texto en pantalla.
  38.  
  39.    cin >> numeroUsuario; // Guarda el numero que dio el usuario en la variable.
  40.    if (numeroUsuario == 8){goto Reiniciar;} //Si introduce 8 y pulsa enter vuelve al principio.
  41.    if (numeroUsuario != 9) //Si introduce 9 y pulsa enter no ejecuta acciones hasta llegar al "}" correspondiente.
  42.                       {
  43.  
  44.  
  45.  
  46.     cout << "Introduzca el primer numero:" << endl; //Muestra en pantalla.
  47.      cin  >>  primerNumero; //Guarda el primer numero en la variable.
  48.      cout << "Introduzca el segundo numero:" << endl; //Muestra en pantalla.
  49.      cin  >> segundoNumero; //Guarda el segundo numero en la variable.
  50.  
  51.  
  52.  
  53.  
  54.    if (numeroUsuario == 1) //Si el usuario eligio uno...
  55.                      {
  56.                    uno(primerNumero,segundoNumero); //... Llama a la función.
  57.                      }
  58.  
  59.    if (numeroUsuario == 2) //Si el usuario eligio dos...
  60.                      {
  61.                    dos(primerNumero,segundoNumero);  //... Llama a la función.
  62.                      }
  63.  
  64.    if (numeroUsuario == 3) //Si el usuario eligio tres...
  65.                      {
  66.                    tres(primerNumero,segundoNumero);//... Llama a la función.
  67.                      }
  68.  
  69.    if (numeroUsuario == 4) //Si el usuario eligio cuatro...
  70.                      {
  71.                    cuatro(primerNumero,segundoNumero);//... Llama a la función.
  72.                      }
  73.  
  74.    cout << "El resultado es: " << resultado << endl; /* Da el valor de resultado...
  75.                     ...Resultado es devolvido por la función que se ha ejecutado.*/
  76.  
  77.    if (numeroUsuario == 4) //Si el usuario eligio cuatro...
  78.                      {
  79.                    cout << "El resto de la division si quitamos los decimales es: " << resto << endl; //...
  80.                    //...Muestra el texto anterior en pantalla.
  81.                    if (resto  == 0) //Si el resto es cero...
  82.                               {
  83.                               cout << "La division sin los decimales es exacta" <<endl;//...
  84.                               //...muestra el texo anterior en la pantalla.
  85.                               }  
  86.                      else cout << "La division sin decimales no es exacta";
  87.                      //Si el resto no es cero muestra el texto anterior en pantalla.
  88.                      }
  89.                       cout <<endl << "Pulse 8 y enter para reiniciar..." <<endl;
  90.                       //Muestra el texto anterior en pantalla.
  91.                      cout << "Pulse 9 y enter para salir..."<<endl;
  92.                      //Muestra el texto anterior en pantalla.
  93.  
  94.  
  95.                       cin >> numeroUsuario;
  96.                       //Vuelve a guardar en la variable el numero dado por el usuario.
  97.                       if (numeroUsuario == 8) //Si el numero del usuario es ocho hace lo siguiente:
  98.                       {
  99. //Crea saltos de linea para dejar libre la pantalla al reiniciar y...
  100. cout <<endl <<endl <<endl <<endl <<endl <<endl <<endl<<endl<<endl<<endl<<endl;
  101.                                          goto Reiniciar;//vuelve donde está "Reiniciar"
  102.                                          }
  103.  
  104.  
  105.  
  106.                      } //Salir            
  107.  
  108.  
  109. cout << "                                                              OmarHack C++ 2013";
  110. //Muestra el texto anterior en pantalla.
  111.  
  112. funcionEspera(segundosSalir); //Llama a la función.
  113.    return 0; //Devuelve 0 a la funcion principal.
  114.  
  115.  
  116.    } //Cierra las delcaraciones de la función main.
  117.  
  118.  
  119. //Funcion de sumar
  120. LD    uno       (LD primerNumero,LD segundoNumero)
  121. {
  122.      resultado = primerNumero + segundoNumero;
  123.      return resultado;
  124. }
  125.  
  126.  
  127. //Funcion de restar
  128. LD    dos       (LD primerNumero,LD segundoNumero)
  129. {
  130.      resultado = primerNumero - segundoNumero;
  131.      return resultado;
  132. }
  133.  
  134. //Funcion de MMultiplicar
  135. LD    tres       (LD primerNumero,LD segundoNumero)
  136. {
  137.      resultado = primerNumero * segundoNumero;
  138.      return resultado;
  139. }
  140.  
  141. //Funcion de Dividir y resto.
  142. LD    cuatro       (LD primerNumero,LD segundoNumero)
  143. {
  144.      numeroResto = primerNumero;
  145.      numeroResto2 = segundoNumero;
  146.      resultado = primerNumero / segundoNumero;
  147.      resto     = (numeroResto % numeroResto2);
  148.      return resultado && resto;
  149. }
  150.  
  151. //Funcion mostrar mensaje antes de salir automáticamente
  152. void funcionEspera(int segundosSalir)
  153. {      
  154.      segundosSalir =3;
  155.    for(time_t i = (time(NULL) + segundosSalir); time(NULL) != i;);
  156. }
  157.  


Título: Re: Reto para los que están aprendiendo C++.
Publicado por: Danyel_Casvill en 24 Abril 2013, 00:41 am
Gracias por el post, está bueno.  ;-)


Opinión rápida:

Esto --->

Código
  1. //Funcion mostrar mensaje antes de salir automáticamente
  2. void funcionEspera(int segundosSalir)
  3. {      
  4.      segundosSalir =3;
  5.    for(time_t i = (time(NULL) + segundosSalir); time(NULL) != i;);
  6. }
  7.  


Sería mas sencillo así, o es preferible como lo hiciste tú?: ---->

Código
  1. void funcionEspera(int)
  2. {
  3.      cin.get();cin.get();
  4.  
  5. }

O algo parecido?


Saludos! ^-^


Título: Re: Reto para los que están aprendiendo C++.
Publicado por: OmarHack en 24 Abril 2013, 01:01 am
Gracias  :)
Si pruebas la calculadora o te fijas en el código verás una variable llamada "segundosSalir" con "cin.get()" no puedes hacer que el programa se cierre solo cuando tu quieras sin pulsar una tecla. De la forma que lo pongo yo, puedes cambiar el tiempo que va a tardar en cerrarse el programa con simplemente poner segundosSalir = 10; eso con cin.get() no se puede hacer. Si no necesitas que el programa se cierre en un determinado tiempo sí puedes usar cin.get() sin problemas. En mi caso, preferí determinar un tiempo para que se viera el siguiente mensaje y que sin pulsar ninguna tecla el programa se cerrase. 
Código
  1. cout << "                                                              OmarHack C++ 2013";
  2. //Muestra el texto anterior en pantalla.
  3.  
  4. funcionEspera(segundosSalir); //Llama a la función.
  5.    return 0; //Devuelve 0 a la funcion principal.
  6.    }



Según te convenga puedes usar uno o otro. Con la función no tienes que pulsar enter ni introducir un carácter para salir del programa.
Un saludo.


Título: Re: Reto para los que están aprendiendo C++.
Publicado por: gorystyle en 24 Abril 2013, 03:58 am
muy bueno Omar.. la vdd es que tiene varias "conchitas de mango" jeje interesante