ДЗ_ 1 сем_2_VC++

ВСТУП

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

МЕТА РОБОТИ

При виконанні розрахунково-графічної роботи студент повинен:
закріпити знання з програмування;
навчитися застосовувати одержані знання до вирішення конкретних інженерних задач у різних середовищах програмування;
поглибити навички розв’язання інженерних задач на персональній ЕОМ;
навчитися користуватися стандартними засобами автоматизації процесу кодування і відладки в сучасному інтегрованому середовищі розробки програмного забезпечення.

ЗМІСТ ПОЯСНЮВАЛЬНОЇ ЗАПИСКИ

Пояснювальна записка повинна включати такі розділи:
титульний аркуш;
постановка задачі (конкретний варіант);
теоретична частина (які інструментальні й програмні засоби були використані, відомості стосовно чисельного методу);
алгоритм розв’язання задачі у вигляді блок-схеми;
лістинг файла з початковими даними;
початкові тексти програм зі вказівкою імен файлів;
лістинг файла з вихідними даними;
результуючі графіки апроксимації;
висновок (висновки на основі порівняльного аналізу результатів розрахунку в різних середовищах програмування);
список використаної літератури;
зміст пояснювальної записки.

ПРИКЛАД ОФОРМЛЕННЯ ТИТУЛЬНОГО АРКУША



Міністерство освіти і науки України

Національний аерокосмічний університет ім. М. Є. Жуковського
«Харківський авіаційний інститут»

Кафедра №304




ПОЯСНЮВАЛЬНА ЗАПИСКА

до розрахунково-графічного завдання
з дисципліни «Інформатика»



Виконав: студент групи 211
______________ І. І. Іванов
«____»_______2004 р.

Перевірив: канд. техн. наук., доц.
______________ Л. Н. Петров
«____»_______2004 р.

Нормоконтролер: канд. техн. наук., доц.
______________ Л. Н. Петров
«____»_______2004 р.




Харків «ХАІ» 2007
ВИМОГИ ДО ВИКОНАННЯ І ОФОРМЛЕННЯ РОБОТИ

Виконати необхідні обчислення з обробки числових масивів (пп. 1 – 4 завдання) у вигляді консольної програми з використанням середовища програмування Visual C++.
Чисельне розв’язання задачі апроксимації табличної функції (п. 5 завдання) здійснити у вигляді програми Windows у середовищі Visual C++.
Вихідні дані розташувати у текстовому файлі.
Чисельні результати розрахунків вивести в інший текстовий файл.
Задану табличну функцію й одержані апроксимуючі криві вивести у вигляді графіка на екран.
Виконати задачу апроксимації також з використанням пакетів Microsoft Excel і MathCad.
Пояснювальна записка повинна бути оформлена на листах форматом А4 і переплетена (зшита). Поля сторінки формату:
ліве й праве – 23 мм;
верхнє – 15 мм;
нижнє – не менше 15 мм з урахуванням номера сторінки.
Набір тексту здійснювати у текстовому процесорі Microsoft Word.
Формат тексту: шрифт Times New Roman, 12 пунктів, через один інтервал. Шрифт тексту програми – Courier, 10 пунктів.
Сторінки треба пронумерувати (знизу сторінки, посередині). Титульний аркуш не нумерується.
У верхній колонтитул включити П. І. Б., номер групи автора і дату виконання роботи (праворуч).

ВАРІАНТИ РОЗРАХУНКОВО-ГРАФІЧНОЇ РОБОТИ
Варіант 1
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив V за формулою Vj = cosYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив дійсних чисел V.
Замінити від’ємні елементи масиву V їх кубами, а додатні – найменшим елементом початкового масиву; розташувати елементи у порядку зростання. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Замінити рядок з найбільшим елементом одиницями. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
0
1
2
3
4
5
6

y
0.2
0.6
1.0
1.2
1.4
1.6
1.7


Варіант 2
Перетворити одновимірний масив дійсних чисел Y(N) = {0.2, -1.1, 9.3, -0.8, 2.3, -9.1, 4.0, -1.6, -11.1} у масив V за формулою Vj = sinYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Розташувати елементи масиву V за зменшенням їх модулів і знайти добуток індексів від’ємних елементів. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Замінити в одержаній матриці діагональні елементи нулем. Оформити підпрограму виконання вказаних дій над числовим масивом В(m, m).
Знайти коефіцієнти полінома першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-2
-1
0
1
2
3
4

y
3.1
2.8
2.5
2.0
1.7
2.2
2.9


Варіант 3
Перетворити одновимірний масив дійсних чисел Y(N) = {3.2, -7.7, 5.3, -9.5, 0.3, -1.7, 9.9, -2.6, -30.1} у одновимірний масив V за формулою Vj = cos3Yj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Скласти два масиви: один містить індекси додатних і рівних нулю елементів, інший – від’ємних. Знайти добуток додатних елементів. Оформити підпрограму виконання вказаних дій над масивом дійсних чисел А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Скласти масив з найбільших елементів кожного стовпця одержаної матриці. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-6
-4
-3
-1
0
1
3

y
2.5
1.2
0.4
-0.5
-1.3
-0.2
1.1


Варіант 4
Перетворити одновимірний масив дійсних чисел Y(N) = {9.1, -7.7, 8.3, -9.5, 2.3, -5.7, 4.8, -1.6, -10.3} у масив V за формулою Vj = sin3Yj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Розташувати елементи масиву V у порядку зростання. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Поміняти місцями в одержаній матриці перший і третій стовпці. Оформити підпрограму виконання вказаних дій над масивом дійсних чисел В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-3
-1
0
1
2
3
4

y
2.9
1.0
-0.2
-1.5
-0.4
0.5
2.0


Варіант 5
Перетворити одновимірний масив дійсних чисел Y(N) = {0.2, -4.1, 2.2, -8.5, 3.3, -1.7, 9.9, -2.6, -5.0} у масив V за формулою Vj = cos3Yj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Знайти середнє арифметичне елементів масиву V і кількість елементів, менших від знайденого середнього арифметичного. Оформити підпрограму виконання вказаних дій над одновимірним масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Скласти масив з індексів найменших елементів кожного стовпця матриці. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-3
-2
-1
0
1
2
4

y
1.7
1.2
1.0
0.5
-0.2
0.5
0.8


Варіант 6
Перетворити одновимірний масив дійсних чисел Y(N) = {1.0, -0.1, 3.3, -9.5, 3.3, -8.7, 3.9, -2.2, 11.1} у масив V за формулою Vj = sin3Yj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Замінити в масиві V ті елементи, індекси яких діляться на чотири найменшим елементом масиву. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Замінити діагональні елементи одержаної матриці найбільшим елементом масиву. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-1
0
1
2
3
4
5

y
3.1
2.8
2.4
2.1
1.9
2.2
2.6


Варіант 7
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив V за формулою Vj = cosYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Знайти різницю між сумою і добутком елементів масиву V і замінити нею елементи масиву, наступні за найменшим елементом. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву дійсних чисел А(n) у двовимірну квадратну матрицю чисел B(m, m).
Розташувати елементи кожного рядка одержаної матриці у порядку зростання. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
1
2
3
4
5
6
7

y
1.8
1.2
0.2
-0.9
-1.9
0.4
2.4


Варіант 8
Перетворити одновимірний масив дійсних чисел Y(N) = {7.2, -9.1, 3.3, -2.5, 8.3, -1.7, 4.4, -9.6, -5.8} у масив V за формулою Vj = sinYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Вибрати з масиву V його найбільший і найменший елементи та замінити їх середнім арифметичним елементів, що залишилися. Оформити підпрограму виконання вказаних дій над масивом чисел А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Замінити всі елементи, що стоять нижче головної діагоналі, найменшим елементом матриці. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-2
-1
0
1
2
3
4

y
1.7
1.9
2.4
2.7
3.1
3.1
2.5


Варіант 9
Перетворити одновимірний масив дійсних чисел Y(N) = {-11.2, -17.1, 22.3, -9.5, -6.3, 2.3, 8.9, -16.6, 12.8} у масив V за формулою Vj = cosYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Замінити всі від’ємні елементи масиву V їх індексами і поставити після додатних елементів початкового масиву. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Замінити всі елементи одержаної матриці, що стоять вище головної діагоналі, найбільшим елементом матриці. Оформити підпрограму виконання вказаних дій над масивом дійсних чисел В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
0
1
2
3
4
5
6

y
1.4
2.0
2.3
2.9
2.5
2.3
2.0


Варіант 10
Перетворити одновимірний масив дійсних чисел Y(N) = {3.2, -1.1, 2.6, -6.5, 3.3, -1.7, 5.9, -8.6, -2.5} у масив V за формулою Vj = sinYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Замінити від’ємні елементи масиву V їх модулями, додатні – квадратами, розташувати елементи у порядку зменшення. Оформити підпрограму виконання вказаних дій над масивом дійсних чисел А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Замінити елементи першого стовпця одержаної матриці нулем. Оформити підпрограму виконання вказаних дій над масивом чисел В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-1
0
1
2
3
4
5

y
-1.8
-1.5
-1.1
-1.3
-1.4
-1.6
-1.9


Варіант 11
Перетворити одновимірний масив дійсних чисел Y(N) = {-1.2, -0.1, 8.3, -9.5, 6.3, -2.7, 9.9, -3.6, -2.8} у масив V за формулою Vj = cos3Yj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Замінити всі елементи масиву, що передують його найменшому елементу, нулями, а наступні за найбільшим елементом – одиницями. Спочатку виконати першу дію, потім – другу. Оформити підпрограму виконання вказаних дій над масивом чисел А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Скласти масив із сум елементів кожного рядка одержаної матриці. Оформити підпрограму виконання вказаних дій над масивом чисел В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-3
-2
-1
0
1
3
4

y
1.0
1.7
3.3
5.1
4.6
3.0
1.9


