¿Me ayudan por favor?

Iniciado por Sah4, 30 Mayo 2021, 22:32 PM

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

Sah4

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 (cpp) [Seleccionar]

DtxdF

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 (cpp) [Seleccionar]
#include<iostream>
#include<cmath>

using namespace std;

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

Raiz::Raiz(double a)
{
    if (a <= 0)
        throw "Debes de colocar un numero positivo";
    this->a=a;
    this->b=sqrt(a);   
}

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

int main()
{
    cout<<"Programa que saca raiz cuadrada"<<endl<<endl;
    try {
        Raiz r(1);
        r.mostrar_raiz();
    } catch (const char *exp) {
        cout << exp << endl;
        return EXIT_FAILURE;
    }
   
    return EXIT_SUCCESS;
}


~ DtxdF

Sah4