Tengo que realizar un programa para la escuela y consiste en hacer una calculadora con suma resta divicion multiplicacion exponente y raiz; ya tengo todas las operaciones menos la raiz, el chiste es que yo introduzca el tipo de raiz y el numero y que me de el resultado pero a la hora de hacerlo me da de resultado solo uno :
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main(int argc, char** argv) {
float suma=0, resta=0, multi=0, divi=0, a, b, opcion;
float Resultado, Z = 1, P, B, R;
cout<<" ¿CUAL ES TU OPREPACION? "<<endl;
cout<<"\n1. Sumar";
cout<<"\n2. Restar";
cout<<"\n3. Multiplicar";
cout<<"\n4. Dividir";
cout<<"\n5. Potenciar";
cout<<"\n6. Raiz"<<endl;
cin>>opcion;
if(opcion==1){
cout<<"Ingrese El Primer Numero"<<endl;
cin>>a;
cout<<"Ingrese El Segundo Numero"<<endl;
cin>>b;
suma= a + b;
cout<<"El Resultado De La Suma Es:"<<suma<<endl;
}
if(opcion==2){
cout<<"Ingrese El Primer Numero"<<endl;
cin>>a;
cout<<"Ingrese El Segundo Numero"<<endl;
cin>>b;
resta= a - b;
cout<<"El Resultado De La Resta Es:"<<resta<<endl;
}
if(opcion==3){
cout<<"Ingrese El Primer Numero"<<endl;
cin>>a;
cout<<"Ingrese El Segundo Numero"<<endl;
cin>>b;
multi= a * b;
cout<<"El Resultado De La Multiplicacion Es:"<<multi<<endl;
}
if(opcion==4){
cout<<"Ingrese El Primer Numero"<<endl;
cin>>a;
cout<<"Ingrese El Segundo Numero"<<endl;
cin>>b;
divi= a / b;
cout<<"El Resultado De La Divicion Es:"<<divi<<endl;
}
if(opcion==5){
cout<<"Ingrese La Base"<<endl;
cin>>B;
cout<<"Ingrese La Potencia"<<endl;
cin>>P;
float Resultado= pow(B,P);
cout<<" El Resultado De "<<B<<" Elevado A La "<<P<<" Es Igual A "<<Resultado<<endl;
}
if(opcion==6){
cout<<"Ingrese El Tipo De Raiz"<<endl;
cin>>B;
cout<<"Ingrese El numero"<<endl;
cin>>P;
Resultado= pow(P,0.5);
R= Z / B;
cout<<" La raiz a la "<<B<<" De "<<P<<" Es Igual A "<<Resultado<<endl;
}
getch();
return 0;
}
· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex
CitarResultado= pow(P,0.5);
R= Z / B;
¿Qué es R?, ¿Qué es Z?, ¿Por qué usas 0.5?
Si quieres hallar la raiz n-esima de a es:
pow(a, 1/n) Notese que si n es entero entonces 1/n devuelve la división entera. Si quieres hallar la raiz cuadrada es elevar a la 0.5
conio.h No es una libreria estandar y NO debes usarla.
#include <math.h>
#include <stdio.h>
int main() {
int a, b, op;
printf("\tOPERACIONES:\n");
printf(" 1) Suma (Sumandos)\n");
printf(" 2) Diferencia (Minuendo Sustraendo)\n");
printf(" 3) Producto (Multiplicando Multiplicador)\n");
printf(" 4) Divicion Real (Dividendo Divisor)\n");
printf(" 5) Potenciacion (Base Exponente)\n");
printf(" 6) Raiz n-esima (Radicando N)\n");
printf("\nIngrese el codigo de operacion: ");
scanf("%d", &op);
printf("\nIngrese los operandos: ");
scanf("%d %d", &a, &b);
printf("\nEl resultado es: ");
switch(op) {
case 1: printf("%d", a + b); break;
case 2: printf("%d", a - b); break;
case 3: printf("%d", a * b); break;
case 4: printf("%f", (float)a / b); break;
case 5: printf("%f", pow(a, b)); break;
case 6: printf("%f", pow(a, (float)1 / b)); break;
default: printf("\nERROR: opcion no valida.\n"); break;
}
return 0;
}
Hay muchos "detalles" en tu código.
Para mejorar tu eficiencia te recomiendo
-No usar conio.h (como dice el comentario de arriba es una librería no-estándar)
-Usa double en vez de float: En realidad no hay gran diferencia entre usar ambos en cuanto a memoria o rendimiento y se recomienda encarecidamente trabajar con double ya que tiene un nivel mas alto de precisión y evita así la perdida de valores, de la misma manera se recomienda trabajar siempre con int en vez de usar short y evitar los unsigned a menos que sea extremadamente necesario.
-Aprende a usar el switch
-Reusa tu codigo, si lees puedes encontrar que muchas veces repites el mismo codigo.
-Las opciones deberían ser un numero entero int.
Tu programa retocado quedaría así:
#include <iostream>
#include <math.h>
using namespace std;
int main(int argc, char** argv) {
double suma=0, resta=0, multi=0, divi=0, a, b, resultado, B, P;
int opcion;
cout<<"¿CUAL ES TU OPREPACION?"<<endl;
cout<<"\n1. Sumar";
cout<<"\n2. Restar";
cout<<"\n3. Multiplicar";
cout<<"\n4. Dividir";
cout<<"\n5. Potenciar";
cout<<"\n6. Raiz"<<endl;
cin>>opcion;
//Primero vez si es una potencia o raiz para evitar leer los valores una y otra vez
if(opcion==5){
cout<<"Ingrese La Base"<<endl;
cin>>B;
cout<<"Ingrese La Potencia"<<endl;
cin>>P;
double resultado= pow(B,P);
cout<<" El resultado De "<<B<<" Elevado A La "<<P<<" Es Igual A "<<resultado<<endl;
cin.get();
return 1;
}
if(opcion==6){
cout<<"Ingrese El Tipo De Raiz"<<endl;
cin>>B;
cout<<"Ingrese El numero"<<endl;
cin>>P;
resultado= pow(P,(1/B));
cout<<" La raiz a la "<<B<<" De "<<P<<" Es Igual A "<<resultado<<endl;
cin.get();
return 1;
}
// Si no es potencia ni raiz podemos leer los 2 valores siempre igual
cout<<"Ingrese El Primer Numero"<<endl;
cin>>a;
cout<<"Ingrese El Segundo Numero"<<endl;
cin>>b;
if(opcion==1){
suma= a + b;
cout<<"El resultado De La Suma Es:"<<suma<<endl;
cin.get();
return 1;
}
if(opcion==2){
resta= a - b;
cout<<"El resultado De La Resta Es:"<<resta<<endl;
cin.get();
return 1;
}
if(opcion==3){
multi= a * b;
cout<<"El resultado De La Multiplicacion Es:"<<multi<<endl;
cin.get();
return 1;
}
if(opcion==4){
divi= a / b;
cout<<"El resultado De La Divicion Es:"<<divi<<endl;
cin.get();
return 1;
}
//Si el usuario coloca una opcion invalida
cout << "Opcion invalidad por favor ingrese una entrada valida (del 1 al 6)";
cin.get();
return 0;
}
P.D1: Asumo que no sabes crear funciones por eso no las utilizo al igual que el switch
P.D2: El uso de cin.get() aunque es mejor que el uso de getch() no estan vistos como buenas practicas, aunque para lo que buscas esta bien.