Варіант 12
Перетворити одновимірний масив дійсних чисел Y(N) = {6.2, -9.1, 3.3, -0.5, 6.6, -3.7, 9.9, -2.6, -0.1} у масив V за формулою Vj = sin3Yj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Замінити індексами елементи масиву, що розташовані між його найбільшим і найменшим елементами. Оформити підпрограму-функцію виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Знайти різницю між сумою і добутком елементів одержаної матриці. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
0
1
2
3
4
5
6

y
2.1
3.0
3.4
3.7
3.2
2.9
1.1


Варіант 13
Перетворити одновимірний масив дійсних чисел Y(N) = {6.2, -4.1, 2.3, -7.5, 2.3, -3.7, 1.9, -8.6, -5.5} у масив V за формулою Vj = cosYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Визначити номер останнього від’ємного елемента масиву V і суму елементів, що йому передують. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Скласти масив з добутків елементів кожного стовпця одержаної матриці. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-2
-1
0
1
2
3
4

y
-0.3
0.5
0.8
1.8
0.8
0 .4
0.0


Варіант 14
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив V за формулою Vj = sinYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Визначити номер першого додатного елемента масиву V і добуток наступних за ним елементів. Оформити функцію виконання вказаних дій над масивом дійсних чисел А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Замінити стовпець з найменшим елементом нулями. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
0
1
2
3
4
5
6

y
1.6
1.9
2.3
2.5
2.8
3.4
2.5


Варіант 15
Перетворити одновимірний масив дійсних чисел Y(N) = {0.2, -0.1, 0.3, -0.5, 0.3, -0.7, 0.9, -0.6, -0.1} у масив V за формулою Vj = cosYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Виявити, чи є масив V упорядкованим за зменшенням; якщо ні, то знайти перший елемент, що порушує порядок зменшення, а також номер цього елемента. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Знайти суму найменшого і найбільшого елементів масиву і замінити нею діагональні елементи. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-2
-1
0
1
2
3
4

y
0.3
-0.5
-1.5
-0.5
-0.1
0.2
1.2


Варіант 16
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив V за формулою Vj = sinYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Розташувати елементи масиву дійсних чисел V у порядку зростання їх абсолютних значень. Потім знайти добуток всіх елементів. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Знайти добуток елементів одержаної матриці, що стоять вище головної діагоналі, і суму елементів, що стоять нижче головної діагоналі. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-3
-2
-1
0
1
2
4

y
4.8
4.2
3.7
3.4
3.0
3.6
5.0


Варіант 17
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив V за формулою Vj = sin3Yj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Обчислити різницю між найбільшим і найменшим елементами масиву V і кількість елементів, значення яких знаходяться між знайденою різницею і найбільшим елементом. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Транспонувати одержану матрицю і знайти добуток діагональних елементів. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
0
1
2
3
4
5
6

y
3.5
3.2
2.9
2.1
3.0
3.4
3.9


Варіант 18
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив V за формулою Vj = sin3Yj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Замінити всі елементи масиву V, що передують найменшому елементу, добутком від’ємних елементів. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Знайти суму додатних і кількість від’ємних елементів для кожного рядка матриці W. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-1
0
1
2
3
4
5

y
-6.1
-5.8
-5.2
-4.8
-4.5
-5.0
-5.6


Варіант 19
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив V за формулою Vj = sinYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Замінити від’ємні елементи масиву V його найменшим елементом, а додатні – добутком тих елементів, індекси яких діляться на чотири. Оформити підпрограму виконання вказаних дій над масивом дійсних чисел А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Розташувати елементи кожного стовпця одержаної матриці в порядку зменшення. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-2
-1
0
1
2
3
4

y
1.1
0.2
-0.4
-1.9
-1.4
-1.0
-0.2


Варіант 20
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив V за формулою Vj = sinYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Знайти добуток і кількість елементів масиву V, які розташовані між його найменшим і найбільшим елементами. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив B(m, m).
Знайти суму найбільших елементів кожного рядка матриці. Оформити підпрограму виконання вказаних дій над масивом чисел В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
0
1
2
3
4
5
6

y
-1.2
-0.5
-0.2
0.3
-0.7
-1.1
-1.4


Варіант 21
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив V за формулою Vj = sinYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Знайти кількість додатних, суму від’ємних елементів масиву V і розташувати їх у порядку зменшення. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Скласти масив із добутків елементів кожного рядка матриці W. Оформити підпрограму виконання вказаних дій над масивом дійсних чисел В(m, m).
Знайти коефіцієнти поліномів другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-3
-1
0
1
3
4
6

y
1.7
3.3
5.1
6.6
5.6
4.0
3.5


Варіант 22
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив V за формулою Vj = sin3Yj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Знайти кількість додатних елементів і суму індексів від’ємних елементів масиву V; записати спочатку додатні елементи, потім – від’ємні. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Розташувати елементи кожного стовпця матриці в порядку зменшення. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
0
1
2
3
4
5
6

y
1.7
1.9
2.5
2.9
3.4
2.8
2.2


Варіант 23
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив V за формулою Vj = sin3Yj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Поставити найбільший, найменший і найменший за абсолютним значенням елементи масиву відповідно на четверте, п'яте і шосте місця цього масиву. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Знайти номери найменших елементів і добуток наступних за ними елементів для кожного рядка матриці. Оформити підпрограму виконання вказаних дій над масивом В(m, m). Результати повернути через список формальних параметрів.
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-4
-2
-1
0
1
2
3

y
-1.8
-0.5
-0.2
0.5
1.0
1.2
0.3


Варіант 24
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив V за формулою Vj = sinYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив дійсних чисел V.
Знайти такий елемент масиву V, сума якого з наступним за ним елементом є мінімальною. Замінити від’ємні елементи масиву V їх індексами. Оформити підпрограму виконання вказаних дій над масивом чисел А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Замінити додатні елементи одержаного масиву W їх квадратами, а від’ємні – найменшим елементом масиву. Оформити підпрограму виконання вказаних дій над масивом дійсних чисел В(m, m). Результати повернути через список формальних параметрів.
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-1
0
1
2
3
4
5

y
3.1
4.5
4.9
5.7
5.2
4.2
3.0


Варіант 25
Перетворити одновимірний масив дійсних чисел Y(N) = {-1.2, 7.0, 8.3, -9.5, -4.3, 7.2, 0.9, -0.6, -10.8} у масив V за формулою Vj = sin5Yj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив чисел V.
Знайти такий елемент масиву V, добуток якого з наступним за ним елементом є максимальним. Замінити від’ємні елементи їх абсолютними значеннями. Оформити підпрограму виконання вказаних дій над масивом чисел А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Замінити від’ємні елементи одержаного масиву їх кубами, а додатні – найменшим елементом масиву. Оформити підпрограму виконання вказаних дій над масивом В(m, m). Результати повернути через список формальних параметрів.
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-2
-1
0
1
2
3
4

y
-0.3
0.5
1.5
0.5
0.3
-0.2
-1.2


Варіант 26
Перетворити одновимірний масив дійсних чисел Y(N) = {1.2, -7.1, 2.3, -0.5, 6.3, -2.7, 4.9, -6.6, -15.1} у масив чисел V за формулою Vj = sinYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив V.
Знайти найменший за абсолютним значенням елемент масиву V, добуток наступних за ним елементів і суму елементів, що йому передують. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Поміняти місцями другий і третій рядки матриці. Оформити підпрограму виконання вказаних дій над масивом В(m, m). Результати повернути через список формальних параметрів.
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-6
-5
-4
-3
-2
-1
0

y
-2.4
-3.5
-4.1
-3.4
-2.3
-1.5
-0.7


Варіант 27
Перетворити одновимірний масив дійсних чисел Y(N) = {1.9, -1.7, 0.2, -1.1, 1.3, -7.7, 0.3, -1.6, -5.1} у масив чисел V за формулою Vj = cosYj, де j = 1..N (N = 9) за допомогою функції.
Знайти найбільший за абсолютним значенням елемент масиву V, суму елементів, що йому передують, і добуток додатних елементів. Оформити підпрограму виконання вказаних дій над масивом дійсних чисел А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Поміняти місцями другий і третій рядки матриці. Оформити підпрограму виконання вказаних дій над масивом В(m, m). Результати повернути через список формальних параметрів.
Знайти коефіцієнти поліномів першого і другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
-6
-5
-4
-3
-2
-1
0

y
-2.4
-3.5
-4.1
-3.4
-2.3
-1.5
-0.7


УМОВА ТИПОВОГО ВАРІАНТА

Перетворити одновимірний масив дійсних чисел Y(N) = {0.2, -7.8, 2.5, -6.3, 1.3, 5.9, 4.4, 7.8, 0.3} у масив V за формулою Vj = cosYj, де j = 1..N (N = 9). Оформити підпрограму перетворення масиву Y у масив чисел V.
Замінити додатні елементи одержаного масиву V їх кубами, а від’ємні – найменшим елементом масиву. Оформити підпрограму виконання вказаних дій над масивом А(a1, a2, ..., an).
Перетворити одновимірний масив V(9) у двовимірний W(3, 3): розрізати умовно масив V на три смужки; помістити потім під першою смужкою другу, під другою – третю. Використати при цьому підпрограму перетворення одновимірного масиву А(n) у двовимірний масив дійсних чисел B(m, m).
Скласти масив з добутків елементів кожного стовпця одержаної вище матриці. Оформити підпрограму виконання вказаних дій над масивом В(m, m).
Знайти коефіцієнти поліномів другого степеня, що апроксимують таблично задану функцію yi = f(xi) (i = 1..n) методом найменших квадратів:

x
0
1
2
3
4
5
6

y
0.5
0.8
1.3
2.5
2.1
1.9
1.5



РЕАЛІЗАЦІЯ ТИПОВОГО ВАРІАНТА

Виконання поставленого завдання можна розбити на дві функціонально незалежні частини. Першу частину завдання (пп. 1 – 4) з обробки масивів чисел реалізуємо у вигляді консольної програми в інтегрованому середовищі програмування Microsoft Visual C++ 7.0. Консольна програма має істотно менший об'єм, а отже, простіша в процесі кодування і при відлагодженні. Другу частину роботи (п. 5) виконаємо за допомогою різних інструментів:
інтегрованого середовища розробки програмного забезпечення Microsoft Visual C++ 7.0 (побудуємо програму Windows алгоритмічною мовою програмування Visual C++);
середовища Microsoft Excel (реалізуємо електронну таблицю);
проблемно-орієнтованого середовища Mathcad.

