Додаток 2
Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
ЗВІТ
з лабораторної роботи № 2
з дисципліни «Програмування алгоритмічних структур»
Тема «Програмування розгалужених алгоритмів»
Варіант № 16
Мета роботи: набуття практичних навичок використання умовного опера-тораifта операторавиборуswitchпри створюванніпрограмних проектіврозгалуженої структури.
Завдання на лабораторну роботу.
Розробити блок-схеми алгоритмів і написати програми мовою Java із застосуванням умовного оператора if та оператора вибору switch для розв’язання завдань, поданих в табл.1–4 відповідно до індивідуального варіанта. Варіант обрати за списком групи.
Розробити програмні проекти в середовищі Intellij IDEA для реалізації написаних програм. Перевірити результати обчислень альтернативними розрахунками (наприклад, Excel, калькулятор, тощо).
Зробити Звіт з лабораторної роботи та вчасно надіслати викладачу на перевірку.
Опис завдання табл. 1 для варіанта 16:
/
Опис завдання табл. 2:
/
Опис завдання табл. 3:
/Опис завдання табл. 4:
/
Опис розв’язку завдання 1:
Метод task1 повертає результат обчислень double. Усередені метода с початку я ввів данні згідно мого варіанту. Це константи a,b і z.
Потім за допомогою розгалуження If я почав перевірювати константи з змінною згідно до варіанту. І залежно від цього виконувати умови завдання.
В обчислюванні я використовував математичні функції, які визивав за допомогою Math…
Було використано:
Sin() – синус аргументу.
Pow() – возведення у степінь.
Cos() – косинус аргументу.
Abs() – модуль функції.
Math.E – статична константа. Число Ейлера.
У кінці, після опрацювання методу, ми записуємо отримане значення у змінну task1.
Опис розв’язку завдання 2:
Метод task2 повертає так само результат обчислень double. Метод зчислює вхідну змінну double x та int index, який відвовідає за вибір потрібних наборів констант.
Вибір набору констант здійснюється за допомогою розгалуження switch і параметру index.
Потім аналогічно до першого завдання за допомогою розгалуження If я почав перевірювати константи з змінною згідно до варіанту. І залежно від цього виконувати умови завдання.
В обчислюванні я використовував математичні функції, які визивав за допомогою Math…
Було використано:
Sin() – синус аргументу.
Pow() – возведення у степінь.
Ln() –натуральний логарифм.
Cos() – косинус аргументу.
Abs() – модуль функції.
Math.E – статична константа. Число Ейлера.
У кінці, після опрацювання методу, ми записуємо отримане значення у змінну task2.
Код програми:
package com.company;
public class Lr21 {
public static void main(String[] args) {
//Ввід та присвоєння змінних
double t1,t2;
double[] x = {-2.3,0.6,4.8};
//Приссвоєння результатів й вивід результатів
System.out.println("Завдання 1:");// Завдання 1
for (int i=0; i<3; i++){
t1= task1(x[i]);
System.out.printf("\nX%d = %.2f\nTask1 = %.4f", i, x[i], t1);
}
System.out.println("\n\n\nЗавдання 2:");// Завдання 2
for (int j=0; j<3; j++){
System.out.printf("\n\nOption%d",j+1);
for (int i=0; i<3; i++) {
t2 = task2(x[i], j);
System.out.printf("\nX%d = %.2f\nTask2 = %.4f", i, x[i], t2);
}
}
}
//Обчислювання завдання 1
public static double task1(double x) {
double t,a,b,z;
t=0;
a = 0.7;
b = -1.25;
z = 3.5;
if ( x < a ){
t = 2.8*Math.pow(Math.sin(a*x),2)-b*Math.pow(x,3)*z;
}
if ( a <= x && x <= Math.pow(b,2)){
t = z*Math.cos(Math.pow(a*x+b,2));
}
if ( x > Math.pow(b,2) ){
t = Math.pow(Math.E,Math.abs(2.5*a*x))+z*a*b*x;
}
return t;
}
//Обчислювання завдання 2
public static double task2(double x, int index) {
double t,a,b,z;
t=0;
a=0;
b=0;
z=0;
switch (index){
case 0: a = 0.1;//Дані для першого випадку
b = 0.5;
z = Math.pow(Math.E,2.5*a*x);
break;
case 1: a = 1.2;//Дані для другого випадку
b = 2.5;
z = Math.pow(Math.E,2.5*a*x);
break;
case 2: a = 2.5;//Дані для третього випадку
b = 1.2;
z = Math.pow(Math.E,2.5*a*x);
break;
}
if ( x < a ){
t = 3.5*Math.pow(Math.sin(Math.pow(b*x+z,3)),2);
}
if ( a <= x && x <= Math.pow(b,2.5)){
t = Math.log(a+x*Math.pow(b,3))+a;
}
if ( x > Math.pow(b,2.5) ){
t = Math.pow(Math.cos(Math.pow(a,b)+x*z),2)+Math.pow(a,2);
}
return t;
}
}
Результати рішення програми:
/
/
Опис розв’язку завдання 3:
Метод task3 не повертає ніяких значень. Він бере значення double a,b,c, які було зчитувано у методі main за допомогою сканеру. Метод знаходить найменше серед цих значень и бере зміну як сторону до квадрату. Потім він знаходить значення площі квадрату та трикутника (зі сторонами a,b,c), та виводить на екран назву найбільшого, порівнявши їх у розгалуженні if….
Опис розв’язку завдання 4:
Метод task4 також не повертає ніяких значень. Було узято аналогічну струкутру для обчислювання як у методі task3, та ініціалізації даних як у task2. Було взято значення double a,b,c, які ми обирали за допомогою switch. Метод так само знаходить найменше серед цих значень и бере зміну як сторону до квадрату. Потім він знаходить значення площі квадрату та трикутника (зі сторонами a,b,c), та виводить на екран назву найбільшого, порівнявши їх у розгалуженні if….
Блок-схема до завдання 4:
/
Код програми:
package com.company;
import java.util.Scanner;
public class Lr22 {
public static void main(String[] args) {
double a = 0;
double b = 0;
double c = 0;
Scanner in = new Scanner(System.in);
System.out.println("Введіть a: ");
a = in.nextDouble();
System.out.println("Введіть b: ");
b = in.nextDouble();
System.out.println("Введіть c: ");
c = in.nextDouble();
System.out.println("Результат опрацювання завдання 3:\n");
task3(a,b,c);
System.out.println("\n Результат опрацбвання завдання 4:\n");
for (int i=0; i<3; i++){
System.out.printf("Варіація номер %d\n",i);
task4(i);
}
}
//Обчислювання завдання 3
static void task3(double a,double b, double c){
double min = Math.min(Math.min(a,b),c);
double p=(a+b+c)/2;
double Str = Math.sqrt(p*(p-a)*(p-b)*(p-c));
double Skv = Math.pow(min,2);
if ( Str > Skv ){
System.out.println("Площа трикутника більша за площу квадрату");
}
if ( Str < Skv ){
System.out.println("Площа квадрата більша за площу трикутника");
}
if ( Str == Skv ){
System.out.println("Площі трикутника та квадрата рівні");
}
}
//Обчислювання завдання 4
static void task4(int index){
double a = 0;
double b = 0;
double c = 0;
switch (index){
case 0: a = 3;//Дані для першого випадку
b = 5;
c = 4;
break;
case 1: a = 13;//Дані для другого випадку
b = 8;
c = 11;
break;
case 2: a = 10;//Дані для третього випадку
b = 5;
c = 12;
break;
}
double min = Math.min(Math.min(a,b),c);
double p=(a+b+c)/2;
double Str = Math.sqrt(p*(p-a)*(p-b)*(p-c));
double Skv = Math.pow(min,2);
if ( Str > Skv ){
System.out.println("Площа трикутника більша за площу квадрату");
}
if ( Str < Skv ){
System.out.println("Площа квадрата більша за площу трикутника");
}
if ( Str == Skv ){
System.out.println("Площі трикутника та квадрата рівні");
}
}
}
Результати рішення програми:
/
Висновок:
У цій лабораторній роботі було написано 4 методи, згідно до завдань, які були узяти х табл. 1-4 згідно мого варіанту. Я використовував розгалуження if.. та switch. Щільніше познайомився з пакетом Math, використовував Scanner та цикли for. Проект було створено у середовищі Intellij IDEA, де було створенно два класи Lr21 та Lr22, згідно до задач на лабораторну. Було розроблено блок-схему до 4 завдання. Усі розрахунки було перевірено за допомогою калькулятора, помилок не було знайдено. Зроблено звіт з лабораторної роботи та вчасно надіслано викладачу на перевірку.