Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Sah4 en 30 Mayo 2021, 22:32 pm



Título: ¿Me ayudan por favor?
Publicado por: Sah4 en 30 Mayo 2021, 22:32 pm
Me podrían ayudar, hice un programa que me da la raíz cuadrada de un número y me suelta una excepción cuando pongo un número negativo, el problema es que no se como hacer que el programa solo me dé la excepción cuando digite un número negativo y no me haga la operación, y también que el programa se detenga cuando digite el 0.

#include<iostream>
#include<cmath>
using namespace std;

class Raiz{
   public:
      double a, b;
      Raiz(double a);
      void mostrar_raiz();
};

Raiz::Raiz(double a){
      
   try{
   if(a<0)
   throw"Debes de colocar un numero positivo";
   this->a=a;
    this->b=sqrt(a);   
   }
   catch(const char* exp){
       cout<<exp<<endl;
   }
}

void Raiz::mostrar_raiz(){
   cout<<"La raiz cuadrada de "<<a<<" es: "<<b;
}

int main(){
cout<<"Programa que saca raiz cuadrada"<<endl<<endl;
Raiz r(4);
r.mostrar_raiz();
   
   return 0;
}
   
Código
  1.  


Título: Re: ¿Me ayudan por favor?
Publicado por: DtxdF en 31 Mayo 2021, 00:46 am
Hola @Genesis_4

Usa Código GeShi (esto tiene que ver con la publicación en sí), para que la lectura de tu código en el foro sea amena.

Citar
...también que el programa se detenga cuando digite el 0

Debes cambiar if (a < 0) (si el contenido que hace referencia la variable a es menor que 0) por if (a <= 0) (si el contenido que hace referencia la variable a es menor o igual a 0).

El problema es que estás lanzando la excepción y atajándola dentro del mismo Raiz y luego imprimiéndola, por lo tanto nunca impides que se llame al método mostrar_raiz(). Debes atajarla en la misma función main(), por ejemplo, y luego sailr.

Código
  1. #include<iostream>
  2. #include<cmath>
  3.  
  4. using namespace std;
  5.  
  6. class Raiz {
  7.   public:
  8.      double a, b;
  9.      Raiz(double a);
  10.      void mostrar_raiz();
  11. };
  12.  
  13. Raiz::Raiz(double a)
  14. {
  15.    if (a <= 0)
  16.        throw "Debes de colocar un numero positivo";
  17.    this->a=a;
  18.    this->b=sqrt(a);  
  19. }
  20.  
  21. void Raiz::mostrar_raiz()
  22. {
  23.    cout << "La raiz cuadrada de "<< a << " es: " << b << endl;
  24. }
  25.  
  26. int main()
  27. {
  28.    cout<<"Programa que saca raiz cuadrada"<<endl<<endl;
  29.    try {
  30.        Raiz r(1);
  31.        r.mostrar_raiz();
  32.    } catch (const char *exp) {
  33.        cout << exp << endl;
  34.        return EXIT_FAILURE;
  35.    }
  36.  
  37.    return EXIT_SUCCESS;
  38. }

~ DtxdF


Título: Re: ¿Me ayudan por favor?
Publicado por: Sah4 en 31 Mayo 2021, 04:21 am
Muchas gracias.