Przeczytaj
Funkcje – omówienie
FunkcjaFunkcja jest wydzielonym fragmentem kodu programu, odpowiedzialnym za wykonywanie określonego zadania – na przykład obliczenie wyniku działań matematycznych. Raz zdefiniowana funkcja może być używana wielokrotnie: wystarczy ją wywołać w odpowiednim miejscu programu, bez konieczności kopiowania tych samych poleceń.
Funkcje w programowaniu przypominają nieco funkcje matematyczne, które przyporządkowują argumentom określone wartości. W programowaniu jest podobnie: funkcja przyjmuje argumentyargumenty, przetwarza je i zwraca pewną wartość. Należy jednak podkreślić, że funkcja zdefiniowana w programie nie musi przyjmować żadnych argumentów – i tym różni się od funkcji matematycznej.
W niektórych językach programowania można zetknąć się również z pojęciem procedura. Jest to konstrukcja podobna do funkcji. Różnica polega na tym, że procedura pobiera dane, które następnie przetwarza, ale nie zwraca żadnej wartości. W dalszej części tekstu będziemy posługiwać się wyłącznie terminem funkcja.
Umiejętność definiowania funkcji i posługiwania się nimi jest bardzo istotna dla każdego programisty. Dzielenie większych i powtarzalnych zadań na funkcje nie tylko skraca kod, ale także ułatwia jego analizowanie.
Błędy obliczeń na przykładzie wyznaczania miejsc zerowych funkcji kwadratowej
Zapewne niejednokrotnie zdarzyło ci się rozwiązywać równanie kwadratowe, czyli znajdować miejsca zerowe funkcji opisanej wzorem:
Współczynniki , i są stałymi, przy czym . Gdyby współczynnik , mielibyśmy do czynienia z funkcją liniową.
Równanie kwadratowe ma postać:
Znasz wzory służące do wyznaczania liczby rozwiązań takiego równania oraz obliczania wartości pierwiastków:
Dla istnieją dwa rozwiązania:
Dla istnieje jedno rozwiązanie:
Dla równanie nie ma rozwiązania.
Przedstawione wzory moglibyśmy wykorzystać, pisząc program obliczający pierwiastki równania kwadratowego. Należy jednak pamiętać o ograniczeniach związanych ze sposobem zaokrąglania liczb podczas zapisywania wartości pierwiastka. Jeśli spróbujemy przechowywać go w zmiennej typu całkowitego, utracimy całą część ułamkową.
Błąd taki łatwo jest naprawić – wystarczy użyć typu zmiennoprzecinkowego. Niestety, także i w tym wypadku nie da się wykluczyć, że wynik zostanie zaokrąglony. Błąd tego typu jest nie do usunięcia.
Gdy rozwiązujemy równanie kwadratowe, może również dojść do pojawienia się błędu podczas wykonywania następującego działania:
Jeżeli licznik ułamka będzie miał wartość bardzo bliską zera, mogą pojawić się błędy zaokrąglenia. Wyeliminujemy je, stosując inny algorytmalgorytm obliczeń.
Algorytmy niestabilne są algorytmami, których zastosowanie dla pewnych danych wejściowych skutkuje uzyskaniem niedokładnych wyników. Zastosowanie algorytmów stabilnych eliminuje natomiast wszystkie możliwe do uniknięcia błędy związane z zaokrągleniami.
Stabilny algorytm rozwiązywania równania kwadratowego
W celu wyeliminowania błędów zaokrągleń należy użyć wzoru służącego do obliczania wyróżnika równania kwadratowego (delty) oraz jednego z wzorów Viete'a.
Wzorów tych możemy używać, gdy chcemy obliczyć miejsca zerowe dla funkcji kwadratowej postaci:
Gdzie, aby funkcja była funkcją kwadratową, .
Wzory te prezentują następujące zależności:
Ostatecznie pierwszy przyjmuje postać:
oraz analogicznie:
Natomiast drugi przyjmuje postać:
Skorzystamy z drugiego wzoru. Po przekształceniu zależność ta pozwala obliczyć wartość :
Jeśli obliczymy wartość , która nie jest obarczona wspomnianym już błędem zaokrąglenia, możemy również wyznaczyć , korzystając ze wzoru Viete'a. Pozwoli to uniknąć błędu zaokrąglenia także w przypadku drugiego miejsca zerowego.
Słownik
skończona lista instrukcji prowadzących do zrealizowania pewnego zadania; często przedstawiany jest w postaci schematu blokowego lub listy kroków
wartość, która jest przekazywana funkcji
wydzielony fragment kodu programu, odpowiedzialny za wykonanie pewnych operacji; funkcja może być wykorzystywana wielokrotnie oraz używać własnych zmiennych lokalnych; funkcje są nazywane również podprogramami lub – gdy nie zwracają żadnej wartości – procedurami