Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
РОЗРАХУНКОВО-ГРАФІЧНА РОБОТА
з дисципліни «Програмування алгоритмічних структур»
Тема «Програмування базових алгоритмів»
Варіант № 21
Завдання
1.Розробити алгоритми і написати програми мовою Java із застосуванням операторів циклів for, while, do while для розв’язання завдань,поданих в додатках 1,2 відповідно до індивідуального варіанта. Варіант обрати за списком групи.
2.Розробити програмний проект в середовищі IntellijIDEA для реалізації написаних програм. Перевірити результати обчислень альтернативними розрахунками(наприклад, Excel, калькулятор, тощо).
Завдання для варіанту 21
Завдання 1
Завдання 2
/
Короткий опис розв`язання задач
Перш за все я створила клас RgrTr15Chub, і виконувала в ньому обидва завдання. Організувала в ньому метод main, в якому задала початкову матрицю. Потім викликала метод task11, створила у ньому новий двовимірний масив, який отримує значення початкової матриці, і за допомогою циклу його було зведено до трикутного вигляду, що необхідно для розв`язання СЛАР методом Гауса. Наступним кроком був виклик методу task12 та створення циклу в ньому. В результаті його роботи обчислюються значення розв`язків СЛАР, які переходять у масив vectorResult, а він повертає їх у метод main. Метод task13 виводить початкову матрицю, трикутну матрицю, та результати обрахунків. Його було реалізовано 2 рази для вивиду одновимірного і двовимірного масиву.
Потім для другого завдання я створила сканер щоб вводити дані, після цього – цикл, що виконує код 3 рази: дає можливість вводити кількості чисел , самі числа, а виводить початкові значення і результат.
Далі я викликала метод task2, у ньому створила новий одновимірний масив. За допомогою циклу відбираються двозначні числа, які діляться на 5, а також закінчуються на 5. Потім ці значення передаються в новий масив і відбувається виведення результатів.
Блок-схема
/
Результати
/
/
/
Код програми
package com.company;import java.util.Scanner;public class RgrTr15Chub { public static void main(String[] args) { System.out.println("Task 1"); double[][] matrix = { {9, -9, 1, 2, 7, 23.5}, {3, 1, 7, -10, 1, 68.9}, {-9, 3, 9, -4, 0, -7.1}, {8, -5, 4, 6, 1, -14.1}, {10, -9, 9, 1, -10, -97.6} }; double[][] newMatrix = task11(matrix); double[] vectorResult = task12(newMatrix); System.out.println("Початкова матриця:"); task13(matrix); System.out.println("Трикутна матриця:"); task13(newMatrix); System.out.println("Вектор результатів:"); task13(vectorResult); System.out.printf("\nTask 2"); Scanner scan = new Scanner(System.in); for (int i = 0; i < 3; i++) { System.out.printf("\n"); int length = 0; while (length <= 0) { System.out.printf("\nУведіть кількість чисел для випадку%d: ", i + 1); length = scan.nextInt(); } int[] m = new int[length]; System.out.printf("Введіть\n"); for (int j = 0; j < length; j++) { System.out.printf("Число%d:", j + 1); m[j] = scan.nextInt(); } System.out.printf("\nПочатковий вивід:\t"); for (int j = 0; j < m.length; j++) System.out.printf("%d\t", m[j]); int[] result = task2(m); System.out.printf("\nРезультат:\t"); for (int j = 0; j < result.length; j++) System.out.printf("%d\t", result[j]); } } public static double[][] task11(double[][] matrix) { double[][] newMatrix = new double[5][6]; int i, j; for (i = 0; i < 5; i++) { j = 0; while (j < 6) { newMatrix[i][j] = matrix[i][j]; j++; } } for (int k = 0; k < 4; k++) { i = 1 + k; while (i < 5) { double t = (-1) * newMatrix[i][k] / newMatrix[k][k]; for (j = k; j < 6; j++) { newMatrix[i][j] = t * newMatrix[k][j] + newMatrix[i][j]; } i++; } } return newMatrix; } public static double[] task12(double[][] newMatrix) { double[] result = {0, 0, 0, 0, 0}; int i; for (i = result.length - 1; i >= 0; i--) { double sum = 0; for (int j = 0; j < result.length; j++) { sum = sum + newMatrix[i][j] * result[j]; } result[i] = (newMatrix[i][newMatrix.length] - sum) / newMatrix[i][i]; } return result; } static void task13(double[][] array) { int i, j; for (i = 0; i < 5; i++) { j = 0; while (j < 6) { if (array[i][j] % 1 == 0) { System.out.printf("%.0f \t", array[i][j]); } else { System.out.printf("%.2f\t", array[i][j]); } j++; } System.out.println(); } System.out.println(); } static void task13(double[] array) { int i; for (i = 0; i < 5; i++) { if (array[i] % 1 == 0) { System.out.printf("%.0f \t", array[i]); } else { System.out.printf("%.2f\t", array[i]); } } System.out.println(); } public static int[] task2 ( int[] array) { int[] copy = new int[array.length]; for (int i = 0; i < array.length; i++) copy[i] = array[i]; int amount = 0; for (int i = 0; i < array.length; i++) { if(array[i] % 5 == 0 && array[i] % 10 == 5 && array[i] >= 10 && array[i] < 100) { amount++; } else if(array[i] % 5 == 0 && array[i] / 10 == 5 && array[i] >= 10 && array[i] < 100) { amount++; } } int[] result = new int[amount]; amount = 0; for (int i = 0; i < array.length; i++) { if(array[i] % 5 == 0 && array[i] % 10 == 5 && array[i] >= 10 && array[i] < 100) { result[amount] = array[i]; amount++; } else if(array[i] % 5 == 0 && array[i] / 10 == 5 && array[i] >= 10 && array[i] < 100) { result[amount] = array[i]; amount++; } } return result; }}
Висновки
У результаті виконання роботи я дізналася як розробляти розгалуджені та циклічні алгоритми, написала програму, що визначає корені системи лінійних алгебраїчних рівнянь методом Гауса, а також в ній були використані умовний оператор if та оператори циклів for та while для знаходження двозначних чисел, що діляться націло на 5 та закінчуються на цифру 5.