Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
Звіт
З лабораторної роботи №3
з дисципліни «Програмування циклічних алгоритмів»
Тема «Програмування базових алгоритмів»
Варіант № 25
Мета роботи: набуття практичних навичок використання операторів циклів for, while, do while при створюванні програмних проектів циклічної структури. Завдання на лабораторну роботу.
1.Розробити блок-схеми алгоритмів і написати програми мовою Java із застосуванням операторів циклів for, while, do while для розв’язання завдань, поданих в табл.1–3 відповідно до індивідуального варіанта. Варіант обрати за списком групи.
2.Розробити програмні проекти в середовищі IntellijIDEA для реалізації написаних програм. Перевірити результати обчислень альтернативними розрахунками(наприклад, Excel, калькулятор, тощо).
3. Зробити Звіт з лабораторної роботи та вчасно надіслати викладачу на перевірку
Так як варіант №25, виконуємо задачі під номером 25
Завдання №1
/
Завдання №2
/
Завдання №3
/
Короткі описи рішення завдань:
Створено в Java клас Main .
В цьому класі розміщено методи main, task1, ,task2, ,task3, task13.
Метод Main є головним і виконується першим, тому у ньому викликаємо метод task1.
Метод task1: Сюди передаються три значення: нижня межа перевірки, верхня межа перевірки і крок. Створені масиви, у які будуть записані значення функції в певній точці. Відбувається виконання функції і присвоєння значень масиву. Далі відбувається форматований вивід значень з вказаним кроком.
Далі, у Main створюємо масив для завдання №2. Значення вводимо шляхом присвоєння. Викликаємо метод task2
Метод task2: У метод передаємо масив чисел, що задані присвоєнням. Далі іде перевірка чисел: якщо воно більше 0, то додається до суми, якщо менше нуля, то виводиться сума всіх попередніх.
Далі, у Main виводимо початкові значення (масив чисел), за допомогою методу Arrays.toString() і результат обчислень.
Далі, у методі Main даємо можливість користувачеві вибрати, що знайти з заданого числового ряду: суму чи добуток.
Виводимо відповідний ряд при різних значення х, а3 саме, коли х=0,6 і х=2,8.
Викликаємо метод task3
Метод task3: В цей метод передаємо вибір користувача і зміну х. Потім, за допомогою циклів for i while розраховуємо необхідні значення і повертаємо результат. (Зауваження: у методі використано метод task13, у якому рекурсивним способом обчислюється факторіал переданого числа).
Блок-схема для завдання №3
/
Копія коду на білому фоні
package com.company;
import java.util.Arrays;
import java.util.Scanner;
import static java.lang.Math.*;
public class Main {
public static void main(String[] args) {
System.out.println("---------Завдання №1----------");
task1(4.5, 18.5, 0.4);
// Завдання 2
int[] arr = {5, 47, 18, 25, 3, 54, -2, 0, 1, 12, 81};
int res = task2(arr);
System.out.println("\n\n---------Завдання №2----------");
System.out.print("Вхідні дані (набір чисел) - ");
System.out.println(Arrays.toString(arr));
System.out.printf("Результат обчислень: %d", res);
// Завдання 3
System.out.println("\n\n---------Завдання №3----------");
System.out.println("Якщо ви бажаєте знайти суму ряду - натисніть 0, " +
"якщо добуток - натисніть 1");
Scanner scan = new Scanner(System.in);
int choice = scan.nextInt();
System.out.print("Числовий ряд при х = 0,6:");
for (int k = 1; k < 7; k++) {
System.out.printf(" %.4f ", pow(-1, k) * pow(0.6, 4 * k + 1) / task31(2));
}
double res1 = task3(choice, 0.6);
System.out.printf("\nРезультат виконання завдання: %.4f \n", res1);
System.out.println();
System.out.print("Числовий ряд при х = 2,8:");
for (int k = 1; k < 7; k++) {
System.out.printf(" %.4f ", pow(-1, k) * pow(2.8, 4 * k + 1) / task31(2));
}
double res2 = task3(choice, 2.8);
System.out.printf("\nРезультат виконання завдання: %.4f \n", res2);
}
public static void task1 ( double lim1, double lim2, double step){
double number = (lim2 - lim1) / step + 1;
double[] Y = new double[(int) number];
double[] Z = new double[(int) number];
double x = lim1;
for (int i = 0; i < number; i++, x += step) {
Y[i] = abs(cos(x / 3));
Z[i] = tan(sqrt(x));
System.out.printf("%2d. x = %.2f ", i + 1, x);
System.out.printf("y(x) = %2.4f ", Y[i]);
System.out.printf("z(x) = %2.4f ", Z[i]);
System.out.println();
}
}
public static int task2 ( int[] array){
int result = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] < 0) break;
else result += array[i];
}
return result;
}
public static double task3 ( int choice, double x){
double Y;
int factorial = task31(2);
double result = 1;
if (choice == 0) {
for (int k = 1; k < 7; k++) {
Y = pow(-1, k) * pow(x, 4 * k + 1) / factorial;
result += Y;
}
return (result - 1);
}
if (choice == 1) {
int i = 0;
while (i < 7) {
Y = pow(-1, i) * pow(x, 4 * i + 1) / factorial;
result *= Y;
i++;
}
}
return result;
}
public static int task31(int num){
if (num < 1) return 1;
else {
return (num * task31(num - 1));
}
}
}
Отримані результати
/
/
Висновок: В процесі виконання лабораторної роботи №3 набуто практичних навичок програмування циклічних алгоритмів, використання операторів циклів for, while, do while при створюванні програмних проектів циклічної структури. Побудовано блок-схему, що коротко і доступно описує процеси, що відбуваються при вирішенні завдання №3.