Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технології програмування Лабораторний Практикум...doc
Скачиваний:
7
Добавлен:
09.11.2019
Размер:
9.09 Mб
Скачать

Міністерство освіти і науки, молоді та спорту України

Львівський державний університет безпеки життєдіяльності

Кафедра управління

інформаційною безпекою

Ю.І. ГРИЦЮК, О.І. ЛОЗИНСЬКИЙ

ТЕХНОЛОГІЇ ПРОГРАМУВАННЯ

Частина 1. Структурне програмування

Лабораторний практикум

Львів

ЛДУ БЖД

2012

ББК 32.97я73

Г85

УДК 681.322[075.8]

А в т о р и

Ю.І. ГРИЦЮК – д-р техн. наук, доцент, завідувач кафедри управління інформаційною безпекою Львівського ДУ БЖД;

О.І. ЛОЗИНСЬКИЙ – магістр, викладач кафедри управління

інформаційною безпекою Львівського ДУ БЖД

Р е ц е н з е н т и:

А.Д. КУЗИК – канд. фіз.-мат. наук, доцент, доцент кафедри фундаментальних дисциплін Львівського ДУ БЖД (м. Львів);

В.М. СЕНЬКІВСЬКИЙ – д-р техн. наук, професор, завідувач кафедри електронних видань Української академії друкарства (м. Львів),

Д.Д. ПЕЛЕШКО – д-р техн. наук, доцент, професор кафедри автоматизованих систем управління НУ "Львівська політехніка" (м. Львів)

Відповідальний редактор В.В. ДУДОК

Затверджено до друку Вченою радою Львівського державного університету безпеки життєдіяльності (прот. № 8 від 19.05.2012 р.)

ISВN 978-966-3466-85-9  Ю.І. Грицюк, 2012

 О.І. Лозинський, 2012

 Вид-во ЛДУ БЖД, 2012

ЗМІСТ

Міністерство освіти і науки, молоді та спорту України 1

Львівський державний університет безпеки життєдіяльності 1

Кафедра управління 1

інформаційною безпекою 1

Ю.І. ГРИЦЮК, О.І. ЛОЗИНСЬКИЙ 1

ТЕХНОЛОГІЇ ПРОГРАМУВАННЯ 1

Частина 1. Структурне програмування 1

Лабораторний практикум 1

Львів 1

ББК 32.97я73 2

Г85 2

УДК 681.322[075.8] 2

А в т о р и 2

Відповідальний редактор В.В. ДУДОК 2

ЗМІСТ 3

ВСТУП 16

ВСТУП 16

Лабораторна робота № 1. Програмування МАТЕМАТИЧНИХ ФУНКЦІЙ ТА ЇХ ТАБУЛЮВАННЯ 19

1.1. Програма роботи 19

1.1. Програма роботи 19

1.2. Вказівки до виконання роботи 19

1.2. Вказівки до виконання роботи 19

1.3. Зразок виконання роботи 20

1.3. Зразок виконання роботи 20

// Обчислення функції b[x, y, z] та її складових 20

Результат обчислення значень математичних функцій 21

Код програми 1.2. Одновимірне табулювання математичних функцій 22

Результати одновимірного табулювання математичних функцій 23

Код програми 1.3. Двовимірне табулювання математичних функцій 23

Результати двовимірного табулювання функції b[x, y, z] 24

1.4. Індивідуальні завдання 25

1.4. Індивідуальні завдання 25

Лабораторна робота № 2. Програмування ЛОГіЧНИХ ФУНКЦІЙ ТА ЇХ ТАБУЛЮВАННЯ 29

2.1. Програма роботи 29

2.1. Програма роботи 29

2.2. Вказівки до виконання роботи 29

2.2. Вказівки до виконання роботи 29

2.3. Зразок виконання роботи 30

Результат обчислення значень логічних функцій 32

Код програми 2.2. Одновимірне табулювання логічних функцій 32

Результат одновимірного табулювання логічних функцій 33

Код програми 1.2. Двовимірне табулювання логічних функцій 33

Результат двовимірного табулювання логічних функцій 35

2.4. Індивідуальні завдання 35

2.4. Індивідуальні завдання 35

Лабораторна робота № 3. ХАРАКТЕРНІ МЕХАНІЗМИ НАКОПИЧЕННЯ СУМИ І ДОБУТКУ 41

3.1. Програма роботи 41

3.1. Програма роботи 41

3.2. Вказівки до виконання роботи 41

3.2. Вказівки до виконання роботи 41

3.3. Зразок виконання роботи 43

3.3. Зразок виконання роботи 43

Код програми 3.1 (фрагмент). Обчислення значення скінченої суми 43

Результат розрахунку значення скінченої суми 44

