Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
Звіт
з лабораторної роботи №3
з дисципліни «Програмування алгоритмічних структур»
Тема «Програмування циклічних алгоритмів»
Варіант № 7
Мета роботи: набуття практичних навичок використання операторів циклів for, while, do while при створюванні програмних проектів циклічної структури.
Завдання на лабораторну роботу.
1.Розробити блок-схеми алгоритмів і написати програми мовоюJava із застосуванням операторів циклів for, while, do while для розв’язання завдань ,поданих в табл.1–3 відповідно до індивідуального варіанта. Варіант обрати за списком групи.
2.Розробити програмні проекти в середовищі Intellij IDEA для реалізації написаних програм. Перевірити результати обчислень альтернативними розрахунками (наприклад,Excel, калькулятор, тощо).
3. Зробити Звіт з лабораторної роботи та вчасно надіслати викладачу на перевірку.
Завдання 1:
/
Завдання 2:
/
Завдання 3:
/
Короткий опис рішення завдання
Завдання 1:
У методі main визивається метод task1 із значеннями x0=-2, x1=5, h=0.2.
У методі task1 реалізовано цикл for (double x = x0; x < x1 + h; x += h). Спочатку він обраховує значення y та z, а потім виводить ці значення. Для виводу використовується printf для виведення чисел з 4 знаками після коми, та умови для виводу у вигляді таблиці. Цикл повторюється поки х<=5. Task1 є void, бо не потребує повернення результату.
Завдання 2:
У методі main створено 2 масиви раціональних чисел, а нижче вивід цих масивів. Потім викликається метод task2 відносно першого та другого масивів.
У методі task2 створено цикл, який знаходить максимальне з модуля різниці 1 і 2 елементів, з модуля різниці 2 і 3 елементів. Після одного проходження циклу, числа збільшуються на 1. Але результатом буде лише найбільший максимум. Це реалізовано завдяки умови при проходженні циклу:
if (res < max(max1, max2)) { res = max(max1, max2);}
метод повертає res, бо task2 є double.
Завдання 3:
У методі main реалізовано введення значення х з клавіатури, за допомогою методів бібліотеки java.util.Scanner. Потім вивід результатів методу task3. Далі повторюється теж саме.
У методі task3 створено цикл for, в якому створено цикл while для обрахунку факторіалу числа (k-1). При кожному проходженні циклу for до числа res додається . Метод є виду double, повертає res.
Блок-схема до завдання 3
/
Програма проекту
import java.util.Scanner;import static java.lang.Math.*;public class LR3 { public static void main(String[] args) { System.out.println("---------------Task1---------------"); task1(-2, 5, 0.2); System.out.println("---------------Task2---------------"); double[] arr1 = {2.6, -8.1, 123, -0.4, -0.123, 7, 45.6, 9, -67, 27.5}; System.out.println("Початкові дані першої послідовності:"); for (int i = 0; i < arr1.length; i++) { System.out.printf("%.4f ", arr1[i]); } System.out.printf("\nРезультат: %.4f", task2(arr1)); double[] arr2 = {-1, 23.2, 19.3, 4.9, -7.8, -12.7, -44, 5, -11.16, 56.26, 12}; System.out.println("\nПочаткові дані другої послідовності:"); for (int i = 0; i < arr2.length; i++) { System.out.printf("%.4f ", arr2[i]); } System.out.printf("\nРезультат: %.4f\n", task2(arr2)); System.out.println("---------------Task3---------------"); double x; System.out.print("Введіть значення x: "); Scanner scan = new Scanner(System.in); x = scan.nextDouble(); System.out.printf("Результат: %f\n", task3(x)); System.out.print("\nВведіть значення x: "); x = scan.nextDouble(); System.out.printf("Результат: %f", task3(x)); } public static void task1(double x0, double x1, double h) { System.out.println("______________________"); System.out.println("| x | y | z |"); for (double x = x0; x < x1 + h; x += h) { double y = tan(x / 3) * sin(x - 1.2), z = 2.5 * sin(x / 2); if (x < 0) { System.out.printf("|%.1f", x); } else { System.out.printf("| %.1f", x); } if (y < 0 || y > 10) { System.out.printf("|%.4f", y); } else { System.out.printf("| %.4f", y); } if (z < 0) { System.out.printf("|%.4f|\n", z); } else { System.out.printf("| %.4f|\n", z); } } System.out.println("¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯"); } static double task2(double[] arr) { double res = 0, max1 = 0, max2 = 0; for (int i = 2; i < arr.length; i++) { max2 = abs(arr[i - 1] - arr[i - 2]); max1 = abs(arr[i] - arr[i - 1]); if (res < max(max1, max2)) { res = max(max1, max2); } } return res; } static double task3 (double x) { double res = 0; double factorial; for (int k = 1 ;k <= 7; k++) { factorial = 1; int i = 1; while ( i <= k-1){ factorial =factorial * i; i++; } res += factorial/(pow(2,k)*pow(x, k-1)); } return res; }}
Результати обчислень
/
/
Висновок: було створено програму, яка виконує 3 поставлені завдання. У програмі використано велику кількість циклів for і while, адже без них програма була би громіздкою та вона би виконувалася неправильно, у випадку зміни кількості елементів у 2 завданні. У завданні 1 створено таблицю з обрахованими значеннями для кожного значення х. У завданні 2 через цикл було знайдено найбільший серед всіх модуль різниці суміжних чисел. У завданні 3, завдяки циклам було обраховано факторіал та суму ряду.