Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Agosto 29, 2008, 09:29:32
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: Calculadora facil 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Calculadora facil  (Leído 234 veces)
placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 157



Ver Perfil
« en: Diciembre 17, 2007, 06:22:23 »

Buenas, pues bueno me dio por hacer una calculadora bastante sencilla, y que los que querais que jugueis un poco con el codigo, haber si se puede mejorar para acortar el codigo, alguna critica constructiva, etc, y algunos iniciados totales pueden repasar un poco este codigo, de hecho, yo creo que es de newbies, lleva un enum, un bucle while, condicionales if, y de todo un poco. Bueno, por ahora, no aspiro a mas XD. Tengo muchos examenes y no hay tiempo para mucho c++.

Code:
------

#include <iostream>


//DECLARACION DE FUNCIONES
int sumas(int suma, int suma2)
{
   return(suma + suma2);
}

int restas(int resta, int resta2)
{
   return(resta - resta2);
}

int multiplicaciones(int mult, int mult2)
{
   return(mult * mult2);
}

int divisiones(int divi, int divi2)
{
   return(divi / divi2);
}

//ACABA LA DECLARACION DE FUNCIONES





//FUNCION MAIN INICIADA
int main()
{
   enum operaciones {osuma=1,oresta,omultiplicacion,odivision,opotencia};
   int Selector;    //Cuidado, recuerda que c++ es case sensitive (distingue mayús. de minús)

   std::cout << "Calculadora v1.0 BETA \n\n";
   
   
   std::cout << "OPERACIONES SIMPLES";
   std::cout << "\n\nSuma: Pulsa 1 y despues Enter\n\n";
   std::cout << "Resta: Pulsa 2 y despues Enter\n\n";
   std::cout << "Multiplicacion: Pulsa 3 y despues Enter\n\n";
   std::cout << "Division: Pulsa 4 y despues Enter\n\n";
   
   
   
   std::cout << "\n\n\nPOTENCIAS";
   std::cout << "\n\nPotencia de cualquier exponente : Pulsa 5 y despues Enter\n\n";
   std::cin >> Selector;

   //LOS IF MIRAN LA SELECCION PARA SABER QUE FUNCION LLAMAR
   if (Selector == osuma)
   {

   int suma;
   int suma2;
   int resultado;
   
   std::cout << "\nHas elegido sumar";
   std::cout << "\n\nPrimer numero: ";
   std::cin >> suma;
   std::cout << "Segundo numero: ";
   std::cin >> suma2;
    resultado = sumas(suma, suma2);
   std::cout << "El resultado es: " << resultado << "\n";
   
   }
   
   if (Selector == oresta)
   {

   
   int resta;
   int resta2;
   int resultado;
   
   std::cout << "\nHas elegido restar";
   std::cout << "\n\nPrimer numero: ";
   std::cin >> resta;
   std::cout << "Segundo numero: ";
   std::cin >> resta2;
    resultado = restas(resta, resta2);
   std::cout <<"El resultado es: " << resultado << "\n";
   
   }

   if (Selector == omultiplicacion)
   {

   
   int mult;
   int mult2;
   int resultado;
   
   std::cout << "\nHas elegido multiplicar";
   std::cout << "\n\nPrimer numero: ";
   std::cin >> mult;
   std::cout << "Segundo numero: ";
   std::cin >> mult2;
    resultado = multiplicaciones(mult, mult2);
   std::cout <<"El resultado es: " << resultado << "\n";
   
   }

   if (Selector == odivision)
   {

   
   int divi;
   int divi2;
   int resultado;
   
   std::cout << "\nHas elegido dividir";
   std::cout << "\n\nPrimer numero: ";
   std::cin >> divi;
   std::cout << "Segundo numero: ";
   std::cin >> divi2;
    resultado = divisiones(divi, divi2);
   std::cout << "El resultado es: " << resultado << "\n";
   
   }
   //LA POTENCIA NO LA HICE FUNCION PORQUE LA VEÍA MUCHO ROLLO
   if (Selector == opotencia)
   {
      int factor;
      int vafactor;
      int exponente;
        int compexponente;
      
      std::cout << "\nHas elegido la potencia de cualquier exponente";
      std::cout << "\n\nEscribe el factor o base: ";
      std::cin >> factor;
      vafactor = factor;
      std::cout << "\n\nEscribe el exponente: ";
      std::cin >> exponente;
      compexponente = 1;

      while (compexponente < exponente)
      {
         vafactor = (vafactor * factor);
         compexponente++;
      }
      std::cout << "El resultado es: " << vafactor << "\n";
   }
      
   
   //ACABAN LOS IF
   
   
   return 0;
}
//ACABA LA FUNCION MAIN

