Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
ЗВІТ
з лабораторної роботи № 1
з дисципліни «Програмування алгоритмічних структур»
Тема «Програмування розгалужених алгоритмів»
Варіант № 8
Завдання на лабораторну роботу.
1. Розробити блок-схеми алгоритмів і написати програми мовою Java із застосуванням умовного оператора if та оператора вибору switch для розв’язання завдань, поданих в табл. 1 – 4 відповідно до індивідуального варіанта. Варіант обрати за списком групи.
2. Розробити програмні проекти в середовищі Intellij IDEA для реалізації написаних програм. Перевірити результати обчислень альтернативними розрахунками (наприклад, Excel, калькулятор, тощо).
3. Зробити Звіт з лабораторної роботи та вчасно надіслати викладачу на перевірку.
Опис завдання табл. 1 для варіанта 18:
Опис завдання табл. 2:
Опис завдання табл. 3:
Опис завдання табл. 4:
Опис розв’язку завдання табл. 1:
Метод task1(double x) повертає результат обчислень double. Всередині метода я призначив значення змінним a, b, c – 0.7, 2.3, (x + b)2 відповідно.
Далі перше розгалуження за допомогою оператору if … else. Усі трі випадки перевіряють чи є число Ейлера у степені a + b більшим/рівним/меншим до числа Ейлера у степені x. В кожному із випадків я використовую статичні методи та змінні із класа Math.
Щоб не писати кожен раз Math.назваМетоду я в початку програми зробив статичний імпорт класа. Import static java.lang.Math.*; (java.lang. це шлях до класу у стандартній бібліотеці Java). Більшість із цих методів/змінних я вже знаю з першої лабораторної роботи. Деякі для мене нові.
Ось нові для першого завдання:
Math.E — ще одна статична змінна константа як Math.PI. Має значення числа Ейлера.
Atan() – повертає значення функції arctan(…)
sqrt() – повертає значення квадратного кореня числа
cbrt() – теж саме, але кубічний корень
За допомогою цих методів визначається результат завдання за вхідним параметром x та призначається змінній y. В кінці метод повертає значення у.
Опис розв’язку завдання табл. 2:
Метод task2(double x, int which) повертає результат обчислень double. За обчисленнями дуже схожий на минулий метод, але має новий математичний метод log() (значення натурального логарифму числа) та має декілька наборів початкових значень a, b, c.
”Вибір” набору здійснюється за допомогою другого параметра which, який проходить через розгалуження switch. Це більш спрощений if … else та працює лише як перевірка рівності із значеннями у вигляді незмінних констант. При which = 1 набор змінних один, а при which = 2 та which = 3 інші.
Як й у минулому методі, результат повертається через змінну у
Опис розв’язку завдання табл. 3:
Метод task3(double a, double b, double c) та не повертає значень.
У змінній average обчислюється середнє арифметичне трьох вхідних параметрів.
Та за допомогою трьох if перевіряється кожна змінна чи є вона за модулем більша за середнє арифметичне. Якщо так, то вона виводиться на екран.
Опис розв’язку завдання табл. 4:
Метод task4(double x, double y, double z) та не повертає значень.
Цей метод схож на минулий, але модулі параметрів порівнюються не із середнім арифметичним, а із числом Пі
Блок-схема до розв’язку завдання табл. 4:
Код програми:
import static java.lang.Math.*;public class LR21 { public static void main(String[] args) { double x1 = -2.3; double x2 = 0.6; double x3 = 4.8; System.out.printf("Task1 with x1 = %.4f\n", task1(x1)); System.out.printf("Task1 with x2 = %.4f\n", task1(x2)); System.out.printf("Task1 with x3 = %.4f\n", task1(x3)); System.out.printf("Task2 with x1 and the first set of variables = %.4f\n", task2(x1, 1)); System.out.printf("Task2 with x2 and the first set of variables = %.4f\n", task2(x2, 1)); System.out.printf("Task2 with x3 and the first set of variables = %.4f\n", task2(x3, 1)); System.out.printf("Task2 with x1 and the second set of variables = %.4f\n", task2(x1, 2)); System.out.printf("Task2 with x2 and the second set of variables = %.4f\n", task2(x2, 2)); System.out.printf("Task2 with x3 and the second set of variables = %.4f\n", task2(x3, 2)); System.out.printf("Task2 with x1 and the third set of variables = %.4f\n", task2(x1, 3)); System.out.printf("Task2 with x2 and the third set of variables = %.4f\n", task2(x2, 3)); System.out.printf("Task2 with x3 and the third set of variables = %.4f\n", task2(x3, 3)); } static double task1(double x) { double a = 0.7; double b = 2.3; double z = pow(a + b, 2.); double y = 0; if (pow(E, a + b) > pow(E, x)) { y = sin(pow(E, a + b)) + pow(x, 2.); } else if (pow(E, a + b) == pow(E, x)) { y = atan(a * b * z) + cbrt(x); } else if (pow(E, a + b) < pow(E, x)) { y = cos(sqrt(abs(x + a * b * z))); } return y; } static double task2(double x, int which) { double a, b, c; switch (which) { case 1: a = 3.5; b = -0.73; c = 2.5; break; case 2: a = 15.4; b = -5.6; c = 3.5; break; case 3: a = 5.1; b = 4.; c = 2.7; break; default: a = 0; b = 0; c = 0; } double y = 0; if (abs(1 - pow(x, 2.)) == a + c) { y = sqrt(abs(a * x - pow(cos(pow(b, 3.)), 2.) * x + 5.1 * pow(c, 2.))); } else if (abs(1 - pow(x, 2.)) > a + c) { y = pow(E, 0.04 * x) + log(abs(pow(b, 5.) * cos(x))); } else if (abs(1 - pow(x, 2.)) < a + c) { y = pow(cos(pow(b, 3.) * pow(x, 2.)), 2.) + log(abs(b * x - pow(a, 2.))); } return y; }}
import java.util.Scanner;import static java.lang.Math.*;public class LR22 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter a: "); double a = input.nextDouble(); System.out.print("Enter b: "); double b = input.nextDouble(); System.out.print("Enter c: "); double c = input.nextDouble(); System.out.println("The result of Task3:"); task3(a, b, c); System.out.println("***********************"); System.out.println("The result of Task4 with the first set of variables:"); double x = -7.2; double y = 3.14; double z = -2.5; task4(x, y, z); System.out.println("***********************"); System.out.println("The result of Task4 with the second set of variables:"); x = -4; y = -3; z = 9.15; task4(x, y, z); System.out.println("***********************"); System.out.println("The result of Task4 with the third set of variables:"); x = 3.14; y = -3.4; z = 0.59; task4(x, y, z); } static void task3(double a, double b, double c) { double average = (a + b + c) / 3; if (abs(a) > average) System.out.printf("|%.4f| > %f\n", a, average); if (abs(b) > average) System.out.printf("|%.4f| > %f\n", b, average); if (abs(c) > average) System.out.printf("|%.4f| > %f\n", c, average);; } static void task4(double x, double y, double z) { if (abs(x) > PI) System.out.printf("|%.4f| > PI\n", x); if (abs(y) > PI) System.out.printf("|%.4f| > PI\n", y); if (abs(z) > PI) System.out.printf("|%.4f| > PI\n", z); }}
Результати рішення програми
Висновок
Я написав мовою Java 4 алгоритми із застосуванням умовного оператора if та оператора вибору switch для розв’язання завдань, поданих в табл. 1-4 відповідно до індивідуального варіанта 18. Розробив програмні проекти в середовищі Intellij IDEA для реалізації написаних програм. Перевірив результати обчислень альтернативними розрахунками. Ознайомився із операторами розгалуження та новими математичними методами. Разробив блок схему 4-го завдання. Особливих труднощів не зустрів. Зробив звіт з лабораторної роботи та вчасно надіслав викладачу на перевірку.