ОБРОБКА МАСИВІВ ЧИСЕЛ

Побудуємо консольну програму в інтегрованому середовищі розробки програмного забезпечення Microsoft Visual C++ 7.0, що реалізує пункти 1 – 4 типового завдання.
Запустити на виконання інтегроване середовище програмування Microsoft Visual C++ командою Пуск | Программы | Microsoft Visual C++. На екрані комп’ютера з(явиться вікно (рис. 1), що складається з меню основних команд, панелей інструментальних кнопок (вивести увесь список панелей можна правою кнопкою миші на вільному місці меню), вікна робочого простору Workspace (ліворуч), вікна редактора тексту та інших ресурсів проекту (праворуч) і вікна результатів компіляції проекту (знизу). Всі вихідні дані (елементи масиву Y) помістимо в текстовий файл DZ1.TXT. Проміжні й остаточні результати виконання розрахунку виведемо в інший текстовий файл DZ1.out. Для роботи з файлами використовуємо стандартні функції scanf() і printf().



Рис. 1

Створити проект консольної програми, що виконує поставлене завдання.
Запустити майстер створення проекту командою меню File | New | Project. З’являється вікно вибору типу проекту (рис. 2).
В діалоговій панелі New Project на вкладці Project Types треба виділити мишею тип проекту Win32, а у вікні Templates – варіант майстра консольних програм Win32 Console Project. У вікні редагування Location вказати місце проекту на жорсткому диску (наприклад D:\). При виборі диска треба переконатися, що Ви маєте право запису на цей диск. У вікні редагування Name необхідно набрати ім'я проекту DZ1 (назва проекту повинна бути короткою, інформативною, без пропусків і спеціальних символів).


Рис. 2

Підтвердити натисненням кнопки OK вибрані опції панелі New Project. У вікні Win32 Application Wizard, що відкрилося (рис. 3), є можливість створити пустий проект (а потім залучати до нього нові файли), простий проект з примітивним каркасом програми і проект з підтримкою стандартної бібліотеки класів Microsoft Foundation Classes (MFC). За замовчуванням створюється проект простої програми Simple Application. У цьому випадку проект вже буде мати декілька готових файлів, які треба буде тільки відредагувати. Серед них файл DZ1.cpp з місцем входу до головної функції main() та спеціальний заголовний файл StdAfx.h, в який у разі потреби будемо заносити необхідні заголовні файли стандартних бібліотек та заголовні файли користувача. Спеціальний файл StdAfx.cpp проекту ніколи не доведеться редагувати, його призначення має службовий характер.
Підтвердити вибрані опції, натиснувши кнопку Finish. Відкриється головне вікно Visual Studio. Майстер завершив свою роботу та повернув керування середовищу Visual C++ (рис. 4). Рухатися проектом можна за допомогою панелі Class View, Resource View або Solution Explorer (рис. 5)


Рис. 3



Рис. 4



Рис. 5

Початковий файл тексту програми DZ1.cpp вже має визначення головної функції _tmain() (рис. 6).



Рис. 6

Вставимо в проект новий файл Functions.cpp для зберігання тексту функцій, що виконують пункти завдання. Для цього треба виконати команду меню Project | Add New Item....
На вкладці Add New Item (рис. 7) треба виділити шаблон C++ File (.cpp), у вікні редагування Name набрати ім'я файла Functions. Підтвердити установки натисненням кнопки Оpen. У результаті новий файл з'явиться в структурі проекту і буде автоматично відкритий у вікні текстового редактора (рис. 8).



Рис. 7



Рис. 8

Внесемо у створений файл Functions.cpp текст визначення функцій завдання (бажано, щоб імена функцій відображали зв'язок із завданням; наприклад, функція Func1() виконуватиме п. 1 завдання).

#include "stdafx.h" // стандартний заголовний файл
void Func1(float* Y,float* V,int n) // пункт 1 завдання
{
for(int i=0;i V[i]=cos(Y[i]);
}
void Func2(float* A,int n,float& Amin) // пункт 2 завдання
{
Amin=A[0];
for(int i=1;i if(A[i]
for(i=0;i {
if(A[i]>0)
A[i]=pow(A[i],3);
else
A[i]=Amin;
}
}
void Func3(float* A,int n,float** W,int m) // пункт 3 завдання
{
int k=-1;
for(int i=0;i for(int j=0;j {
k++;
W[i][j]=A[k];
}
}
void Func4(float** W,int m,float*R) // пункт 4 завдання
{
for(int j=0;j {
float P=1;
for(int i=0;i P=P*W[i][j];
R[j]=P;
}
}


Вставимо в проект новий заголовний файл з оголошеннями створених функцій ( Project | Add New Item...).
На вкладці Add New Item (рис. 9) необхідно виділити шаблон Header File (.h), у вікні редагування Name набрати ім'я файла Functions.



Рис. 9

Підтвердіть установки натисненням кнопки Оpen. Новостворений файл Functions.h з'явиться в структурі проекту і відкриється у вікні редактора.
У файл Functions.h (рис. 10) необхідно занести заголовки створених функцій. Кожний заголовок називається інтерфейсом відповідної функції й завершується крапкою з комою. Тут же оголосимо як глобальні константи розмірності N і M масивів, що беруть участь у розрахунках. Директива #pragma once дозволяє компілятору уникнути повторної вставки заголовного файла при компіляції проекту й уникнути конфлікту.

// functions.h
#pragma once

// глобальні константи програми
const int N=9;
const int M=3;

// заголовки глобальних функцій програми
void Func1(float* Y,float* V,int n);
void Func2(float* A,int n,float& Amin);
void Func3(float* A,int n,float** W,int m);
void Func4(float** W,int m,float*R);



Рис. 10

Аналогічно заголовному файлу та файлу початкового тексту на С++ вставимо в проект текстовий файл вихідних даних DZ1.txt (рис. 11). При вставленні необхідно вибрати тип файла Text File (.txt).



Рис. 11

Відредагуємо файл DZ1.inp. Необхідно внести через пропуски числа початкового масиву Y:

0.2 -7.8 2.5 -6.3 1.3 5.9 4.4 7.8 0.3

Внесемо зміни в існуючий файл DZ1.cpp. Усередину заготівки головної функції main() консольної програми необхідно набрати текст, що викликає створені функції користувача.

// DZ1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
FILE
*fpi,
*fpo;
float
Y[N],
V[N],
**W,
R[M];
int
i,
j;
// виділення динамічної пам’яті
W=new float* [M];
for(i=0;i W[i]=new float[M];
// завдання вихідних даних із файла
fpi=fopen("DZ1.TXT","r");
fpo=fopen("DZ1.OUT","w");
for(i=0;i fscanf(fpi,"%f",&Y[i]);
fclose(fpi);
fprintf(fpo,"******************************************\n");
fprintf(fpo,"* Домашнее задание №1 *\n");
fprintf(fpo,"* по курсу \"Иформатика\" семестр 2 *\n");
fprintf(fpo,"******************************************\n");
fprintf(fpo,"* Выполнил: ст. гр. 211 Иванов И.И. *\n");
fprintf(fpo,"*----------------------------------------*\n");
fprintf(fpo,"* Проверил: доц. каф. 304 Петров Л.Н. *\n");
fprintf(fpo,"******************************************\n\n");
fprintf(fpo," Исходный массив Y:\n");
for(i=0;i fprintf(fpo," %7.4f",Y[i]);
fprintf(fpo,"\n**************** Пункт 1: ****************");
Func1(Y,V,N);
fprintf(fpo,"\n Новый массив V:\n");
for(i=0;i fprintf(fpo," %7.4f",V[i]);
fprintf(fpo,"\n**************** Пункт 2: ****************");
float Vmin;
Func2(V,N,Vmin);
fprintf(fpo,"\n Минимальный элемент массива Vmin = %7.4f\n",
Vmin);
fprintf(fpo," Преобразованный массив V:\n");
for(i=0;i fprintf(fpo," %7.4f",V[i]);
fprintf(fpo,"\n**************** Пункт 3: ****************\n");
Func3(V,N,W,M);
fprintf(fpo," Новый массив W:\n");
for(i=0;i {
for(j=0;j fprintf(fpo," %7.4f",W[i][j]);
fprintf(fpo,"\n");
}
fprintf(fpo,"\n**************** Пункт 4: ****************\n");
Func4(W,M,R);
fprintf(fpo," Новый массив R:\n");
for(i=0;i fprintf(fpo," %7.4f",R[i]);
fprintf(fpo,"\n******************************************\n");
fclose(fpo);
// звільнення динамічної пам’яті
for(i=0;i delete [] W[i];
delete [] W;
return 0;
}

У заголовний файл StdAf
·x.h після рядка коментаря TODO вставимо необхідні для коректної роботи заголовні файли стандартних бібліотек та інтерфейсний файл functions.h. Це саме те місце в програмі, куди треба вставляти заголовні файли, а сам файл StdAfx.h вже потім додавати до файлів початкового тексту на мові C++.

#include
#include "functions.h"

Виконаємо побудову проекту командою меню Build | Build DZ1.exe. Якщо знайдено помилки, їх треба локалізувати і виправити. Після цього можна запустити проект на виконання командою меню Build | Execute DZ1.exe. На екрані монітора з'явиться вікно консольної програми (рис. 12). Для завершення її роботи необхідно натиснути будь-яку клавішу клавіатури.



Рис. 12

У результаті роботи програми в директорії проекту DZ1 з'явиться новий текстовий файл DZ1.out. Для перегляду результатів розрахунку додамо його в проект за допомогою команди меню Project | Add Existing Item... (рис. 13). В діалоговій панелі Add Existing Item у списку File of Type виділіть маску All Files (усі файли).



Рис. 13

У вікні файлів виберемо файл DZ1.out і натиснемо кнопку Open. Файл з'явиться в ієрархічному дереві файлів проекту на панелі Solution Explorer, а його вміст – у вікні редактора (рис. 14).
Проаналізуємо результати розрахунку на відповідність завданню. У разі логічних помилок необхідно їх локалізувати в тексті програми, виправити початковий текст і повторити етапи побудови і виконання проекту.
Скопіюємо результати розрахунку в «Пояснювальну записку», використовуючи Clipboard. Якщо виникають проблеми з відображенням кирилиці, то можна спочатку виконати менеджер файлів Far.exe, відкрити у вбудованому у цю програму текстовому редакторі (F4), скопіювати в редактор результати розрахунку, змінити кодування DOS на Windows (F8), а потім знов скопіювати текст (Ctrl+Ins / Shift+Ins) у звіт.



Рис. 14

**************************************************
* Домашнее задание №1 *
* по курсу "Иформатика" семестр 2 *
**************************************************
* Выполнил: ст. гр. 211 Иванов И.И. *
*--------------------------------------------------------*
* Проверил: доц. каф. 304 Петров Л.Н.*
**************************************************
Исходный массив Y:
0.2000 -7.8000 2.5000 -6.3000 1.3000 5.9000 4.4000 7.8000 0.3000
**************** Пункт 1: ****************
Новый массив V:
0.9801 0.0540 -0.8011 0.9999 0.2675 0.9275 -0.3073 0.0540 0.9553
**************** Пункт 2: ****************
Минимальный элемент массива Vmin = -0.8011
Преобразованный массив V:
0.9414 0.0002 -0.8011 0.9996 0.0191 0.7978 -0.8011 0.0002 0.8719
**************** Пункт 3: ****************
Новый массив W:
0.9414 0.0002 -0.8011
0.9996 0.0191 0.7978
-0.8011 0.0002 0.8719

**************** Пункт 4: ****************
Новый массив R:
-0.7539 0.0000 -0.5573
******************************************
Завершимо роботу середовища Visual C++ командою File | Exit.

АПРОКСИМАЦІЯ У СЕРЕДОВИЩІ VISUAL C++
(ТРЕТИЙ ТРИМЕСТР)
Створити проект однодокументної програми Windows, що виконує поставлене у п. 5 завдання.
Запустити на виконання інтегроване середовище програмування Microsoft Visual C++ командою Пуск | Программы | Microsoft Visual C++.
Запустити майстер створення проекту AppWizard командою меню File | New.
У діалоговій панелі New перейти мишею на вкладку проектів Projects.
Виділити мишею варіант майстра MFC AppWizard (exe). На відміну від майстра консольного проекту майстер MFC AppWizard (exe) допомагає побудувати повномасштабну програму Windows з підтримкою могутньої стандартної бібліотеки класів Microsoft Foundation Classes. За необхідності майстер дозволяє додати такі риси, як можливість підключення до баз даних, використання елементів керування ActiveX, підтримка довідкової системи, формування специфічних для вирішення конкретної задачі базових класів. Звичайно, усі ці властивості можна додати потім самому, але, якщо програму грамотно заздалегідь спроектовано, цю роботу краще доручити майстру.
За допомогою кнопки «...» праворуч від вікна редагування Location перейти на робочий логічний диск (наприклад D:\).
Перейти у вікно редагування Project Name і набрати ім'я нового проекту DZ2 (рис. 15).
Підтвердити натисненням кнопки OK вибрані опції панелі New.
У наступному вікні майстра MFC AppWizard вибрати перемикач однодокументного типу програми Single document (рис. 16).
Підтвердити вибрані опції, натиснувши кнопку Finish у вікні з інформацією New Project Information (рис. 17).
Майстер AppWizard згенерує проект програми типу SDI (Single Document Interface), який можна відкомпілювати і запустити на виконання. Створено ряд класів, назва яких побудована на імені проекту (рис. 18). Клас CDZ2Doc (Документ) відповідає за зберігання і обробку даних програми, клас CDZ2View (Вигляд) – за відображення Документа на екрані комп’ютера, клас CAboutDlg – за діалогову панель з інформацією про версію програми, клас CMainFrame – за керування головною формою програми, а клас CDZ2App об’єднує роботу всіх цих класів. Класи мають свої набори функцій (методів) та змінних (властивостей). Їх можна побачити в ієрархічній структурі класів проекту на вкладці ClassView, якщо розгорнути вузол відповідного класу.



Рис. 15



Рис. 16



Рис. 17



Рис. 18

Підготуйте шаблон діалогової панелі програми для прийому вихідних даних розрахунку. Як вихідні дані тут виступає лише одна змінна – степінь полінома апроксимації табличної функції m.
Виконайте команду меню Insert | Resource. У вікні панелі (рис. 19) виділіть тип ресурсу Dialog і натисніть кнопку New.
У вікні редактора діалогу, що відкрилося, з'явиться заготовка нової діалогової панелі з ідентифікатором IDD_DIALOG1 (рис. 20).
Змініть мову діалогової панелі. Правою кнопкою миші викличте контекстне меню на ідентифікаторі ресурсу IDD_DIALOG1 і виконайте команду Properties.



Рис. 19



Рис. 20

У діалозі Dialog Properties, що з'явився, змініть мову ресурсу з англійської на російську (рис. 21).



Рис. 21
Вікно властивостей можна зафіксувати на екрані кнопкою в лівому верхньому куті. Виберіть курсором миші діалогову панель у вікні редактора діалогів. Внесіть зміни в ім'я ідентифікатора ID (IDD_DIALOG_INPUT) і в заголовок панелі Caption (рис. 22). Тепер діалог має нове ім'я ідентифікатора ID (рис. 23).



Рис. 22

Залиште на діалоговій панелі (рис. 24) кнопки OK (означатиме згоду з уведеними даними) і Cancel (відмінятиме введення даних). Створіть текстовий пояснюючий надпис. Перетягніть елемент Static Box на діалог з панелі інструментів і змініть його заголовок за допомогою панелі властивостей (команда меню View | Properties). Після цього додайте поле редагування Edit Box для введення степеня апроксимуючого полінома m. Присвойте вікну редагування ідентифікатор IDC_EDIT_M. Збережіть зміни.
Додайте в проект клас для створеного діалогу (рис. 25). Виконайте подвійне клацання лівою кнопкою миші по діалоговій панелі. З'явиться вікно майстра з пропозицією ввести до проекту новий клас. Погодьтеся, натискуючи ОК.


Рис. 23


Рис. 24


Рис. 25

Дайте ім'я класу CDlgInput у вікні Name (рис. 26).



Рис. 26

Підтвердіть введені дані, натискуючи ОК. У вікні майстра класів ClassWizard за допомогою кнопки Add Variable додайте змінну m_M цілого типу в знов створений клас діалогової панелі CDlgInput (рис. 27). Ця змінна діалогу обмінюватиметься з відповідною змінною розрахунку m. Погодьтеся з роботою майстра.



Рис. 27

Перейдіть на вкладку ResourceView проекту, розкрийте дерево класів DZ2 classes, вузол Menu та викличте редактора меню, виконавши подвійне клацання по ідентифікатору меню IDR_MAINFRAME.
Вилучіть всі непотрібні для подальшої роботи пункти меню окрім View і Help. Для цього треба виділити лівою кнопкою миші відповідний пункт меню, що вилучається, та натиснути клавішу Delete.
Правою кнопкою миші викличте контекстне меню на порожньому пункті меню (рис. 28) та відкрийте панель властивостей меню Menu Item Properties (рис. 29).
У полі Caption введіть заголовок пункту меню (наприклад Calc), зніміть прапорець біля пункту Pop-up (меню, що випадає) і введіть довідкову інформацію в полі підказки Prompt, яка з'являтиметься в статус-рядку програми (нижня смуга головної форми програми, що служить для виведення довідкової інформації в процесі її виконання) при виділенні пункту меню за допомогою миші або клавіатури. Ідентифікатор ID можна не коригувати, його буде додано за замовчуванням ID_CALC.
Перейдіть на вкладку ClassView робочого простору і відкрийте оголошення класу Документа CDZ2Doc подвійним клацанням лівої кнопки миші на імені класу (рис. 30).




Рис. 28



Рис. 29



Рис. 30

Відредагуйте заголовний файл DZ2Doc.h. Уведіть оголошення необхідних для розрахунків змінних і функцій.

#include "Graph.h" // підтримка класу рисування
class CDZ2Doc : public CDocument
protected: // create from serialization only
CDZ2Doc();
DECLARE_DYNCREATE(CDZ2Doc)
// Attributes
public:
TValues xGr, yGr; // масиви абсцис і ординат
UINT
NPoints1 // кількість точок
NPoints; // кількість точок
CString sCurFunc; // заголовок поточного графіка функції
double Time; // діапазон зміни координати X
TData data; // узагальнені параметри функцій
double X2,X1; // діапазон Х зображення графіка
int
n // кількість точок експерименту
m // степінь апроксимуючого полінома
i // допоміжні змінні
до
k1
n1;
float
x1 // поточне значення Х
p; // значення полінома в поточній крапці Х
float
x[50] // заданий масив Х точок
f[50] // заданий масив F точок
c[50]; // масив коефіцієнтів полінома
float
а[10][11]; // матриця коефіцієнтів системи рівнянь
FILE* fpr; // файлові змінні
FILE* fpw;
// Operations
public:
float ex(float а, int n); // обчислення степеневої функції
void gram(); // підготовка матриці Грама
void GA(); // розв’язання системи рівнянь методом Гаусса
float fi(float x1); // розрахунок значення полінома в крапці х1
void Calc(); // підготовка масиву для рисування
// графіка
// Overrides
DECLARE_MESSAGE_MAP()
};
Відредагуйте файл реалізації DZ2Doc.cpp. Уведіть визначення необхідних для розрахунків функцій.
/////////////////////////////////////////////////////////////////////////////
// CDZ2Doc construction/destruction
// Конструктор
CDZ2Doc::CDZ2Doc()
{
// TODO: add one-time construction code here
fpw=fopen("DZ2.out","a");
}
/////////////////////////////////////////////////////////////////////////////
CDZ2Doc::~CDZ2Doc()
{
fclose(fpw);
}
/////////////////////////////////////////////////////////////////////////////
BOOL CDZ2Doc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;

// TODO: add reinitialization code here
// (SDI documents will reuse this document)
fpr=fopen("DZ2.inp","r");
fscanf(fpr,"%d",&n); // кількість крапок
for(int i=0;i<=n;i++) // таблична функція
fscanf(fpr,"%f%f",&x[i],&f[i]);
fclose(fpr);
m=1; // поліном 1-го степеня
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
float CDZ2Doc::ex(float а, int n)
{
int i;
float e; // степенева функція
e=1.0;
for(i=1;i<=n;i++)
e*=a;
return e;
}
/////////////////////////////////////////////////////////////////////////////
void CDZ2Doc::gram()
{
int
i,j;
float
p,q,r,s;
// матриця Грама а(m,m+1)
for(j=0; j<=m; j++)
{
s=0.0;
r=s;
q=s;
for(i=0;i<=n; i++)
{
p=ex(x[i],j);
s=s+p;
r=r+p*f[i];
q=q+p*ex(x[i],m);
}
а[0][j]=s;
а[j][m+1]=r;
а[j][m]=q;
}
for(i=1;i<=m;i++)
for(j=0;j<=m-1;j++)
а[i][j]=a[i-1][j+1];
}
/////////////////////////////////////////////////////////////////////////////
void CDZ2Doc::GA()
{
int
i,j,k;
float
r,s;
n1=m+1; // метод Гаусса для системи рівнянь
for(k=0;k<=m;k++)
{
k1=k+1;
s=a[k][k];
for(j=k1;j<=n1;j++)
а[k][j]=a[k][j]/s;
for(i=k1;i<=m;i++)
{
r=a[i][k];
for(j=k1;j<=n1;j++)
а[i][j]=a[i][j]-a[k][j]*r;
}
}
for(i=m; i>=0; i--)
{
s=a[i][n1];
for(j=i+1;j<=m;j++)
s=s-a[i][j]*c[j];
c[i]=s;
}
fprintf(fpw,"Расширенная матрица коэффициентов а[i][j]\n");
for(i=0;i<=m;i++)
{
for(int j=0;j<=m+1;j++)
fprintf(fpw,"%8.4f ",a[i][j]);
fprintf(fpw,"\n");
}
fprintf(fpw,"Коэффициенты полинома Pm(x)\n");
for(i=0;i<=m;i++)
fprintf(fpw,"%8.4f",c[i]);
fprintf(fpw,"\n");
}
/////////////////////////////////////////////////////////////////////////////
float CDZ2Doc::fi(float x1)
{
int i;

p=c[m]; // апроксимуюча функція
for(i=m-1;i>=0; i--)
p=c[i]+x1*p; // Поліноми Лежандра
return p;
}
/////////////////////////////////////////////////////////////////////////////
void CDZ2Doc::Calc()
{
gram();
GA();
int i;
NPoints = 201;
NPoints1 =NPoints+n+1;
xGr.SetSize (NPoints1); // Відводимо пам'ять
yGr.SetSize (NPoints1);
sCurFunc.Format("Полином Pm(x)");
X2=x[n];
X1=x[0];
double dx=(X2-X1)/(NPoints-1);
int ind;
for(i=0;i {
xGr[i]=X1+i*dx;
yGr[i]=fi(xGr[i]);
}
ind=i-1;
for(i=0;i<=n;i++)
{
ind++;
xGr[ind]=x[i];
yGr[ind]=f[i];
}
Time=X2-X1; // інтервал аргументу
}
Додайте в клас Вигляду CDZ2View метод, що реагує на натиснення пункту меню Calc з ідентифікатором ID_CALC.
Викличте майстер класів ClassWizard командою меню View | ClassWizard, перейдіть на вкладку MessageMaps (рис. 31), у вікні Class name виділіть ім'я класу Вигляду CDZ2View, у вікні ідентифікаторів Object IDs виділіть ідентифікатор ID_CALC пункту меню, у вікні повідомлень Messages виділіть рядок COMMAND і натисніть кнопку Add Function.



Рис. 31

Погодьтеся з ім'ям функції, натиснувши кнопку ОК (рис. 32).



Рис. 32

Не виходячи з майстра класів, натисніть кнопку Edit Code. Управління буде передано до редактора тексту новододаної функції OnCalc() (рис. 33). Зверніть увагу, що декларація цього методу (файл DZ2View.h) вже потрапила до потрібного місця в класі CDZ2View, а його визначення (файл DZ2View.cpp) містить тільки каркас функції. Ми повинні додати необхідні інструкції до тіла функції.



Рис. 33

У заготовці методу, що відкрилася в текстовому редакторі, замість коментаря //TODO додайте відповідний код для обчислення коренів рівняння з точністю (:
/////////////////////////////////////////////////////////////////////////////
// CDZ2View message handlers
void CDZ2View::OnCalc()
{
CDZ2Doc* pDoc;
pDoc=GetDocument(); // одержуємо покажчик на Документ
CDlgInput dlg; // оголошення змінної діалогу даних
// присвоювання змінним діалогу значень Документа
dlg.m_M=pDoc->m;
int result=dlg.DoModal(); // запуск діалогової панелі даних
if(result==IDOK) // якщо завершили діалог натисненням ОК
{
// присвоювання змінним Документа значень діалогу
pDoc->m=dlg.m_M;
// виклик методу Документа, що проводить розрахунок
pDoc->Calc();
bDraw=TRUE; // дозволити рисування в OnDraw()
Invalidate(); // вимога перерисовування вікна Вигляду
}
else // якщо завершили діалог натисненням CANCEL
MessageBox("Повторите введение данных","Внимание!"
MB_OK|MB_ICONEXCLAMATION);
}
Додайте у початок файла реалізації класу Вигляду DZ2View.cpp посилання на заголовний файл діалогу DlgInput.h.
// DZ2View.cpp : implementation CDZ2View class
#include "stdafx.h"
#include "DZ2.h"
#include "DZ2Doc.h"
#include "DZ2View.h"
#include "DlgInput.h"
...
У методі OnDraw() класу Вигляду CDZ2View, який запускається при перерисовуванні вікна, вставте інструкції відображення на екран точок табличної функції й графіка апроксимуючого полінома.
/////////////////////////////////////////////////////////////////////////////
// CDZ2View drawing
//
void CDZ2View::OnDraw(CDC* pDC)
{
CDZ2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if(bDraw)
{
// З'ясовуємо розміри масивів
UINT size = (pDoc->xGr).GetSize();
CRect r;
GetClientRect(r); // З'ясовуємо розміри вікна Вигляд
// Створюємо об'єкт імпортованого класу
CGraph graph(r, size, pDoc->n);
// Вибираємо чорне перо, запам'ятовуючи поточне
CPen* pOldPen = pDC->SelectObject (&BlackPen);
// Задаємо назви осей
CString Xlab("t"), Ylab("y");
// Просимо зобразити сітку
graph.DrawGrid (pDC, pDoc->sCurFunc, Xlab,Ylab
pDoc->xGr, pDoc->yGr);
// Відчеплюємо перо Windows від об'єкту класу
BlackPen.Detach();
// Вибираємо синє перо
pDC->SelectObject (&BluePen);
// Просимо зобразити криву графіка
graph.DrawFunc (pDC &RedPen);
// Реставруємо перо Windows
pDC->SelectObject (pOldPen);
}
...

Не забудьте додати у файл stdafx.h оголошення бібліотек математичних функцій і шаблонів .
#include
#include
Увійдіть до ресурсу інструментальних кнопок ToolBar на панелі ResourceView (рис. 34).



Рис. 34

Видаліть усі інструментальні кнопки (рис. 35), окрім довідкової й порожньої. Видалення відбувається, якщо курсором миші «перетягнути» кнопку за межі рядка кнопок.



Рис. 35

За допомогою панелі рисування відредагуйте нову інструментальну кнопку (рис. 36), яка дублюватиме виконання команди меню Calc.



Рис. 36

Пов'яжемо кнопку з командою меню. Для цього викличте панель властивостей (команда меню View | Properties) при активній кнопці (рис. 37). У списку ідентифікаторів ID знайдіть і виберіть ідентифікатор пункту меню ID_CALC, уведений раніше. Закрийте панель властивостей.



Рис. 37

Додайте в проект файли Graph.h і Graph.cpp класу рисування графіка (команда меню Project | Add to project | Files) (початкові тексти файлів див. у додатку 3). Оголошення класу CGraph з'явиться на вкладці ClassView (рис. 38).



Рис. 38

У текст оголошення класу Вигляду CDZ2View додайте оголошення допоміжних змінних для рисування (файл DZ2View.h).
//////////////////////////////////////////////////
class CDZ2View : public CView
{
protected: // create from serialization only
CDZ2View();
DECLARE_DYNCREATE(CDZ2View)
// Attributes
public:
CDZ2Doc* GetDocument();
// Чорне, синє, червоне пера
CPen BlackPen, BluePen, RedPen;
BOOL bDraw; // дозвіл на рисування
// Operations
public:
...
}

Присвойте початкові значення цим змінним у конструкторі класу Вигляду (файл DZ2View.cpp).
/////////////////////////////////////////////////////////////////////////////
// CDZ2View construction/destruction
CDZ2View::CDZ2View() :
BlackPen(PS_SOLID,1,RGB(0,0,0))
RedPen(PS_SOLID,1,RGB(255,0,0))
BluePen (PS_SOLID,2,RGB(0,0,255))
{
// TODO: add construction code here
bDraw=FALSE;
}

Додайте в проект новий текстовий файл даних DZ2.inp (рис. 39).



Рис. 39

Відкомпілюйте проект (Build | Build DZ2.exe) і запустіть на виконання Ctrl+F5. З'явиться форма програми з меню, статус-рядком і порожнім вікном Вигляду (рис. 40). Затримайте курсор миші над спроектованою інструментальною кнопкою. Ви побачите спливаюче вікно підказки і довідку в нижньому рядку вікна. Це інформація, що Ви ввели в панелі властивостей меню.



Рис. 40

Натисніть пункт меню Calc. З'явиться панель вихідних даних (рис. 41). Погодьтеся із степенем полінома m = 1 і натисніть ОК.



Рис. 41

Результати розрахунку з'являться у вікні Вигляду (рис. 42).



Рис. 42

Для розрахунку апроксимуючого полінома другого степеня (m = 2) скористаємося інструментальною кнопкою C (рис. 43). Вона виконує ту ж саму функцію, що й меню Calc.



Рис. 43

Результати розрахунку з'являться у вікні Вигляду (рис. 44).
Проаналізуйте одержані графіки і завершіть роботу програми.
Додайте до проекту і відкрийте у вікні редактора файл DZ2.out (рис. 45).
Оформіть відповідну частину пояснювальної записки.



Рис. 44



Рис. 45


РЕАЛІЗАЦІЯ АПРОКСИМАЦІЇ У СЕРЕДОВИЩІ EXCEL

Запускаємо на виконання програму MS Excel командою Пуск | Программы | Microsoft Excel (рис. 46). З’явиться основне вікно програми, яке розподілене на рядки та стовпці. Рядки пронумеровані арабськими цифрами, а стовпці – латинськими літерами.



Рис. 46

Створюємо допоміжну таблицю, в перші стовпці якої заносимо таблично задану функцію yi=f(xi) результатів спостережень. Заготовлюємо відразу стовпці для множників, суми яких необхідні для обчислення коефіцієнтів апроксимуючих поліномів (рис. 47).


Рис. 47

Для розрахунку стовпця x^2 у верхню комірку D3 стовпця заносимо формулу піднесення до квадрата. Спочатку виділяємо комірку D3 курсором, потім виконуємо меню Вставка | Функция. Із списку функцій вибираємо функцію СТЕПЕНЬ(число; степень) (рис. 48).
У діалоговому вікні, що з'явилось, вводимо номер комірки з числом і степінь (рис. 49) і натискаємо кнопку OK (можна також скористатись спеціальними кнопками праворуч від вікон редагування для автоматизації процесу).



Рис. 48



Рис. 49

У результаті виконаних дій в комірці D3 обчислено необхідну степеневу функцію (рис. 50).
Обчислимо решту значень стовпця D таблиці. Для цього необхідно помістити курсор у правий нижній кут комірки D3 з формулою, натиснути ліву кнопку миші й «протягнути» курсор по комірках D4 – D9 стовпця D. Відповідні результати з(являться в комірках стовпця D (рис. 51).



Рис. 50



Рис. 51

Аналогічно обчислимо значення елементів стовпців E – H (рис. 52).
Для розрахунку суми стовпця зі значеннями x необхідно виділити курсором комірку B10, натиснути кнопку автоматичного підсумовування ( на панелі інструментів (рис. 53).
Аналогічно обчислюємо суми елементів решти стовпців (рис. 54).
Побудуємо апроксимуючий поліном першого степеня 13 EMBED Equation.3 1415. Коефіцієнти полінома знаходимо з системи рівнянь
13 EMBED Equation.3 1415



Рис. 52

Побудуємо таблицю коефіцієнтів системи рівнянь (рис. 55).



Рис. 53



Рис. 54



Рис. 55

Обчислимо Ос – визначник системи за c (рис. 56).



Рис. 56

Обчислимо Oa – визначник системи за а (рис. 57).



Рис. 57

Обчислимо Ob – визначник системи за b (рис. 58).



Рис. 58

Відповідні коефіцієнти полінома першого степеня будуть такі: a = Oa/Оc; b = Ob/Оc (рис. 59).



Рис. 59

Тепер побудуємо апроксимуючий поліном другого степеня 13 EMBED Equation.3 1415. Тоді для знаходження коефіцієнтів полінома необхідно розв’язати таку систему рівнянь:

13 EMBED Equation.3 1415

Побудуємо таблицю коефіцієнтів системи рівнянь і обчислимо визначник системи Оc (рис. 60).



Рис. 60

Розрахуємо додаткові визначники системи Oa, Ob і Оc, що необхідні для визначення коефіцієнтів полінома другого степеня 13 EMBED Equation.3 1415. Для цього заносимо відповідні формули, наприклад, у комірки G41, G46 і G51 (рис. 61).



Рис. 61

Відповідні коефіцієнти полінома другого степеня 13 EMBED Equation.3 1415 будуть такі: a = Oa/Od, b = Ob/Od і c = Oc/Od (рис. 62).



Рис. 62

Побудуємо фінальну таблицю значень функції для рисування суміщеного графіка трьох функцій (рис. 63). До таблиці буде занесено початкові дані, а також розраховані значення поліномів першого та другого степеня. Усі три функції (рядок y – вихідна функція, рядок P1(x) – поліном першого степеня, рядок P2(x) – поліном другого степеня) базуються на єдиному рядку аргументів x.


Рис. 63

Побудуємо результуючий графік. Таблично задану функцію відобразимо у вигляді крапок, а апроксимуючі поліноми – у вигляді неперервних кривих ліній різного стилю. Для запуску майстра побудови графіка треба виконати команду меню Вставка | Диаграмма. Виберіть тип діаграми і натисніть кнопку «Далее» (рис. 64).



Рис. 64

На другому кроці роботи майстра необхідно указати, що значення функції знаходяться в рядках, і натиснути кнопку праворуч від вікна редагування діапазону значень функції (рис. 65).



Рис. 65

У результаті цих дій з'явиться вікно ще одного майстра (рис. 66).



Рис. 66

Тепер можна виділити курсором комірки в документі Excel, які містять значення функції (наприклад, комірки B59 – H59 для заданої функції) (рис. 67).



Рис. 67
Необхідно натиснути кнопку праворуч від вікна редагування, щоб повернутися до побудови графіка. На цьому етапі можна проконтролювати попередній зовнішній вигляд графіка (рис. 68). Стиль зображення кривої графіка, ліній сітки заголовного напису, вмісту легенди ряду та осьових написів можна змінити пізніше, після вставлення діаграми у документ Microsoft Excel за допомогою діалогової панелі властивостей.



Рис. 68

Вкладка «Ряд» дозволяє додати у діаграму додаткові елементи відображення графіка (рис. 69).



Рис. 69

Натиснувши на кнопку праворуч від вікна редагування «Имя», можна змінити назву в легенді кривої лінії (рекомендується вивести стислу назву ряду). Для зміни зовнішнього вигляду абсцис ряду треба використовувати аналогічну кнопку у вікні «Подписи оси X» (рис. 70).


Рис. 70

Для зображення поліномів скористаємося кнопкою «Добавить» (рис. 71).



Рис. 71

На вкладці «Заголовки» наступного діалогу майстра можна відредагувати назви діаграми й осей (рис. 72).


Рис. 72

На вкладці «Линии сетки» вказуємо наявність ліній діаграми (рис. 73).



Рис. 73

Натискаємо на кнопку «Готово». Це приводить до появи діаграми у поточному документі (рис. 74).


Рис. 74

Властивості елементів діаграми можна змінити за допомогою панелі «Диаграммы». У списку треба виділити необхідний елемент (наприклад «ряд Y») і натиснути на кнопку «Формат рядов данных». Відкриється відповідна панель, на якій можна змінити вигляд лінії, тип і розмір маркера (рис. 75).



Рис. 75

Діаграма набуває вигляду, який показано на рис. 76.



Рис. 76

Проаналізуйте одержані результати і порівняйте їх з результатами розрахунку програми на мові Visual C++.
Завершіть роботу середовища Microsoft Excel (Файл | Выход).
Занесіть результати до пояснювальної записки.

АПРОКСИМАЦІЯ ФУНКЦІЇ У СЕРЕДОВИЩІ MATHCAD

Запускаємо на виконання середовище програмування Mathcad командою Пуск | Программы | Mathcad (рис. 77).



Рис. 77

Користуючись відповідними панелями інструментів (вивести панелі можна командою меню View | Toolbars), заносимо початкові дані у вікно документа Mathcad: кількість точок табличної функції n, діапазон зміни індексу масивів x і y, а також елементи самих масивів.


Апроксимація табличної функції y многочленом першого степеня 13 EMBED Equation.3 1415.
Повна система рівнянь для знаходження а і b має такий вигляд:

13 EMBED Equation.3 1415

Внесемо у документ Mathcad формули для визначення матриці коефіцієнтів M1 і вектора V1 вільних членів системи рівнянь:



Обчислимо значення M1 і V1:



Якщо j – це вектор, що складається із змінних а і b, то систему рівнянь можна подати у вигляді M1( j = V1. Тоді j можна знайти так:



Залишилося обчислити коефіцієнти полінома:



Внесемо у документ формулу полінома й обчислимо його значення в таблиці (це дозволить нам пізніше відобразити криву на графіку):



Апроксимація функції багаточленом другого степеня 13 EMBED Equation.3 1415.
Система рівнянь для знаходження c, d і e має такий вигляд:

13 EMBED Equation.3 1415

Розширена матриця коефіцієнтів для знаходження с, d і e:



Якщо j – це вектор, що складається з елементів c, d, e, то систему рівнянь можна подати у вигляді M2(j=V2. Тоді j можна обчислити так:





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

Тепер можна побудувати порівняльний графік функції.

Оцінка похибки апроксимації.
Обчислимо нев'язку для P1(x) і вихідних даних.

Похибка апроксимації поліномом першого степеня.

Розрахуємо нев'язку для P2(x) і вихідних даних.

Похибка апроксимації поліномом другого степеня.

Порівнявши одержані похибки, можна зробити висновок: апроксимація табличної функції багаточленом другого степеня P2(x) більш точна порівняно з апроксимацією багаточленом першого степеня P1(x).
Результати розрахунку необхідно порівняти з відповідними розрахунками в середовищах Visual C++ і Excel.
Документ Mathcad можна зберегти як файл з розширенням *.rtf, що дозволяє легко вставити одержані результати до пояснювальної записки, яка є документом Microsoft Word.
Виконайте команду основного меню File | Save as. З’явиться діалогова панель «Сохранить как» (рис. 78).



Рис. 78

У вікні редагування «Имя файла» введіть ім’я нового файла документа (наприклад MNK).
У списку «Тип файла» виберіть розширення Rich Text Format File (*.rtf).
Завершіть роботу з панеллю «Сохранить как», натиснувши на кнопку «Сохранить».
ДОДАТОК 1
МЕТОД НАЙМЕНШИХ КВАДРАТІВ

Нехай у результаті експерименту одержано таблицю значень функції:

x
x0
x1
x2
...
xn

y
y0
y1
y2
...
yn


Необхідно апроксимувати цю табличну функцію багаточленом степеня m (m < n):
13 EMBED Equation.3 1415. (Д.1.1)
Згідно з методом найменших квадратів (МНК) шукаємо значення параметрів 13 EMBED Equation.3 1415, при яких сума квадратів різниць
13 EMBED Equation.3 1415 (Д.1.2)
набуває мінімального значення:
13 EMBED Equation.3 1415. (Д.1.3)
З урахуванням необхідних умов існування екстремуму функції декількох змінних одержуємо систему рівнянь для визначення невідомих 13 EMBED Equation.3 1415:
13 EMBED Equation.3 1415 (Д.1.4)
Доведено, що система рівнянь має єдиний розв’язок, при якому 13 EMBED Equation.3 1415 набуває мінімального значення.
Розглянемо випадок m = 2, тобто табличну функцію апроксимуємо багаточленом другого степеня 13 EMBED Equation.3 1415.
Система рівнянь для визначення параметрів 13 EMBED Equation.3 1415 має такий вигляд:
13 EMBED Equation.3 1415 (Д.1.5)
Якщо розв’язати систему рівнянь, можна записати багаточлен 13 EMBED Equation.3 1415.

ДОДАТОК 2

РОЗВ’ЯЗАННЯ СИСТЕМИ РІВНЯНЬ МЕТОДОМ ГАУССА

Подамо початкову систему лінійних рівнянь алгебри (СЛАР) у вигляді

13 EMBED Equation.3 1415 (Д.2.1)

Ділимо перше рівняння системи (Д.2.1) на 13 EMBED Equation.3 1415. У результаті одержимо рівняння

13 EMBED Equation.3 1415 , (Д.2.2)

де 13 EMBED Equation.3 1415.
З другого рівняння системи (Д.2.1) віднімемо рівняння (Д.2.2), помножене на 13 EMBED Equation.3 1415, а з третього рівняння системи (Д.2.1) – рівняння (Д.2.2), помножене на 13 EMBED Equation.3 1415. Одержуємо систему

13 EMBED Equation.3 1415 (Д.2.3)


де 13 EMBED Equation.3 1415.
Ділимо перше рівняння системи (Д.2.3) на 13 EMBED Equation.3 1415. У результаті одержимо рівняння
13 EMBED Equation.3 1415, (Д.2.4)
де 13 EMBED Equation.3 1415.

Помножуючи рівняння (Д.2.4) на 13 EMBED Equation.3 1415 і віднімаючи його з другого рівняння системи (Д.2.3), одержуємо

13 EMBED Equation.3 1415, (Д.2.5)

де 13 EMBED Equation.3 1415.
Нарешті, розділивши рівняння (Д.2.5) на 13 EMBED Equation.3 1415, одержимо

13 EMBED Equation.3 1415. (Д.2.6)

Використовуючи рівняння (Д.2.4) і (Д.2.2), знаходимо послідовно значення 13 EMBED Equation.3 1415 і 13 EMBED Equation.3 1415.

ДОДАТОК 3
ТЕКСТ КЛАСУ РИСУВАННЯ ГРАФІКА

//*************************************************************************/
// Graph.h: interface for CGraph class.
//////////////////////////////////////////////////////////////////////
#pragma once
// Тип даних для зберігання координат точок графіка
typedef CArray TValues;
// Цей тип використовується для уніфікації даних
// функцій, що експортуються
struct TData { double d1, d2, d3; };
//*************************************************************************/
class CGraph
{
double dMinX, dMaxX; // Min-Max значення по горизонталі
double dMinY, dMaxY; // Min-Max значення по вертикалі
double dSpanX; // Розмах графіка по горизонталі
double dSpanY; // Розмах графіка по вертикалі
double dStepX, dStartX; // Крок і початкове значення
double dStepY, dStartY;
UINT nPoints; // Кількість крапок
int N; // Кількість точок експерименту
// Цілочисельні аналоги
UINT nStepsX, nStepX, MinX, MaxX;
UINT nStepsY, nStepY, MinY, MaxY;
UINT *X *Y; // Координати крапок на екрані
int iPowerX, iPowerY; // Експоненти
CRect rect; // Прямокутник висновку
// Три типи шрифтів: для осей,
// заголовка і експонент
CFont TextFont, TitleFont, PowerFont;
public:
CGraph (CRect, UINT, int n);
// Функції нормування вихідних масивів
void ScaleX(TValues&);
void ScaleY(TValues&);
// Масштабування масиву
void Scale (double, int&, double&);
// Зображення координатної сітки
void DrawGrid (CDC*, CString&, CString&, CString&, TValues&, TValues&);
// Зображення графіка залежності
void DrawFunc (CDC*,CPen* RedPen);
virtual ~CGraph();
};
//*************************************************************************/
// Graph.cpp: implementation CGraph class.
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
//#include "Casc.h"
#include "Graph.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
// Частки екрану, зайняті прямокутником рисунка
const double dXLeft=0.2; // Лівий верхній кут
const double dYTop =0.2;
const double dFracX=0.6; // Ширина і висота
const double dFracY=0.6;
//*************************************************************************/
CGraph::CGraph (CRect r, UINT Pts,int n)
{
rect = r; // Прямокутник висновку в пікселах
// Обмеження числа крапок
nPoints = Pts<=1000 ? Pts : 1000;
N=n;
// Створення шрифтів
TextFont.CreatePointFont(80,"MS Sans Serif");
TitleFont.CreatePointFont(120,"Times New Roman Cyr");
PowerFont.CreatePointFont(80,"Arial");
}
//*************************************************************************/
void CGraph::ScaleX (TValues& x)
{ // Обробка масиву абсцис
UINT i;
for (i=0, dMaxX=x[0], dMinX=x[0]; i { // Пошук (min, max)
dMinX = x[i] dMaxX = x[i]>dMaxX ? x[i]: dMaxX;
}
dSpanX = dMaxX - dMinX; // Розмах
// Вибір кроку з (0,1) і експоненти за основою 10
Scale (dSpanX, iPowerX, dStepX);
// Реальний крок
double step = dStepX*pow(10,iPowerX);
// Кількість кроків плюс 1 або 2 кроки (human factor)
nStepsX=(UINT)(dSpanX/step)+ (dMinX ? 2 : 1);
// Цілий крок в пікселах
nStepX =(UINT) (dFracX * rect.Width() / nStepsX +.5);
// Початковий x (dStartX) повинен бути кратний кроку
double d = dMinX/step;
dStartX = d ? step * сеil (d-1.) : 0.; // Human factor
MinX = (UINT) (dXLeft * rect.Width()); // Початковий x (піксел)
MaxX = MinX + nStepsX * nStepX; // Кінцевий x (піксел)
X = new UINT [nPoints]; // Масив абсцис (піксел)
// Заповнюємо масив абсцис (піксел)
for (i=0; i X[i]= MinX+(UINT)((x[i]-dStartX)*nStepX/step);
// Коректуємо початкове значення (мантису)
dStartX /= pow (10,iPowerX);
}
//*************************************************************************/
void CGraph::ScaleY (TValues& y)
{
// Те ж, але для осі ординат
// Тут є відмінності від випадку осі абсцис
UINT i;
for (i=0, dMaxY=y[0], dMinY=y[0]; i {
dMinY = y[i] dMaxY = y[i]>dMaxY ? y[i]: dMaxY;
}
dSpanY = dMaxY-dMinY;
Scale (dSpanY, iPowerY, dStepY);
double step = dStepY*pow(10,iPowerY);
nStepsY= (UINT)(dSpanY/step) + (dMinY ? 2 : 1);
nStepY = (UINT) (dFracY * rect.Height() / nStepsY +.5);
// не враховуємо особливості сприйняття (human factor)
dStartY = step * (сеil (dMaxY/step));
MinY = (UINT) (dYTop * rect.Height());
MaxY = MinY + nStepsY * nStepY;
Y = new UINT [nPoints];
for (i=0; i Y[i]= MinY+(UINT)((dStartY-у[i])*nStepY/step);
dStartY /= pow (10,iPowerY);
}
//*************************************************************************/
void CGraph::Scale (double span, int& pow, double& step)
{
// Пошук мантиси (кроку) і експоненти
pow=0;
// Заганяємо мантису в діапазон (1,10)
if (0. for ( ; span<1.; span*=10., pow--)
; // Множенням на 10 або
else if (span>10.) // діленням на 10
for ( ; span>10.; span/=10., pow++)
;
if (span<1.1) // Вибір одного із стандартних
step=.1; // значень для кроку
else if (span<2.1)
step=.2;
else if (span<2.6)
step=.25;
else if (span<5.1)
step=.5;
else
step=1.;
}
//*************************************************************************/
CGraph::~CGraph ()
{
delete [] X; // У деструкторі звільняємо пам'ять, зайняту
delete [] Y; // цілочисловими аналогами вихідних масивів
}
//*************************************************************************/
void CGraph::DrawGrid (CDC* dc, CString& Title
CString& Xlab, CString& Ylab,TValues& xGr, TValues& yGr)
{
// Рисуємо координатну сітку й написи
dc->SelectObject(&TextFont); // Основний шрифт
TEXTMETRIC tm; // Метрики шрифту
dc->GetTextMetrics (&tm);

ScaleX (xGr); // Масштабуємо абсциси
ScaleY(yGr); // Масштабуємо ординати
UINT x, y, i // Робочі змінні
LW=tm.tmMaxCharWidth // Середня ширина букви
LH=tm.tmHeight // Середня висота букви
h2=LH/2, h4=LH/4 // Частки ширини (для підстроювання)
w2=LW/2, w4=LW/4 // Частки висоти
ww=LW+LW, hh=LH+LH // Подвоєні ширина і висота
xy=MinX-ww // X-координата шкали осі Y
yx=MaxY+h2 // Y-координата шкали осі X
xh=MaxX+ww // X-координата заголовка осі X
yh=MinY-hh; // Y-координата заголовка осі Y
double d; // Робочі змінні
CString s;

dc->SetBkMode(TRANSPARENT); // Фон тексту – прозорий
dc->SetTextAlign(TA_CENTER); // Вирівнювання – по центру

for (i=0, x=MinX, d=dStartX; // Розмітка осі X
i<=nStepsX;
x+=nStepX, d+=dStepX, i++)
{
dc->MoveTo(x,MinY);
dc->LineTo (x,MaxY); // Зображення осі X
s.Format("%3.1f",d);
dc->TextOut (x, юшок, s); // Оцифровка шкали осі X
}
// Розмітка осі Y
for (i=0, y=MinY, d=dStartY;
i<=nStepsY;
y+=nStepY, d-=dStepY, i++)
{
dc->MoveTo(MinX, y);
dc->LineTo(MaxX, y);
s.Format("%5.1f",d);
dc->TextOut(xy,y-h2,s);
}
// Виведення діапазону зміни ординат
s.Format("Range = (%.3g, %.3g)",dMinY,dMaxY);
dc->TextOut((MinX+MaxX)/2,yh+h2,s);
// Виведення найменувань осей
dc->TextOut (MinX+w2,yh-h2,Ylab);
dc->TextOut (xh+w2,yx,Xlab);
// Вибираємо більш дрібний шрифт
dc->SetTextColor (RGB(0,0,255));
dc->SelectObject(&PowerFont);
// Рамка навкруги експоненти осі Y
dc->RoundRect(xy-w2-w2,yh-LH,xy+LW+w2,yh+LH,h2,h2);
dc->TextOut(xy,yh-h4,"10");
// Рамка навкруги експоненти осі X
dc->RoundRect(xh-w2-w2,yx-hh-h2,xh+LH+w4,yx-h2,h2,h2);
dc->TextOut(xh,yx-hh+h4,"10");
// Виведення експонент осей Y і X
s.Format("%d",iPowerY);
dc->TextOut(xy+w2+w4,yh-LH,s);
s.Format("%d",iPowerX);
dc->TextOut(xh+w2+w4,MaxY-hh,s);
// Вибираємо крупний шрифт і
// виводимо заголовок усього графіка
dc->SelectObject(&TitleFont);
dc->TextOut((MinX+MaxX)/2,yh-ww,Title);
}
// ******************* Зображення кривої Y (X) ************************/
void CGraph::DrawFunc (CDC* dc,CPen* RedPen)
{
dc->MoveTo(X[0], Y[0]); // Ставимо перо в першу крапку
// і з’єднуємо послідовно всі крапки
for (UINT i=0; i < nPoints-N-1; i++)
{
dc->LineTo (X[i], Y[i]);
}
int ind=i-1;
CPen* oldPen;
CGdiObject* oldBrush;
oldPen=dc->SelectObject(RedPen);
COLORREF color=RGB(255,0,0);
oldBrush=dc->SelectStockObject(BLACK_BRUSH);
for (i=0; i<=N; i++)
{
ind++;
dc->MoveTo (X[ind], Y[ind]);
dc->Ellipse(X[ind]-6, Y[ind]-6,X[ind]+6, Y[ind]+6);
}
dc->SelectObject(oldPen);
dc->SelectObject(oldBrush);
}
//*************************************************************************/

БІБЛІОГРАФІЧНИЙ СПИСОК

Информатика: Консп. лекций / А.Ю. Соколов, М.Л. Угрюмов, В.А. Халтурин, Ю.К. Чернышев. – Х.: НАКУ «ХАИ», 2003. – 192 с.
Шафрин Ю.А. Информационные технологии. – М.: Лаборатория Базовых Знаний, 1999. – Ч. 1. Основы информатики и информационных технологий. – 320 с.
Холзнер С. Visual C++ 6: Учеб. курс. – СПб.: Питер, 1999. – 576 с.
Черосвитов А. Visual C++ 6 и MFC. Курс MCSD для профессиналов. – СПб.: Питер, 2000. – 544 с.
Грегори К. Использование Visual C++ 6. Специальное издание. – М.; СПб.; К.: Изд. дом «Вильямс», 1999. – 864 с.
Бахмет Г.К., Скоб Ю.А., Халтурин В.А. Вычислительная техника и программирование: Учеб. пособие по лаб. практикуму. – Х.: ГАКУ «ХАИ», 1999. – 128 с.
Михайленко С.В. Прикладная математика: Лаб. практикум по численным методам. – Х.: ХАИ, 1992. – 102 с.
Очков В.Ф. Mathcad 7 Pro для студентов и инженеров. – М.: Компьютерпресс, 1998. – 384 с.


ЗМІСТ

13 TOC \o "1-1" \h \z \u 14
13 LINK \l "_Toc107987964" 14ВСТУП 13 PAGEREF _Toc107987964 \h 1431515
13 LINK \l "_Toc107987965" 14МЕТА РОБОТИ 13 PAGEREF _Toc107987965 \h 1431515
13 LINK \l "_Toc107987966" 14ЗМІСТ ПОЯСНЮВАЛЬНОЇ ЗАПИСКИ 13 PAGEREF _Toc107987966 \h 1431515
13 LINK \l "_Toc107987967" 14ПРИКЛАД ОФОРМЛЕННЯ ТИТУЛЬНОГО АРКУША 13 PAGEREF _Toc107987967 \h 1441515
13 LINK \l "_Toc107987971" 14ВИМОГИ ДО ВИКОНАННЯ І ОФОРМЛЕННЯ РОБОТИ 13 PAGEREF _Toc107987971 \h 1451515
13 LINK \l "_Toc107987972" 14ВАРІАНТИ РОЗРАХУНКОВО-ГРАФІЧНОЇ РОБОТИ 13 PAGEREF _Toc107987972 \h 1451515
13 LINK \l "_Toc107987973" 14РЕАЛІЗАЦІЯ ТИПОВОГО ВАРІАНТА 13 PAGEREF _Toc107987973 \h 14221515
13 LINK \l "_Toc107987974" 14ОБРОБКА МАСИВІВ ЧИСЕЛ 13 PAGEREF _Toc107987974 \h 14231515
13 LINK \l "_Toc107987975" 14АПРОКСИМАЦІЯ У СЕРЕДОВИЩІ VISUAL C++ 13 PAGEREF _Toc107987975 \h 14351515
13 LINK \l "_Toc107987976" 14РЕАЛІЗАЦІЯ АПРОКСИМАЦІЇ У СЕРЕДОВИЩІ EXCEL 13 PAGEREF _Toc107987976 \h 14551515
13 LINK \l "_Toc107987977" 14АПРОКСИМАЦІЯ ФУНКЦІЇ У СЕРЕДОВИЩІ MATHCAD 13 PAGEREF _Toc107987977 \h 14701515
ДОДАТОК 1. 13 LINK \l "_Toc107987978" 14МЕТОД НАЙМЕНШИХ КВАДРАТІВ 13 PAGEREF _Toc107987978 \h 14761515
13 LINK \l "_Toc107987979" 14ДОДАТОК 2. РОЗВ’ЯЗАННЯ СИСТЕМИ РІВНЯНЬ МЕТОДОМ ГАУССА 13 PAGEREF _Toc107987979 \h 14771515
13 LINK \l "_Toc107987981" 14ДОДАТОК 3. ТЕКСТ КЛАСУ РИСУВАННЯ ГРАФІКА 13 PAGEREF _Toc107987981 \h 14781515
13 LINK \l "_Toc107987983" 14БІБЛІОГРАФІЧНИЙ СПИСОК 13 PAGEREF _Toc107987983 \h 14841515
15








13PAGE 15


13PAGE 146015




Root EntryEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation Native° Ѓ
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·і
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·ц
·
·
·
·
·
·
·
·
·!
·@
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·ю
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·й
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·й
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·#
·
·
·
·
·
·
·
·
·
·
·
·Й
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·†
·
·
·
·
·
·
·
·
·№
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·№
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Й
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·а
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ќ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·B
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·!
·‡
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ќ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Џ
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ц
·
·N
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·@
·
·O
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·©
·
·
·A
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·…
·v
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·!
·—
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·E
·
·
·
·
·
·@
·
·
·
·
·
·ѓ
·
·
·
·
·
·
·B
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Й
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·C
·Ђ
·
·
·
·
·
·
·
·
·
·
·‚
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·!
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·A
·Ђ
·D
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·‚
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·№
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·.
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·ј
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ѓ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ѓ
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·H
·
·
·
·
·
·
·
·
·†
·
·
·
·
·
·°
·
·
·
·
·
·
·
·@
·
·
·
·
·
·°
·
·
·
·
·
·@
·
·
·
·
·
·
·ё
·
·
·
·
·
·
·
·
·
·
·
·
·‚
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·D
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Х
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·‡
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·х
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·’
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·‚
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ѓ
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ѕ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·ћ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·B
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ѓ
·¦
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·B
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·M
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·!
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·µ
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·°
·
·
·
·
·
·@
·
·
·
·
·
·
·µ
·
·
·
·
·
·
·
·
·
·
·
·
·Н
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·П
·
·
·
·
·
·
·
·q
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·q
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·°2
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·Ђ
·
·
·
·…
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·C
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Р
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·V
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·>
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Л
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·г
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ё
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·м
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·'
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·o
·
·
·A
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·„
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·њ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·В
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·™
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·a
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·й
·
·п
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·э
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·¦
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·џ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·2
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Є
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·W
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·»
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·’
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·A
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·4
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·9
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·њ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·O
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·5
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·н
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·e
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ь
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·…
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ObjInfoEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativexEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation Native

Приложенные файлы

  • doc 23746551
    Размер файла: 2 MB Загрузок: 0

Добавить комментарий