Funkcja, a złe argumenty

Funkcja, a złe argumenty
RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
0

Mam przykładową funkcję:

Kopiuj
 
float pierwiastek(float x)
{
    return sqrt(x);
}

Jak wiadomo pierwiastek z liczby nie może być ujemny. Jak najlepiej zabezpieczyć program przed wpisaniem przez użytkownika liczby ujemnej?
Chodzi mi o to by zrobić to w funkcji, przychodzi mi tylko pomysł, żeby zrobić if/else, który przy dodatniej liczbie zwróci wynik, a przy ujemnej 0, jednak chciałbym w przypadku ujemnej liczby zwrócić komunikat typu "Liczba musi być dodatnia". Jest to możliwe?

stryku
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 607
1

To się nadaje na rzucenie wyjątku :)

kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1403
1

jeśli to c++ możesz np rzucić wyjątek. I raczej nie powinieneś zwracać 0! Jeśli c to ustawić jakąś zmienną i zwrócić NaN.

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
0

Dzięki, dopiero zaczynam to rzucania wyjątków jeszcze nie znałem.
Czy tak będzie poprawnie?

Kopiuj
 
float pierwiastek(float x)
{
    if(x<0){
        string str="Nie mozna pierwiastkowac liczb ujemnych!";
        throw str;}
    return sqrt(x);
}
Kopiuj
try
    {
       cout<<pierwiastek(-9)<<endl;
    }

catch (string str)
    {
       cout<<str;
    } 
Azarien
  • Rejestracja: dni
  • Ostatnio: dni
2

Jak wiadomo pierwiastek z liczby nie może być ujemny. Jak najlepiej zabezpieczyć program przed wpisaniem przez użytkownika liczby ujemnej?

Dokładnie ta jak mówisz: zabezpieczyć przed wpisaniem, czyli tam gdzie pobierasz od użytkownika liczbę, albo nawet tam gdzie się ją wpisuje (uniemożliwiając wpisana minusa), a nie tam gdzie już to liczysz.

Funkcja pierwiastek jest zupełnie niepotrzebna, używaj po prostu sqrt tam gdzie masz jej użyć.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.