------

Salu2
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.

PD: EN VACACIONES, OFF LINE TODO AGOSTO
Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1363


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« Respuesta #1 en: Diciembre 17, 2007, 03:59:30 »

hola, te recomiendo que como solo se puede poner una opcion, que pongas:
/***********************/
if(Selector = osuma){
/*...*/
}
else if(Selector = oresta){
/*...*/
}
else if/*...*/
/**********************/

porque sino seguiria haciendo comprobaciones, de esa forma, cuando encontro a que es igual la selectora, despues no hace mas IFs.

otra cosa, para la potencia en la cabezera math.h esta la funcion:
double pow(double, double); /*si mal no recuerdo se declara asi*/
en vez de hacer lo que haces vos (que no sirviria para hacer 2 elevado a 2.5) pones
por(factor, exponente);

salu2!
En línea

Inside The Source Code




Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion
Linux Registred User #460377
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 181



Ver Perfil
« Respuesta #2 en: Diciembre 17, 2007, 04:44:53 »

Buenas

hola, te recomiendo que como solo se puede poner una opcion, que pongas:
/***********************/
if(Selector = osuma){
/*...*/
}
else if(Selector = oresta){
/*...*/
}
else if/*...*/
/**********************/

porque sino seguiria haciendo comprobaciones, de esa forma, cuando encontro a que es igual la selectora, despues no hace mas IFs.

O utilizar un switch


Salu2, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C

Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1363


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« Respuesta #3 en: Diciembre 17, 2007, 04:45:41 »

xD, no me di cuenta xD, jajaja

salu2!
En línea

Inside The Source Code




Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion
Linux Registred User #460377
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 181



Ver Perfil
« Respuesta #4 en: Diciembre 17, 2007, 05:21:36 »

Buenas

Algunas otras cosas para mejorar:
  1) Declarar solo 3 variables para todo el programa, en vez de 3 variables para cada operacion
  2) Reutilizar codigo: muchas partes del codigo estan repetidas. Lleva todo lo repetido a una funcion. Para este ejemplo seria sobre-diseñar, pero lo logico seria que se creara una jerarquia de clases donde se instancien objetos que se encargan de realizar las operaciones.
      a) Lectura de operandos
      b) Impresion del resultado

Haciendo eso de arriba el programa te va a quedar algo asi
   elegir();
   leer();
   calcular();
   mostrar(); 

Salu2, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C

placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 157



Ver Perfil
« Respuesta #5 en: Diciembre 18, 2007, 09:22:17 »

Gracias por responder a los dos, parece que aun me queda por aprender mucho XD, pero por lo menos se ve que he mejorado, sobre todo lo digo por ti FreakMind, porque lo que me dijiste en otro tema que puse hace tiempo...Míralo y te acordarás XD XD


Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion

Hace unos 5 meses no sabía bien las propiedades de las variables XD.Mirare a fondo vuestras sugerencias y mejorare la calculadora, y entonces la enseñaré de nuevo, pero sin prisas, que hay demasiados examenes del instituto XD XD.

Salu2 y gracias por responder
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.

PD: EN VACACIONES, OFF LINE TODO AGOSTO
placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 157



Ver Perfil
« Respuesta #6 en: Diciembre 21, 2007, 10:59:58 »

#include <iostream>

