Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського» Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
РОЗРАХУНКОВО-ГРАФІЧНА РОБОТА
з дисципліни «Програмування алгоритмічних структур»
Тема «Програмування базових алгоритмів»
Варіант № 4
Завдання на розрахунково-графічну роботу (РГР)
1.Розробити алгоритми і написати програми мовою Java із застосуванням операторів циклів for, while, do while для розв’язання завдань, поданих в додатках 1, 2 відповідно до індивідуального варіанта. Варіант обрати за списком групи.
2.Розробити програмний проект в середовищі Intellij IDEA для реалізації написаних програм. Перевірити результати обчислень альтернативними розрахунками (наприклад, Excel, калькулятор, тощо).3.Оформити РГР та вчасно надіслати викладачу на перевірку файл РГР та файл програми.
Завдання 1 за варіантом:
/
Завдання 2 за варіантом:
/
Короткий опис рішення завдання:
Завдання 1: В методы main переписуємо всі числа із поданої СЛАР в масив, а далі робимо розподіл етапів на методи, як зазначено в завданні (task11 для перетворення матриці до трикутникового вигляду, task12 для отримання значень невідомих змінних СЛАР, task13 для виведення виводу результатів розрахунку завдання 1). У task11 матриця зводиться до трикутного виду (віднімаємо від нижніх рядків верхні, роблячи нулі). У task12 знаходимо невідомі змінні СЛАР, рухаючись знизу вгору, щоб невідомі знаходилися одна за одною. У task13 початковий і зведений до трикутного вигляду масиви, виводяться у вигляді матриці, а невідомі змінні під відповідним рядком (вектор відповіді).
Завдання 2: Вводимо у main сканер, який буде зчитувати задані користувачем числа. Далі завдяки циклу повертаємо кількість парних цифр числа.
Блок-схема алгоритму для другого завдання:
/
Програма проекту (копія коду на білому фоні):
package tr15.smirnov;
import java.util.Scanner;
public class RgrTr15Smir {
public static void main (String[] args) {
Scanner s = new Scanner(System.in);
int[] t3 = new int[3];
double[][] matrix = {{5, 0, -1, 5, -2, -56.1},
{-1, 5, 6, 1, 1, -51.1},
{2, 4, 3, 5, 0, -81.3},
{3, 3, 2, 3, 2, -77.2},
{0, 0, 2, -1, 6, -31.3}};
double[][] triangle = task11(matrix);
double[][] vector = task12(triangle);
System.out.print("Початкова матриця:\n");
task13(matrix);
System.out.print("Трикутникова матриця:\n");
task13(triangle);
System.out.print("Вектор результатів:\n");
task13(vector);
for (int i = 0; i < t3.length; i++) {
System.out.printf("Варіант %d = ", i+1);
t3[i] = s.nextInt();
}
for (int i = 0; i < t3.length; i++) {
System.out.printf("У числі %d кількість парних цифр дорівнює %d.\n", t3[i], task2(t3[i]));
}
}
public static double[][] task11 (double[][] m) {
double[][] res = new double[m.length][m[0].length];
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[0].length; j++) {
res[i][j] = m[i][j];
}
}
double[] var;
double k;
int num = 1;
while (num < res.length) {
for (int i = num; i < res.length; i++) {
if (res[num-1][num-1] == 0) {
var = res[num-1];
res[num] = var;
res[num-1] = res[num];
i--;
} else if (res[i][num-1] != 0) {
k = res[num-1][num-1] / res[i][num-1];
for (int j = num-1; j < res[0].length; j++) {
res[i][j] = res[num-1][j] - k * res[i][j];
}
}
}
num++;
}
return res;
}
public static double[][] task12 (double[][] tM) {
double[][] r = new double[1][tM.length];
int num = tM.length-1;
int jRes = 0;
double x, sum, var;
while (num >= 0) {
sum = tM[num][tM[0].length-1];
for (int j = 0; j < jRes; j++) {
sum -= r[0][j] * tM[num][tM[0].length-2-j];
}
x = sum / tM[num][num];
r[0][jRes] = x;
jRes++;
num--;
}
for (int i = 0; i < r[0].length/2; i++) {
var = r[0][i];
r[0][i] = r[0][r[0].length-i-1];
r[0][r[0].length-i-1] = var;
}
return r;
}
public static void task13 (double[][] m) {
String s = "\t";
for (int i = 0; i < m.length; i++) {
if (m.length == 1) {
s = " ";
}
for (int j = 0; j < m[0].length; j++) {
if (Math.abs(Math.round(m[i][j]) - m[i][j]) < Math.pow(10, -4)) {
System.out.printf("%.0f\t" + s, m[i][j]);
} else {
System.out.printf("%.2f" + s, m[i][j]);
}
}
System.out.print("\n");
}
}
public static int task2 (int n) {
int res, var;
res = 0;
for (int i = 0; i < 10; i++) {
var = (int) Math.pow(10, i);
if (var <= n) {
if ((n/var) % 2 == 0) {
res++;
}
} else {
return res;
}
}
return res;
}
}
Результати обчислень:
Завдання 1:
/
Завдання 2:
/
Перевірка результатів за допомогою онлайн-калькулятора:
/ /
Висновок:
Я набув практичних навичок у розробці розгалужених та циклічних алгоритмів при створюванні програмних проектів для розв’язання практичних завдань.Розробив алгоритми і написав програми мовою Java із застосуванням операторів циклів for, while, do while для розв’язання завдань, поданих в додатках 1, 2 відповідно до індивідуального варіанта (4).
Розробив програмний проект в середовищі Intellij IDEA для реалізації написаних програм. Перевірив результати обчислень альтернативними розрахунками ().
Оформити РГР та вчасно надіслати викладачу на перевірку файл РГР та файл програми.