C3 Projektowanie algorytmów z blokami decyzyjnymi wiczenie 1. Skonstruowa brakujce schematy blokowe i opracowa algorytmy w postaci listy kroków dla poniszych algorytmów zapisanych w jzyku Java. Algorytm 3.1. Rys. 3.1. Wyszukiwanie mniejszej sporód dwóch liczb a, b. public class BlokDecyzyjny { double a,b; String dane1 = JOptionPane.showInputDialog("Podaj a = "); a = Double.parseDouble(dane1); String dane2 = JOptionPane.showInputDialog("Podaj b = "); b = Double.parseDouble(dane2); System.out.println(" "); System.out.println(" a = " + a); System.out.println(" b = " + b); if(a <= b){ System.out.println("Najmniejsz liczb jest a" ); System.out.println("Najmniejsz liczb jest b" ); 1
Algorytm 3.2. public class LiczbaParzysta { int r = 0; int x; String dane = JOptionPane.showInputDialog("Podaj liczb naturaln wiksz od zera x = "); x = Integer.parseInt(dane); System.out.print("Badana liczba x = " + x); r = x % 2; if(r == 0){ System.out.println(" jest parzysta."); System.out.println(" nie jest parzysta."); Rys. 3.2. Schemat badania parzystoci liczb Rys. 3.3. Wyszukiwanie najmniejszej sporód trzech liczb a, b, c. 2
Algorytm 3.3. public class BlokDecyzyjny_1 { double a,b,c; String dane1 = JOptionPane.showInputDialog("Podaj a = "); a = Double.parseDouble(dane1); String dane2 = JOptionPane.showInputDialog("Podaj b = "); b = Double.parseDouble(dane2); String dane3 = JOptionPane.showInputDialog("Podaj c = "); c = Double.parseDouble(dane3); System.out.println(" "); System.out.println(" a = " + a); System.out.println(" b = " + b); System.out.println(" c = " + c); if(a <= b){ if(a <= c){ System.out.println("Najmniejsz liczb jest a"); System.out.println("Najmniejsz liczb jest c" ); else if(c <=b){ System.out.println("Najmniejsz liczb jest c" ); System.out.println("Najmniejsz liczb jest b" ); Rys. 3.4. Instrukcja warunkowa IF ELSE IF 3
Algorytm 3.4. public class BlokDecyzyjny_4 { double a,b,c; String dane1 = JOptionPane.showInputDialog("Podaj a = "); a = Double.parseDouble(dane1); String dane2 = JOptionPane.showInputDialog("Podaj b = "); b = Double.parseDouble(dane2); String dane3 = JOptionPane.showInputDialog("Podaj c = "); c = Double.parseDouble(dane3); System.out.println(" "); System.out.println(" a = " + a); System.out.println(" b = " + b); System.out.println(" c = " + c); if(a <= b ){ if(c <= a){ System.out.println(" c, a, b." ); else if(b <= c){ System.out.println(" a, b, c." ); System.out.println(" a, c, b." ); else if(c <= b){ { System.out.println(" c, b, a." ); else if(c <= a){ System.out.println(" b, c, a." ); System.out.println(" b, a, c." ); Wyniki testowania b = 2.0 b = 3.0 b = 3.0 a = 3.0 a = 3.0 b = 2.0 c = 3.0 a, b, c. c = 2.0 a, c, b. c = 3.0 b, a, c. c, a, b. c = 2.0 b, c, a. c, b, a. 4
b = 2.0 b = 2.0 c, a, b. c = 2.0 a, b, c. c, a, b. c, b, a. c = 2.0 b, c, a. c = 1. c, a, b. Algorytm 3.5. Rys. 3.5. Schemat blokowy rozwizywania układu równa liniowych metod wyznacznikow Cramera. public class MetodaCramera { double a1, b1, c1, a2, b2, c2, Wx, Wy, W, x, y; String wsp_a1 = JOptionPane.showInputDialog("a1 = "); a1 = Integer.parseInt(wsp_a1); String wsp_b1 = JOptionPane.showInputDialog("b1 = "); b1 = Integer.parseInt(wsp_b1); String wsp_c1 = JOptionPane.showInputDialog("c1 = "); c1 = Integer.parseInt(wsp_c1); String wsp_a2 = JOptionPane.showInputDialog("a2 = "); a2 = Integer.parseInt(wsp_a2); String wsp_b2 = JOptionPane.showInputDialog("b2 = "); 5
b2 = Integer.parseInt(wsp_b2); String wsp_c2 = JOptionPane.showInputDialog("c2 = "); c2 = Integer.parseInt(wsp_c2); W = a1*b2 - a2*b1; Wx = c1*b2 - c2*b1; Wy = a1*c2 - a2*c1; if(w == 0){ if(wx == 0 && Wy == 0){ System.out.println("Układ równa ma nieskoczenie wiele rozwiza."); else { System.out.println("Układ równa sprzeczny - brak rozwizania"); x = Wx/W; y = Wy/W; System.out.println("Rozwizaniem układu równa jest:"); System.out.println("x = " + x); System.out.println("y = " + y); Algorytm 3.6. public class FunkcjaLiniowa { System.out.println("Program oblicza miejsca zerowe funkcji liniowej"); double a = 1; double b = 2; if (a!= 0) { double x = -b / a; System.out.println("Miejsce zerowe x = " + x); else if (a ==0 && b == 0) { System.out.println("Funkcja posiada nieskoczenie wiele miejsc zerowych"); else if (a == 0 && b!= 0) { System.out.println("Funkcja nie posiada miejsc zerowych"); 6
Algorytm 3.7. public class RownaniaKwadratowe1 { double a = 1; if (a < 0){ System.out.println("Złe dane"); double b = 1; double c = 1; double delta = b * b - 4 * a * c; if (delta < 0){ System.out.println("Brak pierwiastków"); else if (delta == 0){ double x0 = -b / (2 * a); System.out.println("Xo = " + x0); else { double x1 = (-b - Math.sqrt(delta))/(2 * a); double x2 = (-b + Math.sqrt(delta))/(2 * a); System.out.println("X1 = " + x1 + " X2 = " + x2); Algorytm 3.8. public class RownaniaKwadratowe2 { System.out.println("Program oblicza miejsca zerowe funkcji kwadratowej"); double a = 0; double b = 0; double c = 0; double p =0; double q = 0; double delta = 0; double del1 = 0; double x0 = 0; double x1 = 0; double x2 = 0; InputStreamReader strumien = new InputStreamReader(System.in); BufferedReader wejscie = new BufferedReader(strumien); try{ System.out.print("Podaj a = "); a = Double.parseDouble(wejscie.readLine()); 7
if (a!= 0){ System.out.print("Podaj b = "); b = Double.parseDouble(wejscie.readLine()); System.out.print("Podaj c = "); c = Double.parseDouble(wejscie.readLine()); System.out.println("Współczynniki funkcji kwadratowej:"); System.out.println("a= "+a+" b= " +b+" c= "+c); System.out.println("Funkcja liniowa"); catch(exception e){ System.out.println("Wystpił błd"); return; { delta = b*b-4*a*c; p = b/a; q = c/a; del1 = p*p-4*q; System.out.println("delta = " +delta + " p= " +p + " q= " +q + " del1 = " +del1); if (delta >= 0){ if (del1 == 0){ x0 = -p/2; System.out.println("Xo = " +x0); if (p < 0){ x2 = (-p-math.sqrt(del1))/2; x1 = q/x2; x1 = (-p-math.sqrt(del1))/2; x2 = q/x1; System.out.print("X1 = " +x1 + " X2 = " +x2); System.out.println("Brak miejsc zerowych"); 8
ZADANIE 1. ZADANIA DO SAMODZIELNEGO WYKONANIA Skonstruowa schematy blokowe, opracowa algorytmy w postaci listy kroków oraz w postaci kodu w jzyku C ++ dla poniszego algorytmu zapisanego w jzyku Java. Algorytm 3.9. public class BlokDecyzyjny_3 { int dzien; String dane1 = JOptionPane.showInputDialog("Podaj dzie tygodnia (1-7): "); dzien = Integer.parseInt(dane1); System.out.print("Wybrano "); if(dzien == 1){ System.out.print("niedziel."); else if(dzien == 2){ System.out.print("poniedziałek."); else if(dzien == 3){ System.out.print("wtorek."); else if(dzien == 4){ System.out.print("rod."); else if(dzien == 5){ System.out.print("czwartek."); else if(dzien == 6){ System.out.print("pitek."); else if(dzien == 7){ System.out.print("sobot."); ZADANIE 2. Skonstruowa schemat blokowy, opracowa algorytmy w postaci listy kroków oraz w postaci kodu w jzyku C ++ do: a) Wyznaczania miejsc zerowych funkcji liniowej. b) Rozwizywania układów równa liniowych z trzema niewiadomymi. c) Rozwizywania równa kwadratowych według tzw. algorytmu szkolnego. d) Rozwizywania równa kwadratowych według algorytmu stabilnego numerycznie. e) Porzdkowania czterech liczb. f) Obliczania wartoci wyrae wymiernych W(x)=P(x)/Q(x) dla zadanej wartoci x. 9