Міністерство освіти і науки України
Національний технічний університет
«Київський політехнічний інститут ім. Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
Програмування алгоритмічних структур
ЗВІТ ДО
Лабораторної роботи №3
«Програмування циклічних алгоритмів»
Варіант № 11
Дата «27» листопада 2021
Мета роботи: набуття практичних навичок використання операторів циклів for, while, do while при створюванні програмних проектів циклічної структури.
Завдання на лабораторну роботу 1.
1.Розробити блок-схеми алгоритмів і написати програми мовою Java із застосуванням операторів циклів for, while, do while для розв’язання завдань, поданих в табл.1–3 відповідно до індивідуального варіанта. Варіант обрати за списком групи.
2. Розробити програмні проекти в середовищі Intellij IDEA для реалізації написаних програм. Перевірити результати обчислень альтернативними розрахунками(наприклад, Excel, калькулятор, тощо).
3. Зробити Звіт з лабораторної роботи та вчасно надіслати викладачу на перевірку.
Вимоги до розв’язання завдання 1 (табл. 1)
Розробити програму табулювання (дослідження) функцій y = f(x) та z=f(x), змінюючи x на заданому проміжку із заданим кроком h. Завдання вибрати з табл. 1 відповідно до індивідуального варіанта.
Обчислення та виведення результатів організувати в методі task1, в який слід передати границі заданого діапазону та крок приросту аргументу h.
Результати виводити в таблицю з трьома стовпчиками для х, y(x), z(x). Підчас виведення результатів застосувати форматований вивід: x–один або два знаки після коми, y(x), z(x)–4 знаки після коми.
Короткий опис рішення завдання 1 разом із скриншотом варіанту завдання із табл.1
Завдання 1
/
У методі main оголошуємо змінну х типу double та викликаємо метод task1(), у який передаємо границі х та крок приросту аргументу h. Створюємо метод task1. Використаємо цикл for() для проходження заданого діапазону. Виводимо результати обчислення в таблицю з трьома стовпчиками для х, y(x), z(x) за допомогою System.out.printf() форматованого виводу: x – один знак після коми за допомогою специфікатора %.1f, y(x), z(x) – 4 знаки після коми за допомогою специфікатора %.4f. Для розрахунку функцій y = f(x) та z = f(x) використано математичну бібліотеку для обчислення числа Ейлера за допомогою Math.exp(), задання числа пі (Math.PI) та косинуса (Math.cos()).
Вимоги до розв’язання завдання2(табл.2)
Розробити програму аналізу та обробки числових послідовностей. В якості вхідної числової послідовності обрати будь-яку послідовність чисел, що задовольняє умові завдання згідно із обраним варіантом. Кількість чисел має бути не менше 10. Введення даних організувати простим присвоєнням.
В методі main має бути тільки введення даних, виклик методу task2 (або, за необхідності, task21, task22, task23), виведення початкових даних та результатів обчислень.
В методі task2 організувати обчислення згідно обраного варіанту завдання та повернення результатів до методу main.
Виведення результатів організувати в методі main за допомогою форматованого виводу значень. Для дробових чисел–не більше 4 знаків після коми. Завдання 2 вирішити для двох різних послідовностей чисел.
Короткий опис рішення завдання 2 разом із скриншотом варіанту завдання із табл.2
Завдання 2
/
У методі main створюємо дві числові послідовності arr1[] та arr2[] у вигляді одновимірного масиву типу int та присвоюємо їм значення. Кількість чисел має бути не менше 10. Створюємо метод task2, у якому задаємо змінну sum типу double та змінну n типу int, яка повертає результат середнього арифметичного та підраховує кількісті елементів заданої послідовності. Циклом for() проходимо весь масив. За допомогою умовного оператора if() перевіряємо таку умову: якщо перший елемент послідовності більший за інші, то рахуємо їх суму, а лічильник n збільшується на 1. Після завершення циклу знаходимо середнє арифметичне елементів послідовності, значення яких є меншими за перший елемент. У main виводимо початкові дані та результати обчислення за допомогою System.out.printf() форматованого виводу. Для дробових значень не більше 4 знаків після коми за допомогою специфікатора %.1f (тобто виведеться 1 знак після коми).
Вимоги до розв’язання завдання3(табл.3).
Розробити блок-схему алгоритму та програму обчислення суми або добутку членів ряду(табл.3). Обчислення здійснити для двох значень змінної х: х1 = 0,6; х2 = 2,8.
Введення даних організувати з клавіатури за допомогою методів класу Scanner.
В методі main має бути тільки введення даних, виклик методу task3(або, за необхідності, task31, task32, task33), виведення початкових даних та результатів обчислень. В методі task3 організувати обчислення згідно обраного варіанту завдання із застосуванням двох різних операторів циклу–або for, або while, або do while.
Виведення результатів організувати за допомогою форматованого виводу значень. Для дробових чисел – не більше 4 знаків після коми.
Короткий опис рішення завдання 3 разом із скриншотом варіанту завдання із табл.3
Завдання 3
/
У методі main використаємо клас Scanner для введення значень х1 та х2 з клавіатури. Створюємо метод task31. Оголошуємо змінні rez та factorial типу double для виведення результату та значення факторіалу відповідно. Використаємо цикл for() для обчислення виразу(використано математичну бібліотеку для піднесення чисел у степінь за допомогою Math.pow()). У нього вкладаємо ще один цикл for() для визначення факторіала залежно від змінної і (за умовою). У методі main виводимо результат обчислення за допомогою System.out.printf() форматованого вигляду. Для дробових значень не більше 4 знаків після коми за допомогою специфікатора %.4f.
Створюємо метод task32. Оголошуємо змінні rez та factorial типу double для виведення результату та значення факторіалу відповідно. Ініціалізуємо змінну і типу int. Використаємо цикл while() (цикл з передумовою) для обчислення виразу(використано математичну бібліотеку для піднесення чисел у степінь за допомогою Math.pow()). У нього вкладаємо ще один цикл while() для визначення факторіала залежно від змінної і (за умовою). Особливість цього циклу полягає в тому, що відразу перевіряється істинність деякої умови, і якщо умова істинна, то код циклу виконується. У методі main виводимо результат обчислення за допомогою System.out.printf() форматованого виводу. Для дробових значень не більше 4 знаків після коми за допомогою специфікатора %.4f.
Код програми:
package com.company;import java.util.Scanner;public class Main { public static void main(String[] args) { System.out.println("-----Task1-----"); task1(-6, 1, 0.2); double x1, x2; System.out.println("-----Task2-----"); int arr1[] = {54, -2, 9, 27, 1, 11, -1, 34, 87, 4}; System.out.printf("Виведемо елементи першої послідовності:\t"); for (int i = 0; i < arr1.length; i++) System.out.printf("%d\t", arr1[i]); System.out.printf("\nСереднє арифметичне першої послідовності: %.1f\n\n", task2(arr1)); int arr2[] = {37, 2, -9, 10, 29, 91, 75, 16, 11, -3}; System.out.printf("Виведемо елементи другої послідовності:\t"); for (int i = 0; i < arr2.length; i++) System.out.printf("%d\t", arr2[i]); System.out.printf("\nСереднє арифметичне другої послідовності: %.1f\n", task2(arr2)); System.out.println("-----Task3-----"); Scanner scan = new Scanner(System.in); System.out.printf("Введемо х1:"); x1 = scan.nextDouble(); System.out.printf("Результат першого випадку: %.4f\n", task31(x1)); System.out.printf("Введемо х2:"); x2 = scan.nextDouble(); System.out.printf("Результат другого випадку: %.4f\n", task32(x2)); } public static void task1(int minX, int maxX, double h) { System.out.println("---------------------------------"); System.out.println("|\tx\t|\ty(x)\t|\tz(x)\t|"); System.out.println("---------------------------------"); for (double x = minX; x < maxX; x += h) { System.out.printf("|\t%.1f|\t%.4f\t|\t%.4f\t|\n", x, Math.exp(x), 1.5 * Math.cos(x - Math.PI / 4 * Math.exp(x))); System.out.println("---------------------------------"); } } public static double task2(int[] array) { double sum = 0; int n = 0; for (int i = 0; i < array.length; i++) { if (array[0] > array[i]) { sum = sum + array[i]; n++; } } sum = sum / n; return sum; } public static double task31(double x1) { double rez = 0; double factorial; for (int i = 1; i < 7; i++) { factorial = 1; for (int j = 1; j <= (2 * i - 1); j++) { factorial *= j; } rez += Math.pow(-1, i + 1) * Math.pow(x1, 2 * i) / factorial; } return rez; } public static double task32(double x2) { double rez = 0; double factorial; int i = 1; while (i < 7) { factorial = 1; int j = 1; while (j <= (2 * i - 1)) { factorial *= j; j++; } rez += Math.pow(-1, i + 1) * Math.pow(x2, 2 * i) / factorial; i++; } return rez; }}
Результати рішення програми
///
/
/
Блок-схема алгоритму до завдання 3
/
Завдання 3.1
/
Завдання 3.2
Висновок: У результаті створення лабораторної роботи написано програми мовою Java із застосуванням операторів циклів for, while, do while для розв’язання завдань, розроблено програму табулювання (дослідження) функцій), змінюючи x на заданому проміжку із заданим кроком h, програму аналізу та обробки числових послідовностей, програму обчислення суми або добутку членів ряду.