Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Implementacja algorytmu w języku Java

Polecenie 1

Przypomnij sobie, jak rozwiązać układ dwóch równań z dwiema niewiadomymi: { a 1 x   +   b 1 y = c 1 a 2 x   +   b 2 y = c 2

Po wykonaniu Polecenia 1 możemy przejść do implementacji odpowiedniego algorytmu w języku Java.

Specyfikacja:

Dane:

  • a1, b1, c1, a2, b2, c2 – liczby rzeczywiste; wprowadzone przez użytkownika współczynniki

Wynik:

Na standardowym wyjściu program wyświetla tekstową informację o liczbach rzeczywistych x oraz y, które są rozwiązaniem układu równań, bądź informację o tym, że układ jest sprzeczny lub nie ma rozwiązań.

W programie będziemy wykorzystywać cztery funkcje:

  • double obliczW() – funkcja ta będzie wyliczać i zwracać wartość wyznacznika W;

  • double obliczWx() – funkcja ta będzie wyliczać i zwracać wartość wyznacznika WIndeks dolny x;

  • double obliczWy() – funkcja ta będzie wyliczać i zwracać wartość wyznacznika WIndeks dolny y;

  • String obliczUkladRownan() – funkcja ta będzie korzystać z wymienionych funkcji i zwracać rozwiązanie układu równań w postaci pary liczb rzeczywistych (x, y) lub zwracać komunikat informujący, że układ ma nieskończenie wiele rozwiązań, bądź jest sprzeczny.

Zadeklarujmy wypisane funkcje.

Linia 1. public class MetodaWyznacznikow otwórz nawias klamrowy. Linia 2. static double obliczW otwórz nawias okrągły double a1 przecinek double b1 przecinek double a2 przecinek double b2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. zamknij nawias klamrowy. Linia 6. static double obliczWx otwórz nawias okrągły double c1 przecinek double b1 przecinek double c2 przecinek double b2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. zamknij nawias klamrowy. Linia 10. static double obliczWy otwórz nawias okrągły double a1 przecinek double c1 przecinek double a2 przecinek double c2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. zamknij nawias klamrowy. Linia 14. static String obliczUkladRownan otwórz nawias okrągły double a1 przecinek double b1 przecinek double c1 przecinek double a2 przecinek double b2 przecinek double c2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 16. zamknij nawias klamrowy. Linia 18. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 20. zamknij nawias klamrowy. Linia 21. zamknij nawias klamrowy.

Zacznijmy od wypełnienia bloku funkcji obliczW(), która zwróci wyliczoną wartość głównego wyznacznika.

Linia 1. static double obliczW otwórz nawias okrągły double a1 przecinek double b1 przecinek double a2 przecinek double b2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. return a1 asterysk b2 minus a2 asterysk b1 średnik. Linia 3. zamknij nawias klamrowy.

Zgodnie ze wzorami, definiujemy operacje matematyczne, jakie mają się wykonać po wywołaniu funkcji. W taki sam sposób postępujemy z funkcjami obliczWx() oraz obliczWy().

Linia 1. static double obliczWx otwórz nawias okrągły double c1 przecinek double b1 przecinek double c2 przecinek double b2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. return c1 asterysk b2 minus c2 asterysk b1 średnik. Linia 3. zamknij nawias klamrowy.
Linia 1. static double obliczWy otwórz nawias okrągły double a1 przecinek double c1 przecinek double a2 przecinek double c2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. return a1 asterysk c2 minus a2 asterysk c1 średnik. Linia 3. zamknij nawias klamrowy.

Następnie zajmijmy się funkcją obliczUkladRownan(), w której wywołamy utworzone funkcje w celu obliczenia wyznaczników, określimy liczbę rozwiązań oraz – w przypadku gdy układ równań jest oznaczony – nastąpi wyliczenie wartości xy.

Zacznijmy od zadeklarowania zmiennych typu double, które będą przechowywały wyliczone wartości wyznaczników W, WIndeks dolny x oraz WIndeks dolny y. Zdeklarowana została również zmienna rozwiazanie, która będzie przechowywała komunikat wyjściowy, zawierający informację o rozwiązaniu układu równań.

Linia 1. static String obliczUkladRownan otwórz nawias okrągły double a1 przecinek double b1 przecinek double c1 przecinek double a2 przecinek double b2 przecinek double c2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. double W znak równości obliczW otwórz nawias okrągły a1 przecinek b1 przecinek a2 przecinek b2 zamknij nawias okrągły średnik. Linia 3. double Wx znak równości obliczWx otwórz nawias okrągły c1 przecinek b1 przecinek c2 przecinek b2 zamknij nawias okrągły średnik. Linia 4. double Wy znak równości obliczWy otwórz nawias okrągły a1 przecinek c1 przecinek a2 przecinek c2 zamknij nawias okrągły średnik. Linia 5. String rozwiazanie znak równości cudzysłów cudzysłów średnik. Linia 6. zamknij nawias klamrowy.

Następnie zdefiniujmy omówione przypadki przy pomocy instrukcji warunkowej if-else.

  • Wyznacznik W ≠ 0 – układ oznaczony, następuje wyliczenie, ze wzorów, wartości x oraz y.

  • Wyznaczniki W = 0 oraz WIndeks dolny x = 0 oraz WIndeks dolny y = 0 – układ nieoznaczony, jest nieskończenie wiele rozwiązań układu.

  • Wyznacznik W = 0 oraz (WIndeks dolny x ≠ 0 lub WIndeks dolny y ≠ 0) – układ sprzeczny, brak rozwiązań układu równań.

Zwracamy zmienną rozwiązanie przy pomocy słowa kluczowego return.

Linia 1. static String obliczUkladRownan otwórz nawias okrągły double a1 przecinek double b1 przecinek double c1 przecinek double a2 przecinek double b2 przecinek double c2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. double W znak równości obliczW otwórz nawias okrągły a1 przecinek b1 przecinek a2 przecinek b2 zamknij nawias okrągły średnik. Linia 3. double Wx znak równości obliczWx otwórz nawias okrągły c1 przecinek b1 przecinek c2 przecinek b2 zamknij nawias okrągły średnik. Linia 4. double Wy znak równości obliczWy otwórz nawias okrągły a1 przecinek c1 przecinek a2 przecinek c2 zamknij nawias okrągły średnik. Linia 5. String rozwiazanie znak równości cudzysłów cudzysłów średnik. Linia 7. if otwórz nawias okrągły W wykrzyknik znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. double x znak równości Wx prawy ukośnik W średnik. Linia 9. double y znak równości Wy prawy ukośnik W średnik. Linia 11. rozwiazanie znak równości cudzysłów Rozwiązaniami układu są dwukropek lewy ukośnik n x znak równości cudzysłów plus x plus cudzysłów lewy ukośnik n oraz lewy ukośnik n cudzysłów plus cudzysłów y znak równości cudzysłów plus y średnik. Linia 12. zamknij nawias klamrowy else if otwórz nawias okrągły Wx znak równości znak równości 0 ampersant ampersant Wy znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. rozwiazanie znak równości cudzysłów Układ równań posiada nieskończenie wiele rozwiązań cudzysłów średnik. Linia 14. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 15. rozwiazanie znak równości cudzysłów Układ sprzeczny minus nie posiada rozwiązań cudzysłów średnik. Linia 16. zamknij nawias klamrowy. Linia 18. return rozwiazanie średnik. Linia 19. zamknij nawias klamrowy.

Ostatnie co należy zrobić, to napisać kod odpowiedzialny za interakcję programu z potencjalnym użytkownikiem i wywołanie funkcji obliczUkladRownan() wraz z wypisaniem rozwiązania.

Klasa Scanner zostanie wykorzystana do pobrania wartości argumentówargumentargumentów od użytkownika. Kolejne wartości będą przechowywane w zadeklarowanych zmiennych a1, b1, c1, a2, b2, c2.

Linia 1. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. double a1 przecinek b1 przecinek c1 przecinek a2 przecinek b2 przecinek c2 średnik. Linia 4. Scanner scanner znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 5. a1 znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 6. b1 znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 7. c1 znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 8. a2 znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 9. b2 znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 10. c2 znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 12. System kropka out kropka println otwórz nawias okrągły obliczUkladRownan otwórz nawias okrągły a1 przecinek b1 przecinek c1 przecinek a2 przecinek b2 przecinek c2 zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 13. zamknij nawias klamrowy.
Ważne!

Ponieważ użyta została zewnętrzna klasa Scanner, należy pamiętać o dodaniu:

Linia 1. import java kropka util kropka Scanner średnik.

Oto cały kod programu:

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class MetodaWyznacznikow otwórz nawias klamrowy. Linia 4. static double obliczW otwórz nawias okrągły double a1 przecinek double b1 przecinek double a2 przecinek double b2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. return a1 asterysk b2 minus a2 asterysk b1 średnik. Linia 6. zamknij nawias klamrowy. Linia 8. static double obliczWx otwórz nawias okrągły double c1 przecinek double b1 przecinek double c2 przecinek double b2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. return c1 asterysk b2 minus c2 asterysk b1 średnik. Linia 10. zamknij nawias klamrowy. Linia 12. static double obliczWy otwórz nawias okrągły double a1 przecinek double c1 przecinek double a2 przecinek double c2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. return a1 asterysk c2 minus a2 asterysk c1 średnik. Linia 14. zamknij nawias klamrowy. Linia 16. static String obliczUkladRownan otwórz nawias okrągły double a1 przecinek double b1 przecinek double c1 przecinek double a2 przecinek double b2 przecinek double c2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 17. double W znak równości obliczW otwórz nawias okrągły a1 przecinek b1 przecinek a2 przecinek b2 zamknij nawias okrągły średnik. Linia 18. double Wx znak równości obliczWx otwórz nawias okrągły c1 przecinek b1 przecinek c2 przecinek b2 zamknij nawias okrągły średnik. Linia 19. double Wy znak równości obliczWy otwórz nawias okrągły a1 przecinek c1 przecinek a2 przecinek c2 zamknij nawias okrągły średnik. Linia 20. String rozwiazanie znak równości cudzysłów cudzysłów średnik. Linia 22. if otwórz nawias okrągły W wykrzyknik znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 23. double x znak równości Wx prawy ukośnik W średnik. Linia 24. double y znak równości Wy prawy ukośnik W średnik. Linia 26. rozwiazanie znak równości cudzysłów Rozwiązaniami układu są dwukropek lewy ukośnik n x znak równości cudzysłów plus x plus cudzysłów lewy ukośnik n oraz lewy ukośnik n cudzysłów plus cudzysłów y znak równości cudzysłów plus y średnik. Linia 27. zamknij nawias klamrowy else if otwórz nawias okrągły Wx znak równości znak równości 0 ampersant ampersant Wy znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 28. rozwiazanie znak równości cudzysłów Układ równań posiada nieskończenie wiele rozwiązań cudzysłów średnik. Linia 29. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 30. rozwiazanie znak równości cudzysłów Układ sprzeczny minus nie posiada rozwiązań cudzysłów średnik. Linia 31. zamknij nawias klamrowy. Linia 33. return rozwiazanie średnik. Linia 34. zamknij nawias klamrowy. Linia 36. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 37. double a1 przecinek b1 przecinek c1 przecinek a2 przecinek b2 przecinek c2 średnik. Linia 39. Scanner scanner znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 40. a1 znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 41. b1 znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 42. c1 znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 43. a2 znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 44. b2 znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 45. c2 znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 47. System kropka out kropka println otwórz nawias okrągły obliczUkladRownan otwórz nawias okrągły a1 przecinek b1 przecinek c1 przecinek a2 przecinek b2 przecinek c2 zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 48. zamknij nawias klamrowy. Linia 49. zamknij nawias klamrowy.

Napisane przez nas funkcje obliczWx(), obliczW() oraz obliczWy() realizują te same działania, tylko na innych wartościach liczbach – możliwe jest zastąpienie trzech funkcji jedną. Takie rozwiązanie zostanie przedstawione w następnej części lekcji.

Słownik

argument
argument

element składni w określonym języku programowania, który w wyniku wywołania podprogramu zostaje utożsamiony (skojarzony) z określonym parametrem podprogramu

parametr
parametr

element składni w określonym języku programowania, umożliwiający komunikację pomiędzy podprogramem wywołanym a programem wywołującym; parametry określa się wraz z deklaracją określonego podprogramu w jego nagłówku