Львівський державний університет безпеки життєдіяльності
Кафедра управління інформаційною безпекою
КУРСОВА РОБОТА
на тему:
"Розроблення програмного забезпечення
для розв'язання математичної задачі"
з дисципліни:
"Технології програмування"
Зміст
Вступ 3
1. Опис функцій, що використовуються для обчислення матриць 4
1.1. Обчислення елементів вектора стовпця C 4
1.2. Обчислення елементів матриці D 5
1.3. Обчислення елементів матриці А 6
1.4. Обчислення елементів матриці В 7
2. Обчислення змінної t 8
2.1. Обчислення невідомої матриці Х 8
2.2. Обчислення змінної t з матриці Х 9
3. Обчислення одновимірного масиву Н 10
3.1. Обчислення значень функції f[x, y, z] 10
3.2. Обчислення значень функції q[x, y, z] 11
3.3. Обчислення значення одновимірного масиву Н 11
4. Виконання індивідуального завдання 13
Висновок 17
Список використаної літератури 18
Додаток А. Код усієї програми 19
Додаток В. Результат виконання програми 30
Вступ
Основним завданням перед написанням курсової роботи стояло розроблення програмного забезпечення для розв’язання математичної задачі. Щоб розробити таке програмне забезпечення мною використовувалися знання з таких предметів як "Технології програмування" та "Мережеві операційні системи". Мовою написання стала С++.
Мова С++ є найдосконалішою серед мов програмування. Вона може використовуватися як для програмування математичних виразів, так і для написання складних логічних функцій.
В даній курсовій роботі представлено, як за допомогою елементарних знань з програмування можна розробити універсальні функції та обчислити складне математичне завдання.
Опис функцій, що використовуються для обчислення матриць
В даній курсовій роботі окрім універсальних функцій перезапису, множення, додавання, віднімання матриць було розроблено ряд функцій необхідних для обчислення математичної задачі.
Обчислення елементів вектора стовпця C
Елементи вектора-стовпця С визначаються за такими формулами:
Код функцій:
double Fn_ci(double s, int i)
{
double c1;
for(int j=0;j<i+1;j++)
c1+= float(j)/pow(s,1/.6);
double c2 = pow(pow(sin(s/i+pow(i,2)/s),2),1./(i+1));
return c1-c2;
}
Результат виконання:
Рис1.1. Обчислення вектора стовпця С.
Обчислення елементів матриці D
Елементи матриці D визначаються за такою формулою:
.
Обчислення матриці D не склало великих труднощів, так як це простий двохвимірний масив, в якому кожен елемент задається одним і тим самим математичним виразом. Спочатку я оголосив масив, а потім присвоїв йому певні значення
Код функції:
void Array(double ( *Fn_1)(double, double), double Mat[][sizeM], double Vek[], int m, int n)
{
for(int i = 0; i < m; i++)
for(int j = 0; j < m; j++)
Mat[i][j] = ( *Fn_1)(Vek[i], Vek[j]);
}
Результат виконання:
Рис1.2. Обчислення значень елементів матриці D
Обчислення елементів матриці А
Елементи матриці А визначаються за такими математичними виразами:
.
Для Обчислення елементів масиву А, потрібно перевірити на дійсність задані умови. Для кожної умови свій математичний вираз. Якщо ні одна з умов не використовується, то інший математичний вираз. Для здійснення поставленої задачі використовуємо два оператори циклу і три умови.
Код функції:
double Fn_aij(int i, int j)
{
if(i < j)
{
return 1.2*i+sin(pow(i+j,0.2));
}
else if(i = j)
{
return i/pow(j,2)+pow(pow(sin(pow(i,3./j)),2),1./j);
}
else
{
return ((i+j)/(i+3))/pow(sin(pow(j+i,0.2)),2)+3*i/j;
}
}
Результат виконання:
Рис1.3. Обчислення значень елементів матриці А
Обчислення елементів матриці В
Елементи матриці В визначаються за таким математичним виразом:
.
Для Обчислення елементів матриці В, потрібно було знайти суму від 1 до j+1 в чисельнику виразу (в коді це змінна sum) і в загальному суму від 1 до i+1 від всього виразу (в коді це змінна c). Для виконання цієї задачі я користувався виключно оператором for.
Код функції:
double Fn_bij(int i, int j, double s)
{
double bs = 0, sum = 0, c = 0;
int z = 1, h = 1;
do
{
bs += z * c; sum = 0;
for(int k = 1; k <= i + 1; k++)
{
double sum1 = (k/pow(s,1/34))/(h+j)+float(j)/i;
double sum2 = j/i;
sum += pow(sin(sum1+sum2),2);
}
c =sum/(Fact(h)+pow(fabs(pow(j,2)/i-3*s),1./i));
h++; z = -z;
} while(fabs(c) > 0.0001);
return bs;
}
Результат виконання:
Рис1.4. Обчислення значень елементів матриці B
Обчислення змінної t
Для обчислення змінної t необхідно:
Знайти елементи невідомої матриці Х з наступного матричного рівняння:
;
Обчислити найменше із найбільших значень додатних елементів кожного із рядків матриці , які мають непарні номери.
Обчислення невідомої матриці Х
Для обчислення невідомої матриці Х необхідно розв’язати матричне рівняння використовуючи елементи вище вказаних масивів, а також функції множення, додавання, віднімання, транспонування масивів, дані функції являються універсальними, тому описувати їх окремо вважаю не доцільним, опис даних функцій можна побачити в коді цілої програми.
Код функції:
Appropriation(Temp1, A, m, m);
Transp(Temp1, m, m);
Addition( Temp1,B, A1, m, m);
Fn_Show(" < A'=A^t+B > ", A1, m, m);
Appropriation(Temp1, D, m, m);
Transp(Temp1, m, m);
Increase( C, C, Temp2, m, m);
Addition( Temp1,Temp2, B1, m, m);
Fn_Show(" < B'=D^t+(C*C^t) > ", B1, m, m);
Incr(pow(m,-2), D, Temp1, m, m);
Addition( B1, Temp1, C1, m, m);
Fn_Show(" < C'=B'+m^-2*D > ", B1, m, m);
Appropriation(Temp1, A1, m, m);
MOBR(Temp1, m);
Multiplication(C1, Temp1, X, m, m);
Fn_Show(" < X=C'*A'^-1> ", X, m, m);
//______________Первірка________________________________
cout <<setw(50)<< " ПЕРЕВІРКА \n";
Multiplication(X, A1, Temp1, m, m);
Fn_Show(" < X*A'= > ", Temp1, m, m);
Fn_Show(" < C'= > ", C1, m, m);
Результат виконання:
Рис. 2.1. Розв’язання матричного рівняння
Обчислення змінної t з матриці Х
Для Обчислення змінної t необхідно використати елементи уже відомої нам матриці Х, а саме порахувати суму максимальних значень елементів невідомої матриці Х які знаходяться у кожному із її рядків, що мають непарні номери для цього я використав цикл в якому перевіряю чи є номер рядка парним чи ні, а також чи є елемент найбільшим у рядку. Після цього як я знаходжу елемент з максимальним значенням у даному рядку я його накопичую у змінну sum і переходжу до наступного непарного рядка.
Код функції:
double znach_tt(double Mat1[][sizeM], int n)
{
double max=1, Vekm[sizeM], min;
for(int j = 0; j < n; j++)
{
max=0;
for(int i = 0; i < n; i++)
{
if((Mat1[i][j] > 1 )&&(Mat1[i][j] > max ))
max=Mat1[i][j];
}
if (max>1) Vekm[j]=max;
}
min = Vekm[0];
for(int j = 0; j < n; j++)
if(min>Vekm[j]) min=Vekm[j];
return min;
}
Результат виконання:
Рис. 2.2. Обчислення змінної t
Обчислення одновимірного масиву Н
Для обчислення значення одновимірного масиву Н нам необхідно описати ще дві функції: функцію f[x, y, z] і функцію q [x, y, z]. Крім цього для обчислення значень елементів масиву ми будемо використовувати змінну t і змінну s, які в нашому випадку дорівнюють :
t=0.8
s=3.75
Обчислення значень функції f[x, y, z]
Значення функції f[x, y, z] визначаються за таким математичним виразом:
.
Код функції:
double Fn_f(double x, double y, double z)
{
double f1=2*cos(pow(fabs(x*x-y/6),1./3));
double f2=1+sqrt(pow(fabs(x*z+pow(sin(y),2)),2.3));
double f3= pow(z*z,0.73);
return f1/f2+f3;
}
Обчислення значень функції q[x, y, z]
Значення функції f[x, y, z] визначаються за таким математичним виразом:
. Даний математичний вираз являється лінійним, тому його розв’язання не складе ніяких труднощів, для обрахування достатньо використати математичні функції С++.
Код функції:
double Fn_q(double x, double y, double z)
{
double q1 = 1+y*y/Fact(3)+z*z*z/Fact(5);
double q2 = sin(pow(x-z,2));//(y*y+z);
return q1+q2;
}
Обчислення значення одновимірного масиву Н
Для обчислення елементів вектор стовпця Н використано стандартні функції С++ , а також функції f[x, y, z] і q [x, y, z].
Код функції:
void Mas_H(double ( *Fn_1)(double, double, double), double ( *Fn_2)(double, double, double), double Vek[], double t, double s, int n)
{
for(int j=0;j<n;j++)
{
for(int i=0;i<n;i++)
{
double f1 = pow(fabs(Fn_q(j,t*i,s)),i/3.);
double f2 = Fn_f(t*t-j,t+2,t*i);
double f3 = pow(Fn_q(s*s,t*i,j*s),2);
double f4 = sqrt(fabs(Fn_f(j*j,i,t*s)));
double G =f1*f2/f3-f4;
cout<<setw(8)<<G;
}
cout<<endl;
}
}
Результат виконання:
Рис 3.1. Обчислення значень одновимірного масиву Н
Виконання індивідуального завдання
У індивідуальному завдані мною було розроблено програмне забезпечення для одновимірного табулювання функції f[x, y, z], q[x, y, z] за змінною х і побудови їх графіків з нанесенням відповідних легенд. Межі та крок табулювання необхідно прийняти самостійно.
Для зручності реалізації всіх можливостей програмного забезпечення мною було розроблено наступний інтерфейс програми:
Рис. 4.1. Інтерфейс програмного забезпечення
Для можливості вибору необхідної функції для табулювання мною використано об’єкти: RadioGroup і RadioButton. Для введення даних використано об’єкт Edit, для виведення Memo. Для побудови графіків використано об’єкт Chart. Керування програмою здійснюється за допомогою трьох кнопок (об’єкт BitBtn): “OK”,”Вихід”,”Очистити”.
Код програми:
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
class ZavdClass {
float a, b;
public:
ZavdClass() {a=1; b=1;}
void Fn_b(float x, float y, float z);
void Fn_a(float x, float y, float z);
void TabX(float xp, float xk, float dx,
float y, float z);
float getA()
{return a;}
float getB()
{return b;}
float Faktr(int n);
void showZavd()
{
Form1->Edit5->Text=FloatToStrF(b,ffFixed,2,3);
Form1->Edit6->Text=FloatToStrF(a,ffFixed,2,3);
}
void ZavdClass::TabXY(double xp, double xk, double dx,
double yp, double yk, double dy, double z);
};
void ZavdClass::Fn_b(float x, float y, float z)
{
double f1=2*cos(pow(fabs(x*x-y/6),1./3));
double f2=1+sqrt(pow(fabs(x*z+pow(sin(y),2)),2.3));
double f3= pow(z*z,0.73);
b=f1/f2+f3;
}
void ZavdClass::Fn_a(float x, float y, float z)
{
double q1 = 1+y*y/Faktr(3)+z*z*z/Faktr(5);
double q2 = sin(pow(x-z,2));//(y*y+z);
a=q1+q2;
}
float ZavdClass::Faktr(int n)
{
float f=1;
if(n > 1)
for(int i=2; i<=n; i++)
f*=i;
return f;
}
void ZavdClass::TabX(float xp, float xk, float dx,
float y, float z)
{ ZavdClass Zavd;
int i=1;
Form1->Memo1->Lines->Add("Одновимірне табулювання функції:");
Form1->Memo1->Lines->Add(" ");
float x=xp;
Form1->StringGrid2->Cells[0][0]="x";
Form1->StringGrid2->Cells[0][2]="f[x,y,z]";
Form1->StringGrid2->Cells[0][1]="q[x,y,z]";
while(x<=xk){
Fn_b(x, y, z);
Fn_a(x, y, z);
Form1->Memo1->Lines->Append(FloatToStrF(x,ffFixed,2,2)+'\t'+FloatToStrF(getA(),ffFixed,2,2)+'\t'+FloatToStrF(getB(),ffFixed,2,2));
Form1->Series1->Add(getB(),FloatToStrF(x,ffFixed,2,2),clRed);
Form1->Series2->Add(getA(),FloatToStrF(x,ffFixed,2,2),clGreen);
Form1->StringGrid2->Cells[i][0]=FloatToStrF(x,ffFixed,2,2);
Form1->StringGrid2->Cells[i][2]=FloatToStrF(getA(),ffFixed,2,2);
Form1->StringGrid2->Cells[i][1]=FloatToStrF(getB(),ffFixed,2,2);
x+=dx;
i++;
}
}
void ZavdClass::TabXY(double xp, double xk, double dx,
double yp, double yk, double dy, double z)
{
Form1->Memo1->Lines->Add(" ");
Form1->Memo1->Lines->Add("\n\nДвохвимірне табулювання функції:\n\n");
Form1->Memo1->Lines->Add(" ");
double y=yp;
int i=1,j=1;
while(y<=yk){
double x=xp;
AnsiString A;
while(x<=xk){
Fn_b(x, y, z);
Fn_a(x, y, z);
A=A+FloatToStrF(getA(),ffFixed,2,2)+"\t";
Form1->StringGrid1->Cells[i][j]=FloatToStrF(getA(),ffFixed,2,2);
Form1->StringGrid1->Cells[i][0]=FloatToStrF(x,ffFixed,2,2);
i++;
x+=dx;
}
Form1->StringGrid1->Cells[0][j]=FloatToStrF(y,ffFixed,2,2);
i=1;
j++;
Form1->Memo1->Lines->Add(A);
y+=dy;
}
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
int Nv=StrToInt(Edit1->Text);
float x=0.48*Nv;
Edit2->Text= FloatToStrF(x,ffFixed,2,2);
float y=0.47*Nv;
Edit3->Text= FloatToStrF(y,ffFixed,2,2);
float z=1.32*Nv;
Edit4->Text= FloatToStrF(z,ffFixed,2,2);
float Xp=-1*Nv;
Edit7->Text= FloatToStrF(Xp,ffFixed,2,2);
float Xk=1*Nv;
Edit8->Text= FloatToStrF(Xk,ffFixed,2,2);
float dX=0.1*Nv;
Edit9->Text= FloatToStrF(dX,ffFixed,2,2);
float Yp=-2;
Edit10->Text= FloatToStrF(Yp,ffFixed,2,2);
float Yk=2;
Edit11->Text= FloatToStrF(Yk,ffFixed,2,2);
float dY=0.2;
Edit12->Text= FloatToStrF(dY,ffFixed,2,2);
ZavdClass Zavd;
if (CheckBox2->Checked) Zavd.TabX(Xp,Xk,dX,y,z);
if (CheckBox3->Checked) Zavd.TabXY(Xp,Xk,dX,Yp,Yk,dY,z);
if (CheckBox1->Checked)
{
Zavd.Fn_b(x, y, z);
Zavd.Fn_a(x, y, z);
Zavd.showZavd();
}
BitBtn1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
Edit2->Text=" ";
Edit3->Text=" ";
Edit4->Text=" ";
Edit5->Text=" ";
Edit6->Text=" ";
Edit7->Text=" ";
Edit8->Text=" ";
Edit9->Text=" ";
Edit10->Text=" ";
Edit11->Text=" ";
Edit12->Text=" ";
Memo1->Lines->Clear();
Series1->Clear();
Chart1->AddSeries(Series1);
Series2->Clear();
Chart1->AddSeries(Series2);
BitBtn1->Enabled=true;
}
//---------------------------------------------------------------------------
Результат виконання програми:
Рис.4.2. Результат табуляції функцій f[x, y, z] та q[x, y, z] за змінною х
Висновок
В даній курсовій роботі було розроблено програмне забезпечення для розв’язання математичної задачі. При виконанні курсової роботи мені стали у нагоді знання отримані на таких дисциплінах, як «Технології програмування», «Інформатика» та «Вища математика».
Дану курсову роботу я розділив на 3 частини:
У першій частині описав функції для обчислення елементів вектора-стовпся та матриць ,,.
У другій частині описано функції та розв’язано матричне рівняння для обчислення змінної t.
У третій частині описано функції необхідні для обчислення значення елементів одновимірного масиву .
У четвертій частині виконано одновимірне табулювання функцій f[x, y, z] та q[x, y, z] за змінною х з подальшою пободовую графіків цих функцій.
Загалом, в даній курсовій роботі, я засвоїв навички структурного та візуального програмування у середовищі Borland C++ Builder 6.
Список використаної літератури
Архангельский А.Я. Программирование в С++ Builder 6. – М.: ЗАО "Издательство БИНОМ", 2004. – 1152 с.
Глинський Я.М., Анохін В.Є., Ряжська В.А. С++ і С++ Builder. – Львів.: Деол, СПД Глинський, 2003. – 192 с.
Грицюк Ю.І. Програмування мовою С++ : навч. посібн. / Ю.І. Грицюк, Т.Є. Рак. – Львів : Вид - во ЛДУ БЖД, 2011. – 292 с.
Липпман С., Лажойе Ж. Язык программирования С++ . Вводный курс, 3 - е изд. / Пер. с англ. – СПб. - М.: Невский диалект – ДМК Пресс, 2004. – 1104 с.
Павловская Т.А. Программирование на языке высокого уровня: Учебник. – СПб.: Питер, 2005. – 461 с.
Прата, Стивен. Язык программирования С++ . Лекции и упражнения: Учебник / Пер. с англ. – СПб.: ООО "ДиаСофтБП", 2005. – 1104 с.
Шилдт, Герберт. С++ : Базовый курс, 3 - е изд. / Пер. с англ. – М.: Изд. дом "Вильямс", 2005. – 624 с.
Додаток А. Код усієї програми
#include <vcl>
#include <conio> // Для консольного режиму роботи
#include <math>
#include <iomanip>
#include <iostream> // Для потокового введення - виведення
using namespace std; // Використання стандартного простору імен
const int sizeM = 5, sizeN = 10; // Оголошення констант
// Обчислення поточного значення елемента одновимірного масиву < C >
double Fn_ci( double, int);
// Обчислення поточного значення елемента двовимірного масиву < D >
double Fn_dij(double, double);
// Заповнення елементів матриці < D >
void Array(double ( *Fn_1)(double, double), double Mat[][sizeM], double Vek[], int, int);
// Обчислення поточного значення елемента двовимірного масиву < A >
double Fn_aij(int, int);
// Заповнення елементів матриці < A >
void Array(double ( *Fn_1)(int, int), double Mat[][sizeM], int, int);
// Обчислення поточного значення елемента двовимірного масиву < B >
double Fn_bij(int, int, double);
// Заповнення елементів матриці < B >
void Array(double ( *Fn_1)(int, int, double), double Mat[][sizeM], double, int, int);
// Відображення елементів одновимірного масиву
void Fn_Show(char *name, double Vek[], int m, int z = 7);
// Відображення елементів двовимірного масиву
void Fn_Show(char *name, double Mas[][sizeM], int m, int n, int z = 9);
// Упорядкування рядків двовимірного масиву методом пошуку мінімальних елементів
void Sort_min(double Mat[][sizeM], int m, int n);
// Обчислення значення факторіалу
double Fact(double n);
// Присвоєння значень елементів однієї матриці іншій
void Appropriation(double Mat1[][sizeM], double Mat2[][sizeM], int m, int n);
// Присвоєння значень елементів одного вектора іншому
void Appropriation(double vek1[], double vek2[], int m);
// Виконання дії додавання "+" двох матриць
void Addition(double Mat1[][sizeM], double Mat2[][sizeM], double Mat3[][sizeM], int m, int n);
// Виконання дії додавання "+" двох векторів
void Addition(double Vek1[], double Vek2[], double Vek3[], int m);
// Виконання дії віднімання "-" двох матриць
void Subtraction(double Mat1[][sizeM], double Mat2[][sizeM], double Mat3[][sizeM], int m, int n);
// Виконання дії віднімання "-" двох векторів
void Subtraction(double Vek1[], double Vek2[], double Vek3[], int m);
// Виконання дії множення "*" матриці на матрицю
void Multiplication(double Mat1[][sizeM], double Mat2[][sizeM], double Mat3[][sizeM], int m, int n);
// Виконання дії множення "*" матриці на число
void Multiplication(double Mat1[][sizeM], double variable, double Mat2[][sizeM], int m, int n);
// Піднесення матриці до n - го степеня
void MStep(double Mat1[][sizeM], int variable, int m);
// Обчислення транспонованої "^t" матриці
void Transp(double Mat1[][sizeM], int m, int n);
// Обчислення оберненої " - 1" матриці
void MOBR(double Mat[][sizeM], int n);
// Обчислення значення змінної t
double znach_tt(double Mat1[][sizeM], int n);
// Обчислення значення функції f
double Fn_f(double x, double y, double z);
// Обчислення значення функції q
double Fn_q(double x, double y, double z);
//Виконання дії множення "*" числа на матрицю
void Incr(double variable, double Mat1[][sizeM], double Mat2[][sizeM], int m, int n);
// Обчислення значень одновимірного масиву < H >
void Mas_H(double ( *Fn_1)(double, double, double), double ( *Fn_2)(double, double, double),
double Vek[], double t, double s, int n);
void Increase(double Vek1[], double Vek2[], double Mat1[][sizeM], int m, int n);
int main()
{
cout.precision(3); // Формат #.###
cout.setf(ios_base::fixed); // Формат #.###
SetConsoleOutputCP(1251); // Виведення кирилиці
cout << "Курсова робота, варіант №13" << endl;
// Оголошення змінних
int m=5; cout << "m = 5"<<endl;
int n=10; cout << "n = 10"<<endl;
double s=3.75, t; cout << "s = 3.75"; cout << endl;
double A[sizeM][sizeM], B[sizeM][sizeM], Bs[sizeM][sizeM], C[sizeM],Vek[sizeM],A1[sizeM][sizeM], B1[sizeM][sizeM],C1[sizeM][sizeM];
double D[sizeM][sizeM], H[sizeN], X[sizeM][sizeM];
double Temp1[sizeM][sizeM], Temp2[sizeM][sizeM],Temp3[sizeM][sizeM],Temp4[sizeM][sizeM];
for(int i = 1; i < m; i++)
C[i-1] = Fn_ci( s, i);
Fn_Show("1. Обчислення значень елементів вектора-стовпця < C > ", C, m);
cout << "2. Обчислення значень елементів двовимірного масиву < D > " << endl;
Array(Fn_dij, D, C, m, m);
Fn_Show("Масив < D > ", D, m, m); // Виведення елементів двовимірного масиву
Sort_min(D, m, m); // Впорядкування за зростанням значень елементів рядків матриці
Fn_Show("Упорядкований масив < D > ", D, m, m); // Виведення елементів двовимірного масиву
cout << "3. Обчислення значень елементів двовимірного масиву < A > " << endl;
Array(Fn_aij, A, m, m);
Fn_Show("Масив < A > ", A, m, m); // Виведення елементів двовимірного масиву
Sort_min(A, m, m); // Впорядкування за зростанням значень елементів рядків матриці
Fn_Show("Упорядкований масив < A > ", A, m, m); // Виведення елементів двовимірного масиву
cout << "4. Обчислення значень елементів двовимірного масиву < B > " << endl;
Array(Fn_bij, B, s, m, m);
Fn_Show("Масив < B > ", B, m, m); // Виведення елементів двовимірного масиву
Sort_min(B, m, m); // Впорядкування за зростанням значень елементів рядків матриці
Fn_Show("Упорядкований масив < B > ", B, m, m); // Виведення елементів двовимірного масиву
cout << "5. Розв'язання матричного рівняння" << endl;
cout << " " << endl<< endl<< endl;
Appropriation(Temp1, A, m, m);
Transp(Temp1, m, m);
Addition( Temp1,B, A1, m, m);
Fn_Show(" < A'=A^t+B > ", A1, m, m);
Appropriation(Temp1, D, m, m);
Transp(Temp1, m, m);
Increase( C, C, Temp2, m, m);
Addition( Temp1,Temp2, B1, m, m);
Fn_Show(" < B'=D^t+(C*C^t) > ", B1, m, m);
Incr(pow(m,-2), D, Temp1, m, m);
Addition( B1, Temp1, C1, m, m);
Fn_Show(" < C'=B'+m^-2*D > ", B1, m, m);
Appropriation(Temp1, A1, m, m);
MOBR(Temp1, m);
Multiplication(C1, Temp1, X, m, m);
Fn_Show(" < X=C'*A'^-1> ", X, m, m);
//______________Первірка________________________________