Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського» Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
ЗВІТ
з лабораторної роботи № 3
з дисципліни «Програмування алгоритмічних структур» Тема «Програмування циклічних алгоритмів»
Варіант № 13
Мета роботи:
набуття практичних навичок використання операторів
циклів for, while, do while при створюванні програмних проектів циклічної
структури.
Завдання на лабораторну роботу.
1. Розробити блок-схеми алгоритмів і написати програми мовою Java із
застосуванням операторів циклів for, while, do while для розв’язання завдань,
поданих в табл. 1 – 3 відповідно до індивідуального варіанта. Варіант обрати
за списком групи.
2. Розробити програмні проекти в середовищі Intellij IDEA для реалізації
написаних програм. Перевірити результати обчислень альтернативними
розрахунками (наприклад, Excel, калькулятор, тощо).
Короткий опис рішення завдань
Завдання дозволяє виконати і табулювання функцій, і відповідний вивід одразу в одному циклі. У розділі ініціалізації циклу створюємо змінну х, яка одразу буде відігравати роль і ітератора, і змінної для обрахунку двох функцій, її початкове значення дорівнює лівої границі вказаного інтервалу табулювання функцій. У розділі критерія маємо обмежити зростання змінної, доки вона менше або дорівнює правій границі вказаного інтервалу табулювання. Замість звичайного ітерування х збільшується рівно на значення кроку.
У методі створюємо цикл, який перебирає всі члени послідовності, починаючи з другого. Як тільки перевірка з’ясовує, що поточний член менше або дорівнює минулому(поточний – 1), то одразу повертаємо відповідне значення, що числа не складають зростаючу послідовність.
Треба створити два методи для обрахунку добутку і суми ряду відповідно. В обох імітуємо операцію ітерування ряду, використовуючи цикл, в тілі якого або дододаємо суму, або домножуємо добуток.
/
Рисунок 4 Блок-схема до завдання 3
Програма проекту
public class Lr3{ public static void main(String[] args) { System.out.println("\nЗАВДАННЯ 1"); task1(0.5, 11, 0.3); System.out.println("\nЗАВДАННЯ 2\n"); int[][] progressions = new int[][]{{-5,1,2,3,4,5,6,7,8,9,10,15}, {0,1,2,3,4,5,4,3,2,1,0}}; for (int i = 0; i< 2;i++) { boolean isGrowingProgression = task2(progressions[i]); String message = isGrowingProgression ? "Так, числа складають зростаючу полсідовність." : "Ні, числа не складають зростауючу послідовність."; System.out.println("Числова послідновність "+(i+1)+":\n" + Arrays.toString(progressions[i])); System.out.println(message + "\n"); } System.out.println("ЗАВДАННЯ 3\n"); double[] x = new double[] { 0.6, 2.8 }; for (int i = 0; i<2; i++) { System.out.println("\tПРИ Х = " + x[i]); System.out.printf("Сума ряду = %.3f", task31(x[i])); System.out.printf("\nДобуток ряду = %.3f\n\n", task32(x[i])); } } static void task1(double starting, double ending, double step) { System.out.printf("\n X | Y(X) | Z(X)\n"); double x = starting; while(Math.round(x*10)/10.0<=ending) { double y = Math.pow(Math.sin(x), 2) * Math.cos(x - Math.PI); double z = Math.cos(x)/x; System.out.printf("%.1f | %.4f | %.4f\n", x, y, z); x+=step; } } static boolean task2(int[] progression) { for (int i = 1; i< progression.length; i++) if (progression[i] <= progression[i-1]) return false; return true; } static double task31(double x) { double sum = 0.0; for (int i = 1; i<=11; i++) { sum+=(Math.pow(-1,i) * Math.pow(x,i))/(factorial(i) * Math.cos(i + Math.PI/4)); } return sum; } static double task32(double x) { double product = 1.0; for (int i = 1; i<=11; i++) { product*=(Math.pow(-1,i) * Math.pow(x,i))/(factorial(i) * Math.cos(i + Math.PI/4)); } return product; } static int factorial(int n) { if (n <= 1) return 1; return n * factorial(n - 1); }}
Результат обчислень
Висновки: навчився програмувати циклічні алгоритми на прикладах 1) знаходження значень функцій з різними значеннями аргументу під час табулювання (дослідження) певних функцій з заданим кроком, 2) перевірки заданих набір чисел на те, чи складають вони зростаючу послідовність, 3) знаходження факторіала, 4) обрахунку суми та добутку певного ряду із скінченим значенням ітератора.