Przypomnij sobie, jak rozwiązać układ dwóch równań z dwiema niewiadomymi:
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;x;
double obliczWy() – funkcja ta będzie wyliczać i zwracać wartość wyznacznika WIndeks dolny y;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.
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().
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 x i y.
Zacznijmy od zadeklarowania zmiennych typu double, które będą przechowywały wyliczone wartości wyznaczników W, WIndeks dolny xx oraz WIndeks dolny yy. 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 orazWIndeks dolny xx = 0 orazWIndeks dolny yy = 0 – układ nieoznaczony, jest nieskończenie wiele rozwiązań układu.
Wyznacznik W = 0 oraz (WIndeks dolny xx ≠ 0 lubWIndeks dolny yy ≠ 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.
static String obliczUkladRownan(double a1, double b1, double c1, double a2, double b2, double c2) {
double W = obliczW(a1, b1, a2, b2);
double Wx = obliczWx(c1, b1, c2, b2);
double Wy = obliczWy(a1, c1, a2, c2);
String rozwiazanie = "";
if (W != 0) {
double x = Wx / W;
double y = Wy / W;
rozwiazanie = "Rozwiązaniami układu są: \n x = " + x + "\n oraz \n" + "y = " + y;
} else if (Wx == 0 && Wy == 0) {
rozwiazanie = "Układ równań posiada nieskończenie wiele rozwiązań";
} else {
rozwiazanie = "Układ sprzeczny - nie posiada rozwiązań";
}
return rozwiazanie;
}
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.
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