Ayuda Porfavor Raiz en C++

Iniciado por Carloslim2002, 29 Septiembre 2017, 00:01 AM

0 Miembros y 1 Visitante están viendo este tema.

Carloslim2002

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 :

Código (cpp) [Seleccionar]
#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
-Engel Lex

_TTFH_3500

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.

Código (cpp) [Seleccionar]
#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;
}

JavierScars

#2
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í:

Código (cpp) [Seleccionar]

#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.
Usa lo malo de la vida a tu favor, escala montañas de problemas para deslizarte sobre soluciones, derrumba muros de decepciones para encontrar la libertar de la felicidad,  y quema la leña del fracaso para calentarte con el éxito. Recuerda que sin la oscuridad la luz no brillaría tanto.