Funkcja, a złe argumenty

Funkcja, a złe argumenty
RA
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 10 lat
  • 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:ponad 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:607
1

To się nadaje na rzucenie wyjątku :)

kaczus
  • Rejestracja:około 10 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Łódź
  • Postów:1402
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.


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie
satirev
std::sqrt zwróci NaN dla argumentu < 0.
spartanPAGE
a powinno zwracać liczbę zespoloną :D
kaczus
całkiem możliwe, ponieważ standard liczb zmiennoprzecinkowych tak każe.
satirev
@spartanPAGE napisz proposal żeby zwracali std::complex ; D
Azarien
@spartanPAGE: a kto powiedział że zespoloną? pierwiastek z liczby ujemnej nie istnieje, jeśli operujemy na zbiorze liczb rzeczywistych. co istnieje to pierwiastek z zespolonej liczby -1+0i
RA
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 10 lat
  • 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:ponad 21 lat
  • Ostatnio:około 6 godzin
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ć.

RA
Tak tak wiem, że nie jest potrzebna, to tylko przykładowa funkcja co pierwsza mi przyszła do głowy, chciałem po prostu się dowiedzieć czy istnieje taka możliwość

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.