Програмування розгалужених алгоритмів

Інформація про навчальний заклад

ВУЗ:
Національний технічний університет України Київський політехнічний інститут
Інститут:
Не вказано
Факультет:
СІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2021
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування алгоритмічних структур

Частина тексту файла (без зображень, графіків і формул):

Національний технічний університет України «Київський політехнічний інститут імені Ігоря Сікорського» Теплоенергетичний факультет Кафедра автоматизації проектування енергетичних процесів і систем ЗВІТ з лабораторної роботи № 2 з дисципліни «Програмування алгоритмічних структур» Тема «Програмування розгалужених алгоритмів» Варіант № 13 Завдання на лабораторну роботу. 1. Розробити блок-схеми алгоритмів і написати програми мовою Java із застосуванням умовного оператора if та оператора вибору switch для розв’язання завдань, поданих в табл. 1 – 4 відповідно до індивідуального варіанта. Варіант обрати за списком групи. 2. Розробити програмні проекти в середовищі Intellij IDEA для реалізації написаних програм. Перевірити результати обчислень альтернативними розрахунками (наприклад, Excel, калькулятор, тощо). 3. Зробити Звіт з лабораторної роботи та вчасно надіслати викладачу на перевірку. // Рисунок 1 Завдання 1 / / Рисунок 2 Завдання 2 / / Рисунок 3 Завдання 3 // Рисунок 4 Завдання 4 Короткий опис рішення завдань Завдання 1. Вхідні дані, які є аргументами, перевіряються наступним чином: в залежності від того, до якого проміжку відноситься значення змінної Х, визначається, за якою з трьох функцій буде вестися обчислення Y. Далі ми за допомогою класу Math та його методів виконуємо математичні операції згідно з функцією та повертаємо результат у вигляді дробової змінної типу Double. Завдання 2. В другому методі аналогічно до першого завдання виконується перевірка вхідних даних. Відмінність полягає у тому, що в 2 завданні три параметра не є визначеними заздалегідь, а є динамічними. Тому перевірка та визначення певної функції ускладняються додатковими параметрами r, s. Завдання 3. У третьому завданні треба знайти та порівняти площі двох кіл. Для знаходження площі використовуємо математичний метод Герона, який дає змогу обрахувати площу трикутника, знаючи його півпериметр та сторони. Оскільки дано тільки сторони трикутника, цей метод є єдиним можливим рішенням задачі. Отже, порівнюємо площі та повертаєм результат у вигляді повідомлення про те, який з трикутників має більшу площу. Завдання 4. Щоб знайти всі числа, що є більшими за середнє арифметичне виразу, ділимо суму чисел на кількість доданків та отримаємо СА. Далі за допомогою циклу перевіряємо кожен доданок, чи більший його модуль за середнє арифметичне і, якщо так, додаємо його до списку чисел, які відповідають умові, та повертаємо список. Блок-схема алгоритму для завдання 4 Код класу Lr21 Код класу Lr21 public class Lr21 { public static void main(String[] args) { //ЗАВДАННЯ 1 double x1, x2, x3; //подальші розрахунки ведуться за такими трьома значеннями Х x1 = -2.3; x2 = 0.6; x3 = 4.8; double result11 = task1(x1); double result12 = task1(x2); double result13 = task1(x3); //Виведення System.out.printf("\n*Завдання 1* \n\n1) Bхідні дані: \nx = %.1f \n", x1); System.out.printf("Результат роботи: \ny = %.4f \n", result11); System.out.printf("\n2) Bхідні дані: \nx = %.1f \n", x2); System.out.printf("Результат роботи: \ny = %.4f \n", result12); System.out.printf("\n3) Bхідні дані: \nx = %.1f \n", x3); System.out.printf("Результат роботи: \ny = %.4f \n", result13); //ЗАВДАННЯ 2 double[][] krs = { {1.33, 0.85, 3.5}, //Масив параметрів для різних розрахунків {0.9, 3.3, 1.2}, {1.57, 0.75, 2.15 } }; double[] x = {-2.3, 0.6, 4.8}; //подальші розрахунки ведуться за такими трьома значеннями Х і попередніми параметрами //Виведення System.out.printf("\n*Завдання 2* \n"); for(int i = 0; i < 3; i++) { System.out.printf("\nРозрахунки %d-%d виконуються з такими параметрами" + " k = %.2f, r = %.2f, s = %.2f\n", i*3 +1, i*3 + 3, krs[i][0], krs[i][1], krs[i][2]); for (int j = 0; j < 3; j++) { System.out.printf("%d) Вхідні дані:\nx = %.1f \n", i * 3 + j + 1, x[j]); System.out.printf("Результат роботи: \ny = %.4f \n\n", task2(x[j], krs[i][0], krs[i][1], krs[i][2])); } } } public static double task1(double x) { double result; double a,b,z; //Значення a,b,z за Варіантом 13 a = 1.5; b = -1.7; z = 1.2; byte functionIndex = 0; //Перевірка значень для х мого варіанту та вибір функції за значенням х if (x < a) functionIndex = 1; else if (a <= x && x <= Math.pow(b, 2)) functionIndex = 2; else if (x > Math.pow(b, 2)) functionIndex = 3; switch (functionIndex) { case 1: result = x * Math.pow(Math.E, x) + (z + 7.7 * a * b * x); break; case 2: result = Math.tan(a * x + z) + Math.pow(Math.cos(b * x), 2); break; case 3: result = Math.log(Math.pow(Math.sin(a + b * x + z * Math.pow(x, 2)), 2)); break; default: System.out.println("Недопустимое значение х"); result = 0; break; } return result; } public static double task2(double x, double k, double r, double s) { double result; byte functionIndex = 0; //Перевірка значень для х мого варіанту та вибір функції за значенням х if (Math.cos(x) == Math.cos(r*s)) functionIndex = 1; else if (Math.cos(x) > Math.cos(r*s)) functionIndex = 2; else if (Math.cos(x) < Math.cos(r*s)) functionIndex = 3; switch(functionIndex) { case 1: result = Math.pow(x, 2) * Math.pow(Math.E, 2*k) + Math.log(Math.abs(r*x)); break; case 2: result = Math.cbrt(x*x) + Math.sqrt(Math.abs(k + r*s*x)); break; case 3: result = Math.atan(k*x + r*s); break; default: System.out.println("Недопустимое значение х"); result = 0; break; } return result; } } Результат обчислень класу Lr21 /// Код класу Lr22 public class Lr22 { public static void main(String[] args) { //ЗАВДАННЯ 3 System.out.printf("\n*Завдання3*\n"); Scanner scanner = new Scanner(System.in); for(int i = 0; i < 3; i++)// { System.out.printf("\n%d) Введіть 3 сторони першого трикутниkа:\n", i+1); //Вводимо значення double[] sides1 = new double[3]; for (int j = 0; j < 3; j++) { sides1[j] = scanner.nextDouble(); } System.out.printf("\nВведіть 3 сторони другого трикутниkа:\n"); double[] sides2 = new double[3]; for (int j = 0; j < 3; j++) { sides2[j] = scanner.nextDouble(); } //Розрахунок та вивід System.out.println("Результат: \n" + task3(sides1[0], sides1[1], sides1[2], sides2[0], sides2[1], sides2[2])); } //ЗАВДАННЯ 4 System.out.printf("\n*Завдання4*\n"); double[][] xyz = { {3.2,-7,0.5}, //Масив вхідних даних для швидкого виведення {2.3, 3, 2.5}, {23, -34, 89.5} }; for(int i = 0; i < 3; i++) //Розрахунок і виведення { System.out.printf("\n%d) Вхідні дані: \nx = %.1f, y = %.1f, z = %.1f\nРезультат: ", i + 1, xyz[i][0], xyz[i][1], xyz[i][2]); Double[] results = task4(xyz[i][0], xyz[i][1], xyz[i][2]); for (int j = 0; j < results.length; j++) { System.out.printf(results[j].toString() + " "); } System.out.printf("\n"); } } public static String task3 (double a1, double b1, double c1, double a2, double b2, double c2) { // Знаходимо площі за формулою Герона з допомогою півпериметра double p1 = (a1 + b1 + c1) / 2; double square1 = Math.sqrt(p1 * (p1 - a1) * (p1 - b1) * (p1 - c1)); double p2 = (a2 + b2 + c2) / 2; double square2 = Math.sqrt(p2 * (p2 - a2) * (p2 - b2) * (p2 - c2)); if (square1 == 0 || square2 == 0) return "Такого трикутника не існує!"; else if (square1 > square2) return "Площа першого трикутника із сторонами - "+a1+", "+b1+", "+c1+" більша!"; else return "Площа другого трикутника із сторонами - "+a2+", "+b2+", "+c2+" більша!"; } public static Double[] task4(double x, double y, double z) { double average = (x + y + z) / 3; double[] xyz = {x,y,z}; ArrayList<Double> list = new ArrayList<Double>(); for(int i = 0; i< 3; i++) { if (Math.abs(xyz[i]) > Math.abs(average)) { list.add(xyz[i]); } } Double[] result = new Double[list.size()]; list.toArray(result); return result; } } Результат обчислень класу Lr22 / / Висновки: Виконуючи роботу, отримано навички керування послідовністю кодом за допомогою таких керуючих систем, як if-else конструкції та switch-case конструкції. Виявлено, що найбільш зручним, лаконічним та зовнішньо приємним з цих конструкцій є використання switch конструкції. За допомогою таких конструкцій було запрограмовано декілька розгалужених алгоритмів, в яких реалізовано перевірку вхідних значень та подальший хід програми в залежності від вхідних даних.
Антиботан аватар за замовчуванням

11.07.2023 07:07-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!