//FUNCION MAIN INICIADA
int main()
{
   enum operaciones {osuma=1,oresta,omultiplicacion,odivision,opotencia};
   int Selector;    //Cuidado, recuerda que c++ es case sensitive (distingue mayús. de minús)

   std::cout << "Calculadora v1.5 BETA \n\n";
   
   
   std::cout << "OPERACIONES SIMPLES";
   std::cout << "\n\nSuma: Pulsa 1 y despues Enter\n\n";
   std::cout << "Resta: Pulsa 2 y despues Enter\n\n";
   std::cout << "Multiplicacion: Pulsa 3 y despues Enter\n\n";
   std::cout << "Division: Pulsa 4 y despues Enter\n\n";
   
   
   
   std::cout << "\n\n\nPOTENCIAS";
   std::cout << "\n\nPotencia de cualquier exponente : Pulsa 5 y despues Enter\n\n";
   std::cin >> Selector;

   //LOS IF MIRAN LA SELECCION PARA SABER QUE FUNCION LLAMAR
   if (Selector == osuma){

   int suma;
   int suma2;
   int resultado;
   
   std::cout << "\nHas elegido sumar";
   std::cout << "\n\nPrimer numero: ";
   std::cin >> suma;
   std::cout << "Segundo numero: ";
   std::cin >> suma2;
   resultado = suma + suma2;
    std::cout << "El resultado es: " << resultado << "\n";


   }
   
   else if (Selector == oresta){

   
   int resta;
   int resta2;
   int resultado;
   
   std::cout << "\nHas elegido restar";
   std::cout << "\n\nPrimer numero: ";
   std::cin >> resta;
   std::cout << "Segundo numero: ";
   std::cin >> resta2;
    resultado = resta - resta2;
   std::cout <<"El resultado es: " << resultado << "\n";
   
   }

   else if (Selector == omultiplicacion){

   
   int mult;
   int mult2;
   int resultado;
   
   std::cout << "\nHas elegido multiplicar";
   std::cout << "\n\nPrimer numero: ";
   std::cin >> mult;
   std::cout << "Segundo numero: ";
   std::cin >> mult2;
    resultado = mult * mult2;
   std::cout <<"El resultado es: " << resultado << "\n";
   
   }

   else if (Selector == odivision){

   
   int divi;
   int divi2;
   int resultado;
   
   std::cout << "\nHas elegido dividir";
   std::cout << "\n\nPrimer numero: ";
   std::cin >> divi;
   std::cout << "Segundo numero: ";
   std::cin >> divi2;
    resultado = divi / divi2;
   std::cout << "El resultado es: " << resultado << "\n";
   
   }
   
   else if (Selector == opotencia){
      
      
      int factor;
      int vafactor;
      int exponente;
        int compexponente;
      
      std::cout << "\nHas elegido la potencia de cualquier exponente";
      std::cout << "\n\nEscribe el factor o base: ";
      std::cin >> factor;
      vafactor = factor;
      std::cout << "\n\nEscribe el exponente: ";
      std::cin >> exponente;
      compexponente = 1;

      while (compexponente < exponente)
      {
         vafactor = (vafactor * factor);
         compexponente++;
      }
      std::cout << "El resultado es: " << vafactor << "\n";
   }
      
   
   //ACABAN LOS IF
   
   
   return 0;
}
//ACABA LA FUNCION MAIN

Bueno aquí está el nuevo código con los else if y habiendo quitado las funciones ya que las veía inútiles.

Y NiO creo que las potencias con exponente decimal no existen en las matemáticas,o por lo menos yo no las he visto nunca, aunque las bases decimales sí existen y funcionan a la perfección en mi código, pero si supusiéramos que existe, como podría hacerlo sin ningún tipo de librería como la math?

Salu2

PD: Dentro de poco, cuando acabe de estudiar para ciencias sociales XD,
pondré el código aún más simplificado y con más cosas, y lo pondré con switch.
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.

PD: EN VACACIONES, OFF LINE TODO AGOSTO
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 181



Ver Perfil
« Respuesta #7 en: Diciembre 21, 2007, 12:54:32 »

Bueno aquí está el nuevo código con los else if y habiendo quitado las funciones ya que las veía inútiles.
Las funciones no son inutiles. Al contrario, el uso de funciones ayuda a modular el codigo. Sin funciones, te quedaria un main gigante, con partes de codigo repetidas (como ahora) ademas de que acoplas mucho la app a una implementacion. Creo que hiciste mal en quitarlas

Y NiO creo que las potencias con exponente decimal no existen en las matemáticas

Sacado del wiki:
Citar
En términos generales, una función es exponencial si se expresa de la forma F(x)=K * a^x siendo a y k reales.
Por lo tanto si pueden tener exponentes decimales

pero si supusiéramos que existe, como podría hacerlo sin ningún tipo de librería como la math?
Habria que estudiar mas matematica para saberlo jeje Tongue
En línea

