Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
Звіт
з лабораторної роботи №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, завдяки циклам було обраховано факторіал та суму ряду.