Результат розрахунку значення скінченого знакозмінного добутку 45

Код програми 3.3 (фрагмент). Обчислення значення безмежної суми 46

Результат розрахунку значення безмежної суми 46

Код програми 3.4 (фрагмент). Обчислення значення подвійної суми/добутку 47

Результат розрахунку значення подвійної суми/добутку 48

Код програми 3.4. Характерні механізми накопичення суми і добутку 48

// Обчислення значення елемента суми 48

// Обчислення значення скінченої суми 48

// Обчислення значення елемента добутку 48

// Обчислення значення скінченого знакозмінного добутку 48

// Обчислення значення елемента суми 48

// Обчислення значення безмежної знакозмінної суми 48

// Обчислення значення елемента суми 48

// Обчислення значення безмежної суми 48

3.4. Індивідуальні завдання 52

3.4. Індивідуальні завдання 52

Лабораторна робота № 4. ВИКОРИСТАННЯ складених ФУНКЦІЙ (функціоналів) 57

4.1. Програма роботи 57

4.1. Програма роботи 57

4.2. Вказівки до виконання роботи 57

4.2. Вказівки до виконання роботи 57

4.3. Зразок виконання роботи 58

Код програми 4.1. Обчислення значення складеної функції (функціонала) 59

// Одновимірне табулювання функції 59

// Двовимірне табулювання функції 59

Результати двовимірного табулювання складеної функції (функціонала) 61

Код програми 4.2. Обчислення значення складеної функції (функціонала) 62

// Обчислення значення функції z[y, m] для двовимірного табулювання функції 62

// Одновимірне табулювання функції 62

// Двовимірне табулювання функції 62

Результати двовимірного табулювання складеної функції (функціонала) 65

Код програми 4.3. Обчислення значення складеної функції (функціонала) 65

// Одновимірне табулювання функції 66

// Двовимірне табулювання функції 66

Результати двовимірного табулювання складеної функції (функціонала) 68

Код програми 4.4. Обчислення значення складеної функції (функціонала) 69

// Обчислення мінімального значення з двох елементів 69

// Обчислення максимального значення з двох елементів 69

// Одновимірне табулювання функції 69

// Двовимірне табулювання функції 69

<< setw(9) << "w3[s, t]" << setw(9) << "w4[s, t]" << setw(9) << "w5[s, t]" 71

Результати двовимірного табулювання складеної функції (функціонала) 72

4.4. Індивідуальні завдання 72

4.4. Індивідуальні завдання 72

Лабораторна робота № 5. ОБЧИСЛЕННЯ ЕЛЕМЕНТІВ МАСИВІВ 82

5.1. Програма роботи 82

5.1. Програма роботи 82

5.2. Вказівки до виконання роботи 82

5.2. Вказівки до виконання роботи 82

5.3. Зразок виконання роботи 83

5.3. Зразок виконання роботи 83

// Обчислення середнього значення елементів масиву 84

// Обчислення значення факторіала 84

// Обчислення мінімального значення елементів масиву 84

// Обчислення максимального значення елементів масиву 84

// Обчислення значення логарифма від будь - якого числа за будь - якою основою 84

// Обчислення значення елемента матриці B 86

// Заповнення значеннями елементів двовимірного масиву 87

// Виведення елементів одновимірного масиву 87

// Виведення елементів двовимірного масиву 87

Результати розрахунку значень елементів двох матриць та їх оброблення 89

// Заповнення елементами двовимірного масиву C 93

// Обчислення середніх арифметичних значень з додатних елементів 93

5.4. Індивідуальні завдання 96

5.4. Індивідуальні завдання 96

Лабораторна робота № 6. дії над векторами та матрицями 106

6.1. Програма роботи 106

6.1. Програма роботи 106

6.2. Вказівки до виконання роботи 106

6.2. Вказівки до виконання роботи 106

6.3. Зразок виконання роботи 107

Результат обчислення значень вхідних даних 108

Результат присвоєння "=", додавання "+" і віднімання "–" векторів і матриць 109

Результат множення "*" і ділення "/" векторів і матриць 110

Множення вектора на матрицю та навпаки 111

Результат обчислення матричного виразу 113

Результат розв'язання матричних рівнянь: 114

Код програми 6.1. Дії над векторами і матрицями 115

// Заповнення елементами двовимірного масиву C 115

// Заповнення елементами двовимірного масиву D 115

// Виконання дії додавання "+" двох матриць 115

// Виконання дії додавання "+" двох векторів 115

// Виконання дії віднімання "-" двох матриць 115

// Виконання дії віднімання "-" двох векторів 115

// Виконання дії множення "*" вектора-рядка на вектор-стовпець 115

// Виконання дії множення "*" вектора-стовпця на вектор-рядок 116

// Виконання дії множення "*" числа на вектор 116

// Виконання дії множення "*" вектора на число 116

// Виконання дії множення "*" вектора-рядка на матрицю 116

// Виконання дії множення "*" матриці на число 116

// Виконання дії множення "*" числа на матрицю 116

// Виконання дії множення "*" матриці на вектор-стовпець 116

// Виконання дії множення "*" вектора-рядка на матрицю 116

// Виконання дії ділення "/" числа на вектор 116

// Виконання дії ділення "/" вектора на число 116

// Виконання дії ділення "/" числа на матрицю 116

// Виконання дії ділення "/" матриці на число 116

// Присвоєння значень елементів однієї матриці іншій 116

// Присвоєння значень елементів одного вектора іншому 116

// Піднесення матриці до n-го степеня 116

// Обчислення транспонованої "^t" матриці 116

// Обчислення оберненої " - 1" матриці 116

// Відображення елементів одновимірного масиву 116

// Відображення елементів двовимірного масиву 116

D *= Y; 126

6.4. Індивідуальні завдання 127

6.4. Індивідуальні завдання 127

Лабораторна робота № 7. Характерні механізми оброблення елементів матриць 133

7.1. Програма роботи 133

7.1. Програма роботи 133

7.2. Вказівки до виконання роботи 133

7.2. Вказівки до виконання роботи 133

7.3. Зразок виконання роботи 134

7.3. Зразок виконання роботи 134

// Обчислення значення елемента одновимірного масиву 134

Результати розрахунку значень елементів вектора-рядка/стовпця 135

Результати розрахунку значень елементів матриці 136

// Заповнення елементами одновимірного масиву 136

// Обчислення значення факторіала 136

// Обчислення значення першого елемента двовимірного масиву 136

// Обчислення значення поточного елемента двовимірного масиву 136

// Заповнення елементами двовимірного масиву 137

// Виведення елементів вектора-стовпця 137

// Виведення елементів вектора-рядка 137

// Виведення елементів двовимірного масиву 137

// Присвоєння значень елементів одного вектора іншому 139

// Присвоєння значень елементів однієї матриці іншій 139

// Упорядкування одновимірного масиву методом перестановок 139

// Упорядкування одновимірного масиву методом пошуку найменшого елемента 139

Результати упорядкування рядків матриці за спаданням значень їх елементів 141

Результати упорядкування матриці по рядках/стовпцях 142

// Упорядкування рядів матриці: o = 0 - спаданням; o = 1 - зростанням 143

// Упорядкування матриці по рядках: o = 0 - спаданням; o = 1 - зростанням 143

// Упорядкування матриці по стовпцях: o = 0 - спаданням; o = 1 - зростанням 143

// Упорядкування матриці по рядках: o = 0 - спаданням; o = 1 - зростанням 143

// Упорядкування матриці по стовпцях: o = 0 - спаданням; o = 1 - зростанням 143

// Впорядкування елементів одновимірного масиву 143

// Впорядкування елементів одновимірного масиву 144

// Занесення елементів рядків матриці у одновимірний масив 144

// Впорядкування елементів одновимірного масиву 144

// Занесення елементів стовпців матриці у одновимірний масив 144

// Впорядкування елементів одновимірного масиву 144

Матриця інвертування елементів вектора-рядка/стовпця, матриці 146

Результати інвертування елементів вектора-рядка 146

Результати інвертування елементів вектора-стовпця 146

Результати розрахунку значень елементів матриці інвертування 146

Результати інвертування матриці по стовпцях 147

Результати інвертування матриці по рядках 147

Результати інвертування матриці по стовпцях і по рядках 147

Результати інвертування матриці по рядках і стовпцях 147

// Перевантаження функції множення "*" вектора-рядка на матрицю 148

// Перевантаження функції множення "*" матриці на вектора-стовпець 148

// Перевантаження функції множення "*" матриці на матрицю 148

Матриця перестановки елементів вектора-рядка/стовпця, матриці 150

Результати перестановки елементів вектора-рядка 150

Результати перестановки елементів вектора-стовпця 150

Результати розрахунку значень елементів матриці перестановки 150

Результати перестановки стовпців матриці 151

Результати перестановки рядків матриці 151

Результати перестановки стовпців і рядків матриці 151

Результати перестановки рядків і стовпців матриці 151

Матриця зсуву елементів рядка/стовпця на одну позицію 153

Матриця зсуву елементів рядка/стовпця на дві позиції 153

Матриця зсуву елементів рядка/стовпця на п'ять позицій 154

Результати зсуву елементів вектора-рядка 154

Результати зсуву елементів вектора-стовпця 154

Результати зсуву елементів вектора-стовпця 154

Результати розрахунку значень елементів матриці зсуву 155

Результати зсуву стовпців матриці 156

Результати зсуву рядків матриці 157

Код програми 7. Характерні механізми оброблення елементів матриць 160

// Заповнення елементами одновимірного масиву 160

// Обчислення значення факторіала 160

// Обчислення значення першого елемента двовимірного масиву 160

// Обчислення значення поточного елемента двовимірного масиву 160

// Заповнення елементами двовимірного масиву 160

// Виведення елементів вектора-стовпця 160

// Виведення елементів вектора-рядка 160

// Виведення елементів двовимірного масиву 160

// Присвоєння значень елементів одного вектора іншому 160

// Присвоєння значень елементів однієї матриці іншій 160

// Упорядкування одновимірного масиву методом перестановок 160

// Упорядкування одновимірного масиву методом пошуку найменшого елемента 160

// Упорядкування стовпців матриці: o = 0 - спаданням; o = 1 - зростанням 160

// Упорядкування рядів матриці: o = 0 - спаданням; o = 1 - зростанням 160

// Упорядкування матриці по рядках: o = 0 - спаданням; o = 1 - зростанням 160

// Упорядкування матриці по стовпцях: o = 0 - спаданням; o = 1 - зростанням 160

// Упорядкування матриці по рядках: o = 0 - спаданням; o = 1 - зростанням 161

// Упорядкування матриці по стовпцях: o = 0 - спаданням; o = 1 - зростанням 161

// Створення матриці інвертування 161

// Перевантаження функції множення "*" вектора-рядка на матрицю 161

// Перевантаження функції множення "*" матриці на вектора-стовпець 161

// Перевантаження функції множення "*" матриці на матрицю 161

// Створення матриці перестановки 161

// Створення матриці зсуву 161

// Впорядкування елементів одновимірного масиву 168

// Впорядкування елементів одновимірного масиву 168

// Занесення елементів рядків матриці у одновимірний масив 168

// Впорядкування елементів одновимірного масиву 168

// Занесення елементів стовпців матриці у одновимірний масив 169

// Впорядкування елементів одновимірного масиву 169

7.4. Індивідуальні завдання 171

; , де 171

Література 176

Література 176

Навчальне видання 178

ЛОЗИНСЬКИЙ Орест Ігорович 178

ТЕХНОЛОГІЇ ПРОГРАМУВАННЯ 178

Частина 1. Структурне програмування 178

Лабораторний практикум 178

Літературний редактор В.В. Дудок 178

Редактор Г.М. Падик 178

Видавництво ЛДУ БЖД, вул. Клепарівська, 35, м. Львів, Україна, 79007 178

Грицюк Ю.І., Лозинський О.І. 179

ISВN 978-966-3466-85-9 179

ВСТУП

У лабораторному практикумі підібрано низку робіт, призначених для набуття курсантами/студентами основних знань з дисципліни "Технології програмування", зокрема, технології структурного програмування, використовуючи при цьому середовище Borland C++ Builder 6. Загалом лабораторні роботи знайомлять курсанта/студента з особливостями роботи у цьому середовищі, дають йому змогу засвоїти основні механізми програмування мовою C++. Практично кожна робота дає змогу курсанту/студенту навчитися програмувати математичні та логічні функції, здійснити їх одновимірне та двовимірне табулювати, накопичувати одновимірні скінчені та безмежні знакозмінні суми і добутки, виконувати дії над матрицями, обробляти їх елементи тощо. Кожна лабораторна робота супроводжується програмою роботи та вказівками до її виконання, зразком виконання кожної задачі, а також індивідуальними завданнями, призначеними для засвоєння того чи іншого механізму технології структурного програмування.

Виконуючи послідовно лабораторні роботи, курсант/студент з плином часу переконується в тому, що будь-які математичні чи логічні функції можна з легкістю програмувати мовою C++, розділяючи їх спочатку на прості складові елементи, а потім, звівши все разом у одну змінну, передавати через функцію користувача, яку можна згодом багаторазово використовувати. Такий механізм програмування стосується і широко використовуваних у математиці скінчених і безмежних знакозмінних сум і добутків, а також складених функцій (функціоналів), тобто функцій, складовими елементами яких є інші функції.

Окрім цього, у лабораторному практикумі розглядаються також різні механізми програмування, які реалізують специфічне оброблення масивів, а отримані результати потім використовуються для інших потреб. Наприклад, виконання складних дій над матрицями, обчислення значень матричних виразів чи розв'язування матричних рівнянь тощо, також доцільно спочатку оформити у вигляді функцій користувача, а вже потім використовувати їх для виконання різних математичних розрахунків.

Рекомендуємо під час програмування математичних функцій записувати їх не одним виразом, а розділяти на частини і записувати у декілька рядків. Це частково забезпечить Вас від здійснення синтаксичних помилок, а також дасть змогу набагато швидше аналізувати окремі частини виразу і виявляти у них як синтаксичні, так і логічні помилки. Рекомендуємо також на початку кожної функції користувача записувати відповідні коментарі, у яких зазначати як номер лабораторної роботи та самої задачі, так і її призначення. Рекомендуємо також всередині функції користувача перед кожною групою дій записувати їх назви, особливості реалізації чи виконання, що згодом дасть Вам змогу швидко аналізувати роботу коду програми чи орієнтуватися у особливостях її виконання.

Представлений матеріал у лабораторному практикумі побудовано за принципом повторюваності з попереднім поясненням настанов для розв'язання тієї чи іншої задачі. При цьому детальні пояснення наводяться тільки тоді, якщо настанова виконується вперше. Наступні задачі передбачають, що курсант/студент вже володіє попереднім матеріалом. Тому, якщо формулювання чергової настанови здаються курсанту/студенту не зовсім зрозумілими, то йому потрібно повернутися назад, до попередніх настанов, які пояснювалися раніше, або відповідних теоретичних підказок, наведених внизу сторінки. Деякі важливі поняття, які використовуються в лабораторному практикумі, не визначені. Це зроблено для того, щоб не переобтяжувати практикум теоретичним матеріалом, яким курсант/студент повинен володіти, прослухавши лекційний курс.

Звичайно, запропоновані для виконання курсантом/студентом лабораторні роботи не можуть охопити всю повноту розділів технології структурного програмування і можливостей середовища Borland C++. Проте набуті ним навики знадобляться йому для розв'язання різних математичних задач з різних фахових дисциплін, для подальшого самостійного вивчення методів і принципів інших технології програмування, зокрема – об'єктно-орієнтованого.

Цілком зрозуміло, у цьому лабораторному практикумі серед чималого обсягу викладеного матеріалу є й недоліки – не зовсім зрозумілі моменти реалізації тих чи інших настанов, а то і деякі неточності чи невідповідності з попередньо заявленим описом, які, без сумніву, виявить уважний курсант/студент. Але в ньому є головне достоїнство: він узагальнює особистий досвід авторів у області технології структурного програмування та залишає охочим до програмування місце для подальшої творчості. Курсанти/студенти чи будь-які інші охочі до навчання знайдуть в ньому конкретні приклади, які допоможуть їм вирішити деякі питання щодо типових постановок задач з різних предметних областей знань, їх математичного формулювання, алгоритмізації та програмування.

Матеріал лабораторного практикуму повністю відповідає першій частині робочої навчальної програми з дисципліни "Технології програмування", яку викладають у Львів­­ському державному університеті безпеки життєдіяльності України (м. Львів) для курсантів/студентів напряму підготовки "Управління інформаційною безпекою". Автори приклали чимало зусиль, щоби зробити матеріал цього лабораторного практикуму конкретним, простим для розуміння, засвоєння та, що найважливіше, цікавим. Основна мета полягала у тому, щоби внаслідок вивчення того чи іншого розділу технології структурного програмування курсанти/студенти могли створювати свої власні навчальні програми і, водночас, отримували при цьому як знання, так і моральне задоволення.

Автори висловлюють вдячність рецензентам – доценту Андрію Даниловичу Кузику, професору Всеволоду Миколайовичу Сеньківському і професору Дмитру Дмитровичу Пелешку, а також літературному редактору В.В. Дудку за цінні зауваження та уточнення, які сприяли значному покращенню рукопису.

Автори з вдячністю приймуть будь-які конструктивні зауваження стосовно викладеного у практикумі матеріалу, які можна надсилати за адресою:

Кафедра УІБ, Львівський ДУ БЖД , вул. Клепарівська, 35, м. Львів, Україна, 79007

Тел.: 067-944-11-15. E-mail: gryciuk.yura@gmail.com

Лабораторна робота № 1. Програмування МАТЕМАТИЧНИХ ФУНКЦІЙ ТА ЇХ ТАБУЛЮВАННЯ

1.1. Програма роботи

1.1.1. Підготувати бланк завдання та отримати завдання.

1.1.2. Запрограмувати математичні функції згідно з вказівками до виконання роботи.

1.1.3. Виконати одновимірне табулювання математичних функцій згідно з вказівками до виконання роботи.

1.1.4. Виконати двовимірне табулювання математичних функцій згідно з вказівками до виконання роботи.

1.1.5. Підготувати власні коректні вхідні дані для кожної з виконуваних задач, провести відповідні розрахунки і проаналізувати їх.

1.1.6. Оформити звіт про роботу та захистити її.

1.2. Вказівки до виконання роботи

1.2.1. Курсант/студент, відповідно до порядкового номера в журналі викладача, вибирає для себе індивідуальне завдання з розд. 1.4, яке складається з декількох задач, і записує його до бланку завдання (у вигляді текстового документа Word).

1.2.2. У середовищі Borland C++ Builder 6 математичні функції необхідно запрограмувати двома способами: з введенням і без введення допоміжних змінних, а також через відповідні функції користувача, не забуваючи при цьому про свої знання та навики програмування. Механізми їх реалізації є зрозумілим з наведених кодів програм.

1.2.3. Одновимірне табулювання математичних функцій здійснюється за одним аргументом, конкретна назва якого вказана у самій задачі. У ній також задається початкове і кінцеве значення його зміни, а також крок табулювання.

1.2.4. Двовимірне табулювання математичних функцій здійснюється за двома аргументами, конкретні назви яких вказано у самій задачі. У ній також задаються початкові та кінцеві значення їх зміни, а також кроки табулювання.

1.2.5. Власних вхідних даних потрібно підготувати не менше двох комплектів. Їхні значення мають бути коректними, знаходитися в розумних межах і не суперечити своїм математичним виразам (наприклад, щоб значення аргумента кореня квадратного чи логарифма натурального не були від'ємними, аргумент експоненти – не занадто великим і т.д.). Після проведення розрахунків потрібно їх проаналізувати, зробити відповідні висновки, внести власні пропозиції та занести їх до звіту.

1.2.6. Звіт з виконаної роботи має містити такі розділи:

  • бланк індивідуального завдання з записаними на ньому умовами задач;

  • код програми, який планується реалізувати у середовищі Borland C++;

  • результати відповідних розрахунків, які передбачено умовами задач;

  • аналіз отриманих результатів, висновки про особливості розв'язання задач і пропозиції щодо їх удосконалення.

1.3. Зразок виконання роботи

Задача 1.1. Задано такі дійсні числа: x = 1.53№ + 0.5, y = 2.7№ + 1.5, z = 2.15№ + 1.5 (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значень математичних функцій a[x, y, z, b] і b[x, y, z] згідно з такими математичними виразами:

і .

Код програми 1.1. Обчислення значень математичних функцій

#include <vcl>

#include <conio> // Для консольного режиму роботи

#include <iostream> // Для потокового введення-виведення

#include <iomanip> // Використання маніпуляторів введення-виведення

#include <math> // Для математичних функцій

using namespace std; // Використання стандартного простору імен

// Обчислення значення функції b[x, y, z]

double Fn_b(double, double, double);

// Обчислення значення функції a[x, y, z, b]

double Fn_a(double, double, double, double);

int main()

{

cout.precision(3); // Формат #.##

cout.setf(ios_base::fixed); // Формат #.##

SetConsoleOutputCP(1251); // Виведення кирилиці

double x, y, z, b, b1, b2, b3, bb, a, a1, a2, a3, aa;

int Nv; cout << "Введіть значення Nv= "; cin >> Nv;

x = 1.53 * Nv + 0.5; cout << "Значення x= " << setw(7) << x << "." << endl;

y = 2.7 * Nv + 1.5; cout << "Значення y= " << setw(7) << y << "." << endl;

z = 2.15 * Nv + 1.5; cout << "Значення z= " << setw(7) << z << endl << endl;

cout << "Завдання 1.1. Обчислення значень математичних функцій" << endl;

// Обчислення функції b[x, y, z] та її складових

b1 = x * x + tan(pow(y + z, 2)); cout << "Значення b1= " << setw(6) << b1 << endl;

b2 = -0.35 * z - pow(sin(pow(x, 3)), 2); cout << "Значення b2= " << setw(6) << b2 << endl;

b3 = exp((x + y)/z); cout << "Значення b3= " << setw(6) << b3 << endl;

b = y * (b1/b2 + b3); cout << "Значення функції b []= " << setw(7) << b << endl;

bb = y * ((x * x + tan(pow(y + z, 2)))/( –0.35 * z - pow(sin(pow(x, 3)), 2)) + exp((x + y)/z));

cout << "Значення функції b'[]= " << setw(7) << bb << endl << endl;

cout << "Значення функції b\"[]= " << setw(7) << Fn_b(x, y, z) << endl << endl;

// Обчислення функції a[x, y, z, b] та її складових

a1 = pow(x + y, 2); cout << "Значення a1= " << setw(8) << a1 << endl;

a2 = (x + y * y) * pow(fabs(b * b + z), 0.3); cout << "Значення a2= " << setw(8) << a2 << endl;

a3 = exp(z - 2.3) + y * y; cout << "Значення a3= " << setw(8) << a3 << endl;

a = a1 * a2/a3; cout << "Значення функції a []=" << setw(9) << a << endl;

aa = pow(x + y, 2) * (x + y * y) * pow(fabs(b * b + z), 0.3)/(exp(z - 2.3) + y * y);

cout << "Значення функції a'[]=" << setw(9) << aa << endl;

cout << "Значення функції a\"[]=" << setw(9) << Fn_a(x, y, z, b) << endl;

getch(); return 0;

}

// Обчислення значення функції b[x, y, z]

double Fn_b(double x, double y, double z)

{

double b1 = x * x + tan(pow(y + z, 2));

double b2 = -0.35 * z - pow(sin(pow(x, 3)), 2);

double b3 = exp((x + y)/z);

return y * (b1/b2 + b3);

}

// Обчислення значення функції a[x, y, z, b]

double Fn_a(double x, double y, double z, double b)

{

double a1 = pow(x + y, 2);

double a2 = (x + y * y) * pow(fabs(b * b + z), 0.3);

double a3 = exp(z - 2.3) + y * y;

return a1 * a2/a3;

}

Результат обчислення значень математичних функцій

Задача 1.2. Для аргумента x задано межі та крок його зміни: xп = -1.38№ + 0.5, xк = 2.83№ + 1.5, x = (xк – xп)/8, а також дійсні числа y = 2.7№ + 1.5, z = 2.15№ + 1.5 (де № = 4 – номер варіанта). Потрібно розробити код програми для одновимірного табулювання математичних функцій a = f[x, y, z, b] і b = f[x, y, z] за аргументом х, використовуючи математичні вирази, наведені у задачі 1.1.

Код програми 1.2. Одновимірне табулювання математичних функцій

#include <vcl>

#include <conio> // Для консольного режиму роботи

#include <iostream> // Для потокового введення-виведення

#include <iomanip> // Використання маніпуляторів введення-виведення

#include <math> // Для математичних функцій

using namespace std; // Використання стандартного простору імен

// Обчислення значення функції b[x, y, z]

double Fn_b(double, double, double);

// Обчислення значення функції a[x, y, z, b]

double Fn_a(double, double, double, double);

int main()

{

cout.precision(3); // Формат #.###

cout.setf(ios_base::fixed); // Формат #.###

SetConsoleOutputCP(1251); // Виведення кирилиці

// Опис змінних

double x, dx, xp, xk, y, b, a, z;

// Введення вхідних даних

int Nv; cout << "Введіть значення Nv= "; cin >> Nv;

xp = -1.38 * Nv + 0.5; cout << "Значення xp = " << xp << "; ";

xk = 2.7 * Nv + 1.5; cout << setw(17) << "Значення xk = " << setw(6) << xk << "; ";

dx = (xk - xp)/8; cout << setw(17) << "Значення dx = " << setw(6) << dx << "." << endl;

y = 2.7 * Nv + 1.5; cout << "Значення y = " << setw(7) << y << "; ";

z = 2.15 * Nv + 1.5; cout << setw(16) << "Значення z = " << setw(6) << z << "." << endl;

cout << "Завдання 1.2. Одновимірне табулювання математичних функцій" << endl;

for(x = xp; x <= xk + dx/2; x += dx)

{

b = Fn_b(x, y, z); // Обчислення функції b[x, y, z] та її складових

a = Fn_a(x, y, z, b); // Обчислення функції a[x, y, z, b] та її складових

// Виведення значень x, b[] та а[]

cout << "x= " << setw(6) << x << setw(8) << "b[]= " << setw(8) << b

<< setw(8) << " a[]= " << setw(8) << a << endl;

}

getch(); return 0;

}

Результати одновимірного табулювання математичних функцій

Задача 1.3. Для аргументів x та y задано відповідні межі та крок їх зміни: xп = -1.38№ + 0.5, xк = 2.83№ + 1.5, x = (xк – xп)/8, yп = -0.74№ + 1.5, yк = 0.86№ + 1.5, y = (yк – yп)/10, а також задано дійсне число z = 2.15№ + 1.5 (де № = 4 – номер варіанта). Потрібно розробити код програми для двовимірного табулювання математичних функцій a = f[x, y, z, b] і b = f[x, y, z] за аргументами х і у, використовуючи математичні вирази, наведені у задачі 1.1.

Код програми 1.3. Двовимірне табулювання математичних функцій

#include <vcl>

#include <conio> // Для консольного режиму роботи

#include <iostream> // Для потокового введення-виведення

#include <math> // Для математичних функцій

#include <iomanip> // Використання маніпуляторів введення-виведення

using namespace std; // Використання стандартного простору імен

// Обчислення значення функції b[x, y, z]

double Fn_b(double, double, double);

// Обчислення значення функції a[x, y, z, b]

double Fn_a(double, double, double, double);

int main()

{

cout.precision(3); // Формат #.##

cout.setf(ios_base::fixed); // Формат #.##

SetConsoleOutputCP(1251); // Виведення кирилиці

// Опис змінних

double x, dx, xp, xk, y, dy, yp, yk, z, b, a;

int Nv; cout << "Введіть значення Nv= "; cin >> Nv;

xp = -1.38 * Nv + 0.5; cout << "Значення xp = " << setw(6) << xp << "; ";

xk = 2.83 * Nv + 1.5; cout << setw(17) << "Значення xk = " << setw(6) << xk << "; ";

dx = (xk - xp)/8; cout << setw(17) << "Значення dx = " << setw(6) << dx << "." << endl;

yp = -0.74 * Nv + 1.5; cout << "Значення yp = " << setw(6) << yp << "; ";

yk = 0.86 * Nv + 1.5; cout << setw(17) << "Значення yk = " << setw(6) << yk << "; ";

dy = (yk - yp)/10; cout << setw(17) << "Значення dy = " << setw(6) << dy << "." << endl;

z = 2.15 * Nv + 1.5; cout << "Значення z = " << setw(7) << z << "." << endl << endl;

cout << "Завдання 1.3. Двовимірне табулювання математичних функцій" << endl;

cout << "Двовимірне табулювання функції b[x, y, z]" << endl;

cout << setw(11) << " y/x -- >";

for(x = xp; x <= xk + dx/2; x += dx)

cout << setw(9) << x << "; ";

cout << endl;

for(y = yp; y <= yk; y += dy)

{

cout << setw(6) << y << " -- >";

for(x = xp; x <= xk + dx/2; x += dx)

cout << setw(9) << Fn_b(x, y, z); // Обчислення функції b[x, y, z]

cout << endl;

}

cout << endl;

cout << "Двовимірне табулювання функції a[x, y, z, b]" << endl;

cout << setw(11) << " y/x -- >";

for(x = xp; x <= xk + dx/2; x += dx)

cout << setw(9) << x << "; ";

cout << endl;

for(y = yp; y <= yk; y += dy)

{

cout << setw(6) << y << " -- >";

for(x = xp; x <= xk + dx/2; x += dx)

{

// Обчислення функції b[x, y, z] та її складових

b = Fn_b(x, y, z);

// Обчислення функції a[x, y, z, b] та її складових

cout << setw(9) << Fn_a(x, y, z, b);

}

cout << endl;

}

getch(); return 0;

}

Результати двовимірного табулювання функції b[x, y, z]

1.4. Індивідуальні завдання

Задача 1.1. Задано такі дійсні числа: x = 0.48№ + 1.5, y = 1.47№ + 0.5, z = 1.3№ + 1.5 (де № – номер варіанта). Потрібно розробити код програми для обчислення значень математичних функцій a[x, y, z, b] і b[x, y, z] згідно з такими математичними виразами:

  1. , ;

  2. , ;

  3. , ;

  4. , ;

  5. , ;

  6. , ;

  7. , ;

  8. , ;

  9. , ;

  10. , ;

  11. , ;

  12. , ;

  13. , ;

  14. , ;

  15. , ;

  16. , ;

  17. , ;

  18. , ;

  19. , ;

  20. , ;

  21. , ;

  22. , ;

  23. , ;

  24. , ;

  25. , ;

  26. , ;

  27. , ;

  28. , ;

  29. , ;

  30. , .

Задача 1.2. Для аргумента x задано межі та крок його зміни: xп = 1.83№ + 0.5, xк = 2.38№ + 0.5, x = (xк – xп)/8, а також дійсні числа y = 1.47№ + 0.5 та z = 1.3№ + 1.5. Потрібно розробити код програми для одновимірного табулювання функцій a = f[x, y, z, b] і b = f[x, y, z] за аргументом х, використовуючи математичні вирази, наведені у задачі 1.1.

Задача 1.3. Для аргументів x та y задано відповідні межі та крок їх зміни: xп = -1.83№ + 0.5, xк = 2.38№ + 0.5, x = (xк – xп)/8, yп = -0.74№ + 1.0, yк = 0.86№ + 1.0, y = (yк – yп)/10, а також задано дійсне число z = 1.3№ + 1.5. Потрібно розробити код програми для двовимірного табулювання функцій a = f[x, y, z, b] і b = f[x, y, z] за аргументами х і у, використовуючи математичні вирази, наведені у задачі 1.1.

Лабораторна робота № 2. Програмування ЛОГіЧНИХ ФУНКЦІЙ ТА ЇХ ТАБУЛЮВАННЯ