Connoisseurs of C semantics find C++ inferior to ++C

placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 157



Ver Perfil
« Respuesta #8 en: Diciembre 21, 2007, 01:06:31 »

Buenas otra vez... Pues bueno todos los días se aprende algo nuevo freakmind recién me entero de que las potencias pueden tener exponentes decimales, así que estudiaré muchas más matemáticas para no usar la math XD. Y... podrías ser un poco más concreto a la hora de decir que repito código?? Es que no lo veo aunque me fije... Bueno igualmente volveré a poner las funciones e intentaré rehacer el código con el menor número de variables posibles y con funciones de nuevo XD. Ah claro gracias por responder y espero que opines sobre el nuevo código que pondre seguramente mañana.

Salu2
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.

PD: EN VACACIONES, OFF LINE TODO AGOSTO
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 181



Ver Perfil
« Respuesta #9 en: Diciembre 21, 2007, 04:02:49 »

Buenas

podrías ser un poco más concreto a la hora de decir que repito código?? Es que no lo veo aunque me fije...
Con gusto...
Código:
if (Selector == osuma){
      int suma;
      int suma2;
      int resultado;
   
      std::cout << "\nHas elegido sumar";
      std::cout << "\n\nPrimer numero: ";
      std::cin >> suma;
      std::cout << "Segundo numero: ";
      std::cin >> suma2;
      resultado = suma + suma2;
      std::cout << "El resultado es: " << resultado << "\n";
}else if (Selector == oresta){
      int resta;
      int resta2;
      int resultado;
   
      std::cout << "\nHas elegido restar";
      std::cout << "\n\nPrimer numero: ";
      std::cin >> resta;
      std::cout << "Segundo numero: ";
      std::cin >> resta2;
      resultado = resta - resta2;
      std::cout <<"El resultado es: " << resultado << "\n";
}
Eso me parece que repite codigo. En ambos declaras 3 variables, pedis los numeros, calculas y das el resultado, cuando perfectamente lo podrias hacer en un solo lugar.

Fijate aca
Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion
que hubo una discusion parecida

Salu2
En línea

Connoisseurs of C semantics find C++ inferior to ++C

placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 157



Ver Perfil
« Respuesta #10 en: Diciembre 22, 2007, 04:13:02 »

Buenas, de nuevo la calculadora, solo 3 variables para todo el código.
Ya que estamos vi por ahí una calculadora muy bien hecha y muy corta que entiendo a la perfección, pero que no la quiero copiar, está hecha con switch también. Esta en la pagina de c con clase, por José Luis Patiño.

Pero como no quiero copiarme pondré mi nueva patata mejorada (creo) XD:

#include <iostream>

//Vuelve a llevar funciones xD xD xD
//La potencia la quité porque no quiero hacerla con librerías, ya la haré en otras
//versiones más altas
//Y al final la veo mejor con switch en vez de tantos if

int sumas(int op, int op2)
{
   return(op + op2);
}

int restas(int op, int op2)
{
   return(op - op2);
}

int multiplicaciones(int op, int op2)
{
   return(op * op2);
}

int divisiones(int op, int op2)
{
   return(op / op2);
}
   
int SelyRes;
   
int op;
   
int op2;

int main()

{

    using namespace std;
    cout << "Sumas: Pulsa 1 y enter \n";
    cout << "Restas: Pulsa 2 y enter \n";
    cout << "Multiplicaciones: Pulsa 3 y enter \n";
    cout << "Divisiones: Pulsa 4 y enter \n";
    cin >>  SelyRes;
   cout << "Introduce el primer numero: ";
   cin >> op;
   cout <<"\nIntroduce el segundo numero: ";
   cin >> op2;

   switch (SelyRes)
   {
   case 1:
      SelyRes= sumas(op, op2);break;
   case 2:
      SelyRes= restas(op, op2);break;
   case 3:
      SelyRes= multiplicaciones(op, op2);break;
   case 4:
      SelyRes= divisiones(op, op2);
   }

   cout << "\nEl resultado de la operacion es: " << SelyRes << "\n";
    return 0;

}

Salu2
« Última modificación: Enero 06, 2008, 03:25:33 por placa4 » En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.

PD: EN VACACIONES, OFF LINE TODO AGOSTO
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: Calculadora facil « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC