Додаток 2
Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
ЗВІТ
з лабораторної роботи № 2
з дисципліни «Програмування алгоритмічних структур»
Тема «Програмування розгалужених алгоритмів»
Варіант № 16
Мета роботи: набуття практичних навичок використання умовного опера-тораifта операторавиборуswitchпри створюванніпрограмних проектіврозгалуженої структури.
Завдання на лабораторну роботу.
Розробити блок-схеми алгоритмів і написати програми мовою Java із застосуванням умовного оператора if та оператора вибору switch для розв’язання завдань, поданих в табл.1–4 відповідно до індивідуального варіанта. Варіант обрати за списком групи.
Розробити програмні проекти в середовищі Intellij IDEA для реалізації написаних програм. Перевірити результати обчислень альтернативними розрахунками (наприклад, Excel, калькулятор, тощо).
Зробити Звіт з лабораторної роботи та вчасно надіслати викладачу на перевірку.
Опис завдання табл. 1 для варіанта 16:
/
Опис завдання табл. 2:
/
Опис завдання табл. 3:
/Опис завдання табл. 4:
/
Опис розв’язку завдання 1:
Метод task1 повертає результат обчислень double. Усередені метода с початку я ввів данні згідно мого варіанту. Це константи a,b і z.
Потім за допомогою розгалуження If я почав перевірювати константи з змінною згідно до варіанту. І залежно від цього виконувати умови завдання.
В обчислюванні я використовував математичні функції, які визивав за допомогою Math…
Було використано:
Sin() – синус аргументу.
Pow() – возведення у степінь.
Cos() – косинус аргументу.
Abs() – модуль функції.
Math.E – статична константа. Число Ейлера.
У кінці, після опрацювання методу, ми записуємо отримане значення у змінну task1.
Опис розв’язку завдання 2:
Метод task2 повертає так само результат обчислень double. Метод зчислює вхідну змінну double x та int index, який відвовідає за вибір потрібних наборів констант.
Вибір набору констант здійснюється за допомогою розгалуження switch і параметру index.
Потім аналогічно до першого завдання за допомогою розгалуження If я почав перевірювати константи з змінною згідно до варіанту. І залежно від цього виконувати умови завдання.
В обчислюванні я використовував математичні функції, які визивав за допомогою Math…
Було використано:
Sin() – синус аргументу.
Pow() – возведення у степінь.
Ln() –натуральний логарифм.
Cos() – косинус аргументу.
Abs() – модуль функції.
Math.E – статична константа. Число Ейлера.
У кінці, після опрацювання методу, ми записуємо отримане значення у змінну task2.
Код програми:
package com.company;public class Lr21 { public static void main(String[] args) { //Ввід та присвоєння змінних double t1,t2; double[] x = {-2.3,0.6,4.8}; //Приссвоєння результатів й вивід результатів System.out.println("Завдання 1:");// Завдання 1 for (int i=0; i<3; i++){ t1= task1(x[i]); System.out.printf("\nX%d = %.2f\nTask1 = %.4f", i, x[i], t1); } System.out.println("\n\n\nЗавдання 2:");// Завдання 2 for (int j=0; j<3; j++){ System.out.printf("\n\nOption%d",j+1); for (int i=0; i<3; i++) { t2 = task2(x[i], j); System.out.printf("\nX%d = %.2f\nTask2 = %.4f", i, x[i], t2); } } } //Обчислювання завдання 1 public static double task1(double x) { double t,a,b,z; t=0; a = 0.7; b = -1.25; z = 3.5; if ( x < a ){ t = 2.8*Math.pow(Math.sin(a*x),2)-b*Math.pow(x,3)*z; } if ( a <= x && x <= Math.pow(b,2)){ t = z*Math.cos(Math.pow(a*x+b,2)); } if ( x > Math.pow(b,2) ){ t = Math.pow(Math.E,Math.abs(2.5*a*x))+z*a*b*x; } return t; } //Обчислювання завдання 2 public static double task2(double x, int index) { double t,a,b,z; t=0; a=0; b=0; z=0; switch (index){ case 0: a = 0.1;//Дані для першого випадку b = 0.5; z = Math.pow(Math.E,2.5*a*x); break; case 1: a = 1.2;//Дані для другого випадку b = 2.5; z = Math.pow(Math.E,2.5*a*x); break; case 2: a = 2.5;//Дані для третього випадку b = 1.2; z = Math.pow(Math.E,2.5*a*x); break; } if ( x < a ){ t = 3.5*Math.pow(Math.sin(Math.pow(b*x+z,3)),2); } if ( a <= x && x <= Math.pow(b,2.5)){ t = Math.log(a+x*Math.pow(b,3))+a; } if ( x > Math.pow(b,2.5) ){ t = Math.pow(Math.cos(Math.pow(a,b)+x*z),2)+Math.pow(a,2); } return t; }}
Результати рішення програми:
/
/
Опис розв’язку завдання 3:
Метод task3 не повертає ніяких значень. Він бере значення double a,b,c, які було зчитувано у методі main за допомогою сканеру. Метод знаходить найменше серед цих значень и бере зміну як сторону до квадрату. Потім він знаходить значення площі квадрату та трикутника (зі сторонами a,b,c), та виводить на екран назву найбільшого, порівнявши їх у розгалуженні if….
Опис розв’язку завдання 4:
Метод task4 також не повертає ніяких значень. Було узято аналогічну струкутру для обчислювання як у методі task3, та ініціалізації даних як у task2. Було взято значення double a,b,c, які ми обирали за допомогою switch. Метод так само знаходить найменше серед цих значень и бере зміну як сторону до квадрату. Потім він знаходить значення площі квадрату та трикутника (зі сторонами a,b,c), та виводить на екран назву найбільшого, порівнявши їх у розгалуженні if….
Блок-схема до завдання 4:
/
Код програми:
package com.company;import java.util.Scanner;public class Lr22 { public static void main(String[] args) { double a = 0; double b = 0; double c = 0; Scanner in = new Scanner(System.in); System.out.println("Введіть a: "); a = in.nextDouble(); System.out.println("Введіть b: "); b = in.nextDouble(); System.out.println("Введіть c: "); c = in.nextDouble(); System.out.println("Результат опрацювання завдання 3:\n"); task3(a,b,c); System.out.println("\n Результат опрацбвання завдання 4:\n"); for (int i=0; i<3; i++){ System.out.printf("Варіація номер %d\n",i); task4(i); } } //Обчислювання завдання 3 static void task3(double a,double b, double c){ double min = Math.min(Math.min(a,b),c); double p=(a+b+c)/2; double Str = Math.sqrt(p*(p-a)*(p-b)*(p-c)); double Skv = Math.pow(min,2); if ( Str > Skv ){ System.out.println("Площа трикутника більша за площу квадрату"); } if ( Str < Skv ){ System.out.println("Площа квадрата більша за площу трикутника"); } if ( Str == Skv ){ System.out.println("Площі трикутника та квадрата рівні"); } } //Обчислювання завдання 4 static void task4(int index){ double a = 0; double b = 0; double c = 0; switch (index){ case 0: a = 3;//Дані для першого випадку b = 5; c = 4; break; case 1: a = 13;//Дані для другого випадку b = 8; c = 11; break; case 2: a = 10;//Дані для третього випадку b = 5; c = 12; break; } double min = Math.min(Math.min(a,b),c); double p=(a+b+c)/2; double Str = Math.sqrt(p*(p-a)*(p-b)*(p-c)); double Skv = Math.pow(min,2); if ( Str > Skv ){ System.out.println("Площа трикутника більша за площу квадрату"); } if ( Str < Skv ){ System.out.println("Площа квадрата більша за площу трикутника"); } if ( Str == Skv ){ System.out.println("Площі трикутника та квадрата рівні"); } }}
Результати рішення програми:
/
Висновок:
У цій лабораторній роботі було написано 4 методи, згідно до завдань, які були узяти х табл. 1-4 згідно мого варіанту. Я використовував розгалуження if.. та switch. Щільніше познайомився з пакетом Math, використовував Scanner та цикли for. Проект було створено у середовищі Intellij IDEA, де було створенно два класи Lr21 та Lr22, згідно до задач на лабораторну. Було розроблено блок-схему до 4 завдання. Усі розрахунки було перевірено за допомогою калькулятора, помилок не було знайдено. Зроблено звіт з лабораторної роботи та вчасно надіслано викладачу на перевірку.