Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
ЗВІТ
з лабораторної роботи № 2
з дисципліни «Програмування алгоритмічних структур»
Тема «Програмування розгалужених алгоритмів»
Варіант №7
Завдання на лабораторну роботу
1. Розробити блок-схеми алгоритмів і написати програми мовою Java із застосуванням умовного оператора if та оператора вибору switch для розв’язання завдань, поданих в табл. 1 – 4 відповідно до індивідуального варіанта. Варіант обрати за списком групи.
2. Розробити програмні проекти в середовищі Intellij IDEA для реалізації написаних програм. Перевірити результати обчислень альтернативними розрахунками (наприклад, Excel, калькулятор, тощо).
3. Зробити Звіт з лабораторної роботи та вчасно надіслати викладачу на перевірку.
Завдання 1:
/
Завдання 2:
/
Завдання 3:
/
Завдання 4:
/
Опис рішення завдання
Для першого та другого завдання було створено окремий файл LR21.java, в якому було реалізовано 3 методи: main, task1, task2.
В методі task1 було введено значення a, b та обраховано значення z. Потім використовуючи if, else було створено функції для обрахування значення y, в залежності від значення х. Також було використано бібліотеку java.lang.Math.*. Це дозволило більш зручно використовувати математичні функції, такі як tan(), abs(), pow(), cos(), sin(), sqrt(), log().
В методі task2 було використано оператор switch, завдяки якій було реалізовано 3 варіанти набору значень a, b, c. Потім використовуючи if, else було створено функції для обрахування значення y, в залежності від значення х та набору значень a, b, c. Було використано математичні функції, які були написані в попередньому абзаці.
В методі main було введено значення для х1, х2 та х3. Потім було виведено результати завдання 1(3 результати, які були обраховані в залежності від трьох значень х). Нижче виведення результатів завдання 2(9 результатів, які залежать від значень трьох х та трьох наборів значень a, b, c). Вивід було реалізовано завдяки printf(). Це функція форматованого виводу. Завдяки “%4f” виводятся числа тільки з 4 знаками після коми.
Для третього та четвертого завдання було створено окремий файл LR22.java, в якому було реалізовано 3 методи: main, task3, task4.
В методі task3 перевіряється трикутник на те, чи є він прямокутним. Перевірено було завдяки наслідку з теореми Піфагора (якщо квадрат найбільшої сторони трикутника дорівнює сумі квадратів інших сторін, то трикутник є прямокутним). Цей метод належить до типу Boolean.
В методі task4 спочатку створено змінні x0, y0, x1, y1, а потім задано набори цих значень завдяки оператору switch. Потім було визначено яка точка менш віддалена від точки О. Так як точка О має координати (0,0), то для того щоб визначити яка точка менш віддалена від О потрібно знайти суму квадратів координат першої точки та суму квадратів координат другої точки, а потім визначити у якої точки менше число. В залежності від результатів виводяться різні значення завдяки оператору if.
В методі main присвоюються значення для a,b,c, які користувач вводе з клавіатури(зроблено це завдяки java.util.Scanner). Потім в залежності від результатів масиву task3 виводиться відповідь. Це все повторюється ще два рази для інших значень a,b,c. Нижче викликається метод task4.
Блок-схема для завдання 4
/
Код програми LR21
import static java.lang.Math.*;
public class LR21 {
public static void main(String[] args) {
double x1=-2.3, x2=0.6, x3=4.8;
System.out.println("------------Task 1------------");
System.out.println("Початкові дані: a=1.5, b=0.7");
System.out.printf("x1=-2.3 ---> y=%.4f\n", task1(x1));
System.out.printf("x2=0.6 ---> y=%.4f\n", task1(x2));
System.out.printf("x3=4.8 ---> y=%.4f\n", task1(x3));
System.out.println("------------Task 2------------");
System.out.println("Case 1 (a=3.2, b=-0.7, c=2.2):");
System.out.printf("x1=-2.3 ---> y=%.4f\n", task2(x1,1));
System.out.printf("x2=0.6 ---> y=%.4f\n", task2(x2,2));
System.out.printf("x3=4.8 ---> y=%.4f\n", task2(x3,3));
System.out.println("Case 2 (a=10.5, b=-2.5, c=5.6):");
System.out.printf("x1=-2.3 ---> y=%.4f\n", task2(x1,1));
System.out.printf("x2=0.6 ---> y=%.4f\n", task2(x2,2));
System.out.printf("x3=4.8 ---> y=%.4f\n", task2(x3,3));
System.out.println("Case 3 (a=5.4, b=3, c=2.6):");
System.out.printf("x1=-2.3 ---> y=%.4f\n", task2(x1,1));
System.out.printf("x2=0.6 ---> y=%.4f\n", task2(x2,2));
System.out.printf("x3=4.8 ---> y=%.4f\n", task2(x3,3));
}
public static double task1(double x){
double a=1.5, b=0.7,y = 0, z=tan(abs(tan(b*x)));
if(x<=a) {
y=a*pow(cos(x),2)+b*pow(sin(z*x),2);
}
else
if(a<x & x<=4.5*b) {
y=a*tan(pow(sin(b*x),2)+z);
}
else
if(x>4.5*b) {
y=log(a*x-b)+pow(z,2);
}
return y;
}
static double task2(double x, int num){
double a, b, c, y;
switch (num) {
case 1:
a=3.2;
b=-0.7;
c=2.2;
break;
case 2:
a=10.5;
b=-2.5;
c=5.6;
break;
case 3:
a=5.4;
b=3;
c=2.6;
break;
default:
a=0;
b=0;
c=0;
break;
}
if(abs(1-pow(x, 2)) == a+c) {
y=x*pow(E,a)+pow(E,abs(b*c));
}
else
if(abs(1-pow(x,2))>(a+c)){
y=pow(sin(a*x),2)+cos(b*c);
}
else {
y=sqrt(a*pow(b,4)+pow(c*pow(x,2),(1/5)));
}
return y;
}
}
Код програми LR22
import static java.lang.Math.*;
import java.util.Scanner;
public class LR22 {
public static void main(String[] args) {
System.out.println("------------Task 3------------");
Scanner input = new Scanner(System.in);
System.out.print("Enter a: ");//набір вхідних данних 1
double a = input.nextDouble();
System.out.print("Enter b: ");
double b = input.nextDouble();
System.out.print("Enter c: ");
double c = input.nextDouble();
if(task3(a,b,c)) { //Вивід результату 1
System.out.printf("Result is %b%n", task3(a,b,c));
System.out.println("Трикутник зі сторонами " + a + ", " + b + ", " + c + " є прямокутним");
}
else {
System.out.printf("Result is %b%n", task3(a,b,c));
System.out.println("Трикутник зі сторонами " + a + ", " + b + ", " + c + " не є прямокутним");
}
System.out.println();
System.out.print("Enter a: ");//набір вхідних данних 2
a = input.nextDouble();
System.out.print("Enter b: ");
b = input.nextDouble();
System.out.print("Enter c: ");
c = input.nextDouble();
if(task3(a,b,c)) { //Вивід результату 2
System.out.printf("Result is %b%n", task3(a,b,c));
System.out.println("Трикутник зі сторонами " + a + ", " + b + ", " + c + " є прямокутним");
}
else {
System.out.printf("Result is %b%n", task3(a,b,c));
System.out.println("Трикутник зі сторонами " + a + ", " + b + ", " + c + " не є прямокутним");
}
System.out.println();
System.out.print("Enter a: ");//набір вхідних данних 3
a = input.nextDouble();
System.out.print("Enter b: ");
b = input.nextDouble();
System.out.print("Enter c: ");
c = input.nextDouble();
if(task3(a,b,c)) { //Вивід результату 3
System.out.printf("Result is %b%n", task3(a,b,c));
System.out.println("Трикутник зі сторонами " + a + ", " + b + ", " + c + " є прямокутним");
}
else {
System.out.printf("Result is %b%n", task3(a,b,c));
System.out.println("Трикутник зі сторонами " + a + ", " + b + ", " + c + " не є прямокутним");
}
System.out.println();
System.out.println();
System.out.println();
System.out.println("------------Task 4------------");
task4(1);
task4(2);
task4(3);
}
static boolean task3(double a, double b, double c){
if(((pow(a, 2) == pow(b, 2) + pow(c, 2)) | (pow(b,2)==pow(a,2)+pow(c,2)) | (pow(c,2)==pow(a,2)+pow(b,2))) & (a>0) & (b>0) & (c>0) ){
return true;
}
else
return false;
}
static void task4(int num){
double x0, y0, x1, y1;
switch (num) {
case 1:
x0=2;
y0=2;
x1=-4;
y1=0;
break;
case 2:
x0=8;
y0=9;
x1=12;
y1=1;
break;
case 3:
x0=-3;
y0=0.9;
x1=2;
y1=3;
break;
default:
x0=0;
y0=0;
x1=0;
y1=0;
break;
}
if((pow(x0,2)+pow(y0,2)) > (pow(x1,2)+pow(y1,2))){
//так як точка О має координати (0;0), то ця рівність є достатньою умовою для визнаення віддстані до точки О(0;0)
System.out.println("Точка В("+x1+";"+y1+") менш віддалена від точки O(0;0).");
}
else {
if ((pow(x0,2)+pow(y0,2)) < (pow(x1,2)+pow(y1,2))){
System.out.println("Точка A("+x0+";"+y0+") менш віддалена від точки O(0;0).");
}
else
{
System.out.println("Точка O(0;0) рівновіддалена від точок A("+x0+";"+y0+") та В("+x1+";"+y1+").");
}
}
}
}
Результат програми
/
/
Висновок: Я створив дві програми, в яких було використано декілька методів, різні способи присвоєння значень змінним. В програмах виконано 4 завдання. Було використано умовний оператор if, оператор switch, форматований вивід printf, математичні функції. Створив блок-схему для завдання 4.