Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
ЗВІТ
з лабораторної роботи № 2
з дисципліни «Програмування алгоритмічних структур»
Тема «Програмування розгалужених алгоритмів»
Варіант №7
Завдання на лабораторну роботу
1. Розробити блок-схеми алгоритмів і написати програми мовою Java із застосуванням умовного оператора if та оператора вибору switch для розв’язання завдань, поданих в табл. 1 – 4 відповідно до індивідуального варіанта. Варіант обрати за списком групи.
2. Розробити програмні проекти в середовищі Intellij IDEA для реалізації написаних програм. Перевірити результати обчислень альтернативними розрахунками (наприклад, Excel, калькулятор, тощо).
3. Зробити Звіт з лабораторної роботи та вчасно надіслати викладачу на перевірку.
Завдання 1:
/
Завдання 2:
/
Завдання 3:
/
Завдання 4:
/
Опис рішення завдання
Для першого та другого завдання було створено окремий файл LR21.java, в якому було реалізовано 3 методи: main, task1, task2.
В методі task1 було введено значення a, b та обраховано значення z. Потім використовуючи if, else було створено функції для обрахування значення y, в залежності від значення х. Також було використано бібліотеку java.lang.Math.*. Це дозволило більш зручно використовувати математичні функції, такі як tan(), abs(), pow(), cos(), sin(), sqrt(), log().
В методі task2 було використано оператор switch, завдяки якій було реалізовано 3 варіанти набору значень a, b, c. Потім використовуючи if, else було створено функції для обрахування значення y, в залежності від значення х та набору значень a, b, c. Було використано математичні функції, які були написані в попередньому абзаці.
В методі main було введено значення для х1, х2 та х3. Потім було виведено результати завдання 1(3 результати, які були обраховані в залежності від трьох значень х). Нижче виведення результатів завдання 2(9 результатів, які залежать від значень трьох х та трьох наборів значень a, b, c). Вивід було реалізовано завдяки printf(). Це функція форматованого виводу. Завдяки “%4f” виводятся числа тільки з 4 знаками після коми.
Для третього та четвертого завдання було створено окремий файл LR22.java, в якому було реалізовано 3 методи: main, task3, task4.
В методі task3 перевіряється трикутник на те, чи є він прямокутним. Перевірено було завдяки наслідку з теореми Піфагора (якщо квадрат найбільшої сторони трикутника дорівнює сумі квадратів інших сторін, то трикутник є прямокутним). Цей метод належить до типу Boolean.
В методі task4 спочатку створено змінні x0, y0, x1, y1, а потім задано набори цих значень завдяки оператору switch. Потім було визначено яка точка менш віддалена від точки О. Так як точка О має координати (0,0), то для того щоб визначити яка точка менш віддалена від О потрібно знайти суму квадратів координат першої точки та суму квадратів координат другої точки, а потім визначити у якої точки менше число. В залежності від результатів виводяться різні значення завдяки оператору if.
В методі main присвоюються значення для a,b,c, які користувач вводе з клавіатури(зроблено це завдяки java.util.Scanner). Потім в залежності від результатів масиву task3 виводиться відповідь. Це все повторюється ще два рази для інших значень a,b,c. Нижче викликається метод task4.
Блок-схема для завдання 4
/
Код програми LR21
import static java.lang.Math.*;public class LR21 { public static void main(String[] args) { double x1=-2.3, x2=0.6, x3=4.8; System.out.println("------------Task 1------------"); System.out.println("Початкові дані: a=1.5, b=0.7"); System.out.printf("x1=-2.3 ---> y=%.4f\n", task1(x1)); System.out.printf("x2=0.6 ---> y=%.4f\n", task1(x2)); System.out.printf("x3=4.8 ---> y=%.4f\n", task1(x3)); System.out.println("------------Task 2------------"); System.out.println("Case 1 (a=3.2, b=-0.7, c=2.2):"); System.out.printf("x1=-2.3 ---> y=%.4f\n", task2(x1,1)); System.out.printf("x2=0.6 ---> y=%.4f\n", task2(x2,2)); System.out.printf("x3=4.8 ---> y=%.4f\n", task2(x3,3)); System.out.println("Case 2 (a=10.5, b=-2.5, c=5.6):"); System.out.printf("x1=-2.3 ---> y=%.4f\n", task2(x1,1)); System.out.printf("x2=0.6 ---> y=%.4f\n", task2(x2,2)); System.out.printf("x3=4.8 ---> y=%.4f\n", task2(x3,3)); System.out.println("Case 3 (a=5.4, b=3, c=2.6):"); System.out.printf("x1=-2.3 ---> y=%.4f\n", task2(x1,1)); System.out.printf("x2=0.6 ---> y=%.4f\n", task2(x2,2)); System.out.printf("x3=4.8 ---> y=%.4f\n", task2(x3,3)); } public static double task1(double x){ double a=1.5, b=0.7,y = 0, z=tan(abs(tan(b*x))); if(x<=a) { y=a*pow(cos(x),2)+b*pow(sin(z*x),2); } else if(a<x & x<=4.5*b) { y=a*tan(pow(sin(b*x),2)+z); } else if(x>4.5*b) { y=log(a*x-b)+pow(z,2); } return y; } static double task2(double x, int num){ double a, b, c, y; switch (num) { case 1: a=3.2; b=-0.7; c=2.2; break; case 2: a=10.5; b=-2.5; c=5.6; break; case 3: a=5.4; b=3; c=2.6; break; default: a=0; b=0; c=0; break; } if(abs(1-pow(x, 2)) == a+c) { y=x*pow(E,a)+pow(E,abs(b*c)); } else if(abs(1-pow(x,2))>(a+c)){ y=pow(sin(a*x),2)+cos(b*c); } else { y=sqrt(a*pow(b,4)+pow(c*pow(x,2),(1/5))); } return y; }}
Код програми LR22
import static java.lang.Math.*;import java.util.Scanner;public class LR22 { public static void main(String[] args) { System.out.println("------------Task 3------------"); Scanner input = new Scanner(System.in); System.out.print("Enter a: ");//набір вхідних данних 1 double a = input.nextDouble(); System.out.print("Enter b: "); double b = input.nextDouble(); System.out.print("Enter c: "); double c = input.nextDouble(); if(task3(a,b,c)) { //Вивід результату 1 System.out.printf("Result is %b%n", task3(a,b,c)); System.out.println("Трикутник зі сторонами " + a + ", " + b + ", " + c + " є прямокутним"); } else { System.out.printf("Result is %b%n", task3(a,b,c)); System.out.println("Трикутник зі сторонами " + a + ", " + b + ", " + c + " не є прямокутним"); } System.out.println(); System.out.print("Enter a: ");//набір вхідних данних 2 a = input.nextDouble(); System.out.print("Enter b: "); b = input.nextDouble(); System.out.print("Enter c: "); c = input.nextDouble(); if(task3(a,b,c)) { //Вивід результату 2 System.out.printf("Result is %b%n", task3(a,b,c)); System.out.println("Трикутник зі сторонами " + a + ", " + b + ", " + c + " є прямокутним"); } else { System.out.printf("Result is %b%n", task3(a,b,c)); System.out.println("Трикутник зі сторонами " + a + ", " + b + ", " + c + " не є прямокутним"); } System.out.println(); System.out.print("Enter a: ");//набір вхідних данних 3 a = input.nextDouble(); System.out.print("Enter b: "); b = input.nextDouble(); System.out.print("Enter c: "); c = input.nextDouble(); if(task3(a,b,c)) { //Вивід результату 3 System.out.printf("Result is %b%n", task3(a,b,c)); System.out.println("Трикутник зі сторонами " + a + ", " + b + ", " + c + " є прямокутним"); } else { System.out.printf("Result is %b%n", task3(a,b,c)); System.out.println("Трикутник зі сторонами " + a + ", " + b + ", " + c + " не є прямокутним"); } System.out.println(); System.out.println(); System.out.println(); System.out.println("------------Task 4------------"); task4(1); task4(2); task4(3); } static boolean task3(double a, double b, double c){ if(((pow(a, 2) == pow(b, 2) + pow(c, 2)) | (pow(b,2)==pow(a,2)+pow(c,2)) | (pow(c,2)==pow(a,2)+pow(b,2))) & (a>0) & (b>0) & (c>0) ){ return true; } else return false; } static void task4(int num){ double x0, y0, x1, y1; switch (num) { case 1: x0=2; y0=2; x1=-4; y1=0; break; case 2: x0=8; y0=9; x1=12; y1=1; break; case 3: x0=-3; y0=0.9; x1=2; y1=3; break; default: x0=0; y0=0; x1=0; y1=0; break; } if((pow(x0,2)+pow(y0,2)) > (pow(x1,2)+pow(y1,2))){ //так як точка О має координати (0;0), то ця рівність є достатньою умовою для визнаення віддстані до точки О(0;0) System.out.println("Точка В("+x1+";"+y1+") менш віддалена від точки O(0;0)."); } else { if ((pow(x0,2)+pow(y0,2)) < (pow(x1,2)+pow(y1,2))){ System.out.println("Точка A("+x0+";"+y0+") менш віддалена від точки O(0;0)."); } else { System.out.println("Точка O(0;0) рівновіддалена від точок A("+x0+";"+y0+") та В("+x1+";"+y1+")."); } } }}
Результат програми
/
/
Висновок: Я створив дві програми, в яких було використано декілька методів, різні способи присвоєння значень змінним. В програмах виконано 4 завдання. Було використано умовний оператор if, оператор switch, форматований вивід printf, математичні функції. Створив блок-схему для завдання 4.