Національний технічний університет України
«КПІ імені Ігоря Сікорського»
Кафедра автоматизації проектування енергетичних процесів і систем
ЗВІТ
з лабораторної роботи № 1
з дисципліни «Алгоритмізація та Програмування»
Тема «Математичні функції та управляючі конструкції»
Варіант: 18
Київ – 2021
Завдання на лабораторну роботу
1. Ознайомитись з математичними операторами та управляючими конструкціями.2. Дослідити особливості їхнього застосування для розв’язання складних математичних виразів.
3. Написати програму, що виконує математичні розрахунки за заданим рівнянням. Врахувати можливі математичні особливості рівняння.4. Реалізувати ініціалізацію розрахункових змінних (x, a, b, …) початковими значеннями або з використанням додаткових параметрів командного рядка, або з консолі (клавіатури), або звикористанням значень за замовчуванням.У якості індивідуального завдання необхідно написати програму, що виконує розрахунки для математичних виразів із використанням індивідуального завдання 2 для кожного варіанту з Додатку В.
Мій варіант 18:
Блок схема розв’язку:
Теоретичні відомості:
Прийнявшись за виконання даного завдання, я знов створив новий проект в repl.it для написання програми мовою С. (Create new repl)
Спочатку, я ініціалізував та призначив значення int змінним a, b, x за допомогою вводу від користувача в консолі. Для отримання вхідних даних я використав метод scanf().
Цей метод має однакові параметри, що й метод printf(), тобто масив char[] для форматування та усі інші для змінних які потрібно вставити. Але замість цього цей метод приймає вхід з клавіатури у вказаному форматі. Тут є особливий момент - “&a, &b, &x”. Знак & перед параметрами означає, що передаються у метод параметри разом із посиланням на дані змінні, замість того щоб передавалися лише значення. Це дає можливість передати у метод змінні та зберегти в них нові вхідні дані. Тому після визову методу scanf() наші змінні “заповнились” потрібними користувачу змінними.
Отримавши числа для обчислювань, повертаємось до завдання варіанту. Треба вирахувати значення змінної y в залежності від значення x. Для того щоб розгалужити розрахунки для кожного із випадків значень x використаємо оператор if, if else та else.
Одразу можна спробувати зрозуміти ці оператори переклавши їх з англійської. Якщо, інакше якщо, інакше — відповідно. Ці оператори працюють із умовами такими як
x == 2, x > 2, x < 2 та ін.
При if (x == 2) { (формула) } компілятор перевіряє чи є істиною умова змінна х дорівнює двум. Якщо це істина, то виконається код всередині блока if, в нашому випадку розрахується формула.
При else if (x > 2) { (формула) } компілятор виконає код всередині цього блока лише у випадку якщо минулий if не здійснився (бо умова хибна) та нова умова х більше двох є істиною.
При else { (формула) } нам не потрібно вказувати умову, бо він має намір виконатись якщо if та його else if не виконались. Тобто як залишкова умова “якщо усе, що вище, не підійшло”
Я використав ці оператори в своєму коді отак:
if (x == 2) {(формула 1)}
else if(x > 2) {(формула 2)}
else {(формула 3)}
Словами: Якщо змінна х дорівнює двом, то виконується формула 1. Якщо не дорівнює двом, то перевірити чи більше двох. Якщо більше, то виконати формулу 2. Інакше, якщо х також й не більше двох, то виконати формулу 3
Розглянемо мої розрахункові формули:
pow(b + x, a * b * x) — 1 формула
round(a * sin(b * x)) — 2 формула
abs(a * b + x) — 3 формула
Бачимо нові методи pow(), sin(), round() та abs(). Ці методи ми отримали з внутрішніх бібліотек мови С: перші три з <math.h> та abs() з <stdlib.h>. Додаємо їх за допомогою #include у початку програми. Тепер ми можемо використати ці математичні методи.
Pow() - приймає два параметра типу цілих чисел або з рухомою комою. Повертає число приведене до степеня. Перший параметр — число, яке треба привести до степеню. Другий — число, яке й є показником степеня.
Sin() - приймає параметр число із якого повертає синус. Так як синус частіш за все неціле число я вирішив його округлити за допомогою іншого метода.
Round() - приймає параметр число, який округляє та повертає.
Abs() - приймає параметр число, повертає модуль цього параметра.
Окрім цих методів звісно використовуються й примітивні математичні операції, але у вигляді операторів із двома операндами. Ось перелік які я використовував:
+ — додавання
* — множення
Отримавши кінцеві значення y за допомогою розрахунків, виведемо його значення за допомогою вже знайомого методу printf(). Для виводу цих даних використається метод із форматованим виводом — printf().
Atoi() - метод, який правильно конвертує char[] в int
argc – int кількість параметрів комнадної строки
argv[] - масив параметрів, перший (нульовий) елемент масива завжди є названня програми
На виводі результату й закінчується моя програма. Розглянемо код програми
Код програми:
//Череватий Андрій Олександрович 19.10.2021 Лабораторна робота №2 Алгоритмізація та програмування 18 варіант
#include <stdio.h>
#include <math.h> //бібліотека із pow(), sin() та round()
#include <stdlib.h> //бібліотека із abs()
int main(int argc, char *argv[]) {
int a, b, x, y, answer; //Ініціалізація змінних
printf("Choose the way\n1 - keyboard input;\n2 - cmd parametrs;\nanything else - default variables\n");
printf("****************************\n>");
scanf("%d", &answer);
if (answer == 1) { //Вхідні дані з клавіатури
printf("Input like this a, b, x: ");
scanf("%d, %d, %d", &a, &b, &x);
}
else if (answer == 2 && argc == 4) { //Параметри командної строки
a = atoi(argv[1]); //Метод atoi() конвертує з char[] у int
b = atoi(argv[2]);
x = atoi(argv[3]);
printf("a, b, x: %d, %d, %d\n", a, b, x);
}
else { //За замовчуванням
a = 3;
b = 1;
x = 2;
}
if (x == 2) y = pow(b + x, a * b * x); //x = 2
else if(x > 2) y = round(a * sin(b * x)); // x > 2
else y = abs(a * b + x); // x < 2
printf("The result y is: %d\n", y); //Вивід
return 0;
}
Посилання на програму в repl.it: https://replit.com/join/rcnssawhrd-dolphiedude
Декілька результатів коду:
Висновок:
Я ознайомився із математичними операторами та управляючими конструкціями. Дослідив особливості їхнього застосування для розв’язання складних математичних виразів. Це мені дозволило написати програму, що виконує математичні розрахунки за завданням. Врахував можливі математичні особливості виразів. Реалізував ініціалізацію розрахункових змінних (x, a, b, …) з консолі (клавіатури). Дізнався про нові математичні методи. Труднощів майже не зустрів, окрім дробового результата обчислень другої формули, знадобилося використовувати округлення. Отримав очікуваний результат, який збігається із результатами при власному обчислюванні за допомогою калькулятора.