Розрахунок норм вектору

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ "КПІ"

ФАКУЛЬТЕТ ПРИКЛАДНОЇ МАТЕМАТИКИ

Кафедра спеціалізованих комп’ютерних систем



















КУРСОВА РОБОТА

з дисципліни "Технологія програмування"









Виконав: Семенякін Володимир


Постановка завдання



	Розробити програму для розрахунку норм вектору, отриманому по наступній формулі:

	

	, Де A, B, C - матриці й X, Y - вектори.

	

	Теоретичні відомості

	Для обрахунку заданої формули необхідно:

		Написати процедуру множення матриці на матрицю.

		Написати процедуру сумування матриць.

		Написати процедуру віднімання векторів.

		Написати функцію множення матриці на вектор

		Написати функцію для обчислення евклідової норми вектора.

		Написати функцію обчислення норми вектора 

		Написати функцію обчислення норми вектора 

		Створити зручний інтерфейс для користувача.

	Множення матриць:

	

	

	

	Звідки легко бачити, що при множені матриці розмірами NM на матрицю розмірами МК буде отримана матриця розміром NК.

	Сумування матриць:

	

	

	

	Легко бачити, що задана дія ніяк не впливає на розмірність результуючої матриці. Матриці, що сумуються, мають бути однакових розмінностей.

	Множення матриці на вектор:

Аналогічно множенню матриці на матрицю. Другим операндом у такій ситуації виступає матриця розміром М1. В результаті виникає матриця розміром N1, або ж просто вектор з N координатами.

Віднімання векторів:







Обчислення евклідової норми:

	Відбувається за наступною формулою:

	

	

	

	Частіше всього евклідова норма використовується для обчислення довжини вектора.

	Норми  й  не потребують пояснення. Їх зміст у їх вигляді.

	Обґрунтування доцільності використання модулів

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

	Функції й процедури доцільні, коли виникає багаторазове повторення одних й тих же алгоритмів. Ця курсова робота - як раз той випадок.

	

Код програми



	Код головної програми:

	unit Unit1;

	interface

	uses

	Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

	Dialogs, Grids, StdCtrls, ComCtrls, matrix, Menus;

	type

	TmatrEditor = class (TForm)

	Label1: TLabel;

	Button2: TButton;

	operList: TListView;

	l2: TLabel;

	objInf: TGroupBox;

	matrViev: TStringGrid;

	vectViev: TStringGrid;

	itemNomb: TEdit;

	infLab: TLabel;

	Button3: TButton;

	GroupBox2: TGroupBox;

	Label2: TLabel;

	vectorRB: TRadioButton;

	matrixRB: TRadioButton;

	l4: TLabel;

	GroupBox3: TGroupBox;

	Button1: TButton;

	Button4: TButton;

	TEST: TButton;

	MainMenu1: TMainMenu;

	File1: TMenuItem;

	Save1: TMenuItem;

	Open1: TMenuItem;

	Exit1: TMenuItem;

	opViev: TEdit;

	GroupBox1: TGroupBox;

	plusA: TRadioButton;

	minusA: TRadioButton;

	multA: TRadioButton;

	Button5: TButton;

	Button7: TButton;

	Button6: TButton;

	OpenD: TOpenDialog;

	saveD: TSaveDialog;

	Label3: TLabel;

	procedure Button2Click (Sender: TObject);

	procedure FormCreate (Sender: TObject);

	procedure matrVievClick (Sender: TObject);

	procedure TESTClick (Sender: TObject);

	procedure Button1Click (Sender: TObject);

	procedure operListClick (Sender: TObject);

	procedure vectVievClick (Sender: TObject);

	procedure vectorRBClick (Sender: TObject);

	procedure matrixRBClick (Sender: TObject);

	procedure Button4Click (Sender: TObject);

	procedure itemNombKeyUp (Sender: TObject; var Key: Word;

	Shift: TShiftState);

	procedure operListDblClick (Sender: TObject);

	procedure Button5Click (Sender: TObject);

	procedure Button6Click (Sender: TObject);

	procedure Button7Click (Sender: TObject);

	procedure Save1Click (Sender: TObject);

	procedure Open1Click (Sender: TObject);

	procedure itemNombChange (Sender: TObject);

	private

	{ Private declarations }

	public

	{ Public declarations }

	end;

	const maxAct=15;

	type matrRec = record

	strName: string [20];

	case typeOf: (vect,matr) of

	matr: (mt: matrix_);

	vect: (vt: vector);

	end;

	matrRecLink = ^matrRec;

	var

	matrEditor: TmatrEditor;

	nowCharCode: byte;

	nowMatr: matrix_;

	nowVect: vector;

	mainList: TList;

	nowEl: matrRecLink;

	i,j: size;

	nowItem: integer;

	fl: boolean;

	actionArr: array [1. maxAct] of 0.5;

	indexArr: array [1. maxAct+1] of 0.60;

	sizeOfAction,act: 0.2;

	opers: array [1.2] of matrRecLink;

	filePath: string [255];

	f: file of matrRec;

	newItem: TListItem;

	implementation

	uses Unit3;

	{$R *. dfm}

	procedure TmatrEditor. Button2Click (Sender: TObject);

	begin

	newItem: =operList. Items. Add;

	newItem. Caption: =char (nowCharCode);

	newItem. SubItems. Add ('Vector');

	// ------------------------

	new (nowEl);

	nowEl^. typeOf: =vect;

	ziroVect (nowEl^. vt);

	nowEl^. strName: =char (nowCharCode);

	mainList. Add (nowEl);

	// ------------------------

	nowCharCode: =nowCharCode+1;

	// ------------------------

	operList. Enabled: =true;

	end;

	procedure TmatrEditor. FormCreate (Sender: TObject);

	var newItem: TListItem;

	begin

	mainList: =TList. Create;

	nowCharCode: =65;

	fl: =true;

	sizeOfAction: =0;

	end;

	procedure TmatrEditor. matrVievClick (Sender: TObject);

	begin

	itemNomb. Text: =matrViev. Cells [matrViev. Col,matrViev. Row];

	infLab. caption: =matrRecLink (mainList [nowItem]) ^. strName+' ['+IntToStr (matrViev. Col+1) +'] ['+IntToStr (matrViev. Row+1) +'] ';

	end;

	procedure TmatrEditor. TESTClick (Sender: TObject);

	begin

	transp (nowMatr);

	for i: =1 to nmax do

	for j: =1 to nmax do

	begin

	matrViev. Cells [i-1,j-1]: =FloatToStr (nowMatr [i] [j]);

	end;

	end;

	procedure TmatrEditor. Button1Click (Sender: TObject);

	var nowRand: real;

	begin

	if matrRecLink (mainList [nowItem]) ^. typeOf = Matr then

	for i: =1 to nmax do

	for j: =1 to nmax do

	begin

	nowRand: = (1-2*random (2)) *random (100) /10;

	matrViev. Cells [i-1,j-1]: =FloatToStr (nowRand);

	matrRecLink (mainList [nowItem]) ^. mt [i] [j]: =nowRand;

	end;

	// ---------------------

	if matrRecLink (mainList [nowItem]) ^. typeOf = Vect then

	for i: =1 to nmax do

	begin

	nowRand: = (1-2*random (2)) *random (100) /10;

	vectViev. Cells [i-1,0]: =FloatToStr (nowRand);

	matrRecLink (mainList [nowItem]) ^. vt [i]: =nowRand;

	end;

	end;

	procedure TmatrEditor. operListClick (Sender: TObject);

	begin

	if nowItem<>-1 then

	begin

	objInf. Enabled: =true;

	nowItem: =operList. ItemIndex;

	if matrRecLink (mainList [nowItem]) ^. typeOf=vect then

	begin

	l4. caption: ='vect';

	for i: =1 to nmax do

	for j: =1 to nmax do

	matrViev. Cells [i-1,j-1]: ='';

	for i: =1 to nmax do vectViev. Cells [i-1,0]: =FloatToStr (matrRecLink (mainList [nowItem]) ^. vt [i]);

	vectViev. Color: =clWindow;

	vectViev. Ctl3D: =true;

	vectViev. Enabled: =true;

	matrViev. Color: =clScrollBar;

	matrViev. Ctl3D: =false;

	matrViev. Enabled: =false;

	// -----------------------

	vectorRB. Checked: =true;

	itemNomb. Text: =vectViev. Cells [0,0];

	end;

	// ==================================================

	if matrRecLink (mainList [nowItem]) ^. typeOf=matr then

	begin

	l4. caption: ='matr';

	for i: =1 to nmax do vectViev. Cells [i-1,0]: ='';

	for i: =1 to nmax do

	for j: =1 to nmax do

	matrViev. Cells [i-1,j-1]: =FloatToStr (matrRecLink (mainList [nowItem]) ^. mt [i] [j]);

	vectViev. Color: =clScrollBar;

	vectViev. Ctl3D: =false;

	vectViev. Enabled: =false;

	matrViev. Color: =clWindow;

	matrViev. Ctl3D: =true;

	matrViev. Enabled: =true;

	// -----------------------

	matrixRB. Checked: =true;

	itemNomb. Text: =matrViev. Cells [0,0];

	end;

	end;

	end;

	procedure TmatrEditor. vectVievClick (Sender: TObject);

	begin

	itemNomb. Text: =vectViev. Cells [vectViev. Col,0];

	infLab. caption: =matrRecLink (mainList [nowItem]) ^. strName+' ['+IntToStr (vectViev. Col+1) +'] ';

	end;

	procedure TmatrEditor. vectorRBClick (Sender: TObject);

	begin

	if matrRecLink (mainList [nowItem]) ^. typeOf = matr then

	if MessageDlg ('All matrix information will be lost. Change to vector? ', mtWarning, [mbYes, mbNo], 0) = mrYes then

	begin

	new (nowEl);

	nowEl^. typeOf: =vect;

	ziroVect (nowEl^. vt);

	nowEl^. strName: =matrRecLink (mainList [nowItem]) ^. strName;

	for i: =1 to nmax do

	for j: =1 to nmax do

	matrViev. Cells [i-1,j-1]: ='';

	for i: =1 to nmax do vectViev. Cells [i-1,0]: =FloatToStr (nowEl^. vt [i]);

	dispose (mainList [nowItem]);

	mainList [nowItem]: =nowEl;

	// -----------------------------

	vectViev. Color: =clWindow;

	vectViev. Ctl3D: =true;

	vectViev. Enabled: =true;

	matrViev. Color: =clScrollBar;

	matrViev. Ctl3D: =false;

	matrViev. Enabled: =false;

	// ------------------------------

	operList. Items [nowItem]. SubItems [0]: ='Vector';

	end;

	end;

	procedure TmatrEditor. matrixRBClick (Sender: TObject);

	begin

	if matrRecLink (mainList [nowItem]) ^. typeOf = vect then

	if MessageDlg ('All vector information will be lost. Change to matrix? ', mtWarning, [mbYes, mbNo], 0) = mrYes then

	begin

	new (nowEl);

	nowEl^. typeOf: =matr;

	ziroMatr (nowEl^. mt);

	nowEl^. strName: =matrRecLink (mainList [nowItem]) ^. strName;

	for i: =1 to nmax do vectViev. Cells [i-1,0]: ='';

	for i: =1 to nmax do

	for j: =1 to nmax do

	matrViev. Cells [i-1,j-1]: =FloatToStr (nowEl^. mt [i] [j]);

	dispose (mainList [nowItem]);

	mainList [nowItem]: =nowEl;

	// --------------------------------

	vectViev. Color: =clScrollBar;

	vectViev. Ctl3D: =false;

	vectViev. Enabled: =false;

	matrViev. Color: =clWindow;

	matrViev. Ctl3D: =true;

	matrViev. Enabled: =true;

	// ------------------------------

	operList. Items [nowItem]. SubItems [0]: ='Matrix';

	end;

	end;

	procedure TmatrEditor. Button4Click (Sender: TObject);

	begin

	if matrRecLink (mainList [nowItem]) ^. typeOf = Vect then

	begin

	ziroVect (matrRecLink (mainList [nowItem]) ^. vt);

	for i: =1 to nmax do

	vectViev. Cells [i-1,0]: ='0';

	end;

	// ---------------------

	if matrRecLink (mainList [nowItem]) ^. typeOf = Matr then

	begin

	ziroMatr (matrRecLink (mainList [nowItem]) ^. mt);

	for i: =1 to nmax do

	for j: =1 to nmax do

	matrViev. Cells [i-1,j-1]: ='0';

	end;

	end;

	procedure TmatrEditor. itemNombKeyUp (Sender: TObject; var Key: Word;

	Shift: TShiftState);

	var saveVal: real;

	begin

	if (matrRecLink (mainList [nowItem]) ^. typeOf=vect) and not (Key=46) then

	begin

	try

	// saveVal: =matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col];

	matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col]: =StrToFloat (itemNomb. text);

	saveVal: =matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col];

	vectViev. Cells [vectViev. Col,0]: =itemNomb. text;

	except

	on EConvertError do

	begin

	matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col]: =saveVal;

	text: =FloatToStr (saveVal);

	showMessage ('Put only number! ');

	end;

	end;

	end;

	{if matrRecLink (mainList [nowItem]) ^. typeOf=matr then

	begin

	saveVal: =matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col] [matrViev. Row];

	matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col] [matrViev. Row]: =StrToFloatDef (text,saveVal);

	text: =FloatToStr (matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col] [matrViev. Row]);

	matrViev. Cells [vectViev. Col,vectViev. Row]: =text;

	end; }

	end;

	procedure TmatrEditor. operListDblClick (Sender: TObject);

	begin

	if (nowItem<>-1) and (sizeOfAction<2) then

	begin

	if length (opViev. Text) >0 then

	begin

	if multA. Checked then begin

	opViev. Text: =opViev. text+'x'; act: =0; end;

	if minusA. Checked then begin

	opViev. Text: =opViev. text+'-'; act: =1; end;

	if plusA. Checked then begin

	opViev. Text: =opViev. text+'+'; act: =2; end;

	end;

	new (opers [sizeOfAction+1]);

	opers [sizeOfAction+1] ^. typeOf: =matr;

	for i: =1 to nmax do

	for j: =1 to nmax do

	opers [sizeOfAction+1] ^. mt [i] [j]: =matrRecLink (mainList [nowItem]) ^. mt [i] [j];

	sizeOfAction: =sizeOfAction+1;

	opViev. Text: =opViev. text+matrRecLink (mainList [nowItem]) ^. strName;

	end;

	end;

	procedure TmatrEditor. Button5Click (Sender: TObject);

	var newItem: TListItem;

	begin

	// -----------------------------------------

	if fl then begin

	for nowCharCode: =65 to 67 do

	begin

	newItem: =operList. Items. Add;

	newItem. Caption: =char (nowCharCode);

	newItem. SubItems. Add ('Matrix');

	// ------------------------

	new (nowEl);

	nowEl^. typeOf: =matr;

	ziroMatr (nowEl^. mt);

	nowEl^. strName: =char (nowCharCode);

	mainList. Add (nowEl);

	// ------------------------

	operList. Enabled: =true;

	end;

	// =========================================

	for nowCharCode: =88 to 89 do

	begin

	newItem: =operList. Items. Add;

	newItem. Caption: =char (nowCharCode);

	newItem. SubItems. Add ('Vector');

	// ------------------------

	new (nowEl);

	nowEl^. typeOf: =vect;

	ziroVect (nowEl^. vt);

	nowEl^. strName: =char (nowCharCode);

	mainList. Add (nowEl);

	// ------------------------

	operList. Enabled: =true;

	end;

	fl: =false;

	end;

	ziroMatr (nowMatr);

	// ==================================================

	writeMatr (nowMatr,matrRecLink (mainList [0]) ^. mt);

	multMatrToMatr (nowMatr,matrRecLink (mainList [1]) ^. mt,nowMatr);

	sumMatr (nowMatr,matrRecLink (mainList [2]) ^. mt,nowMatr);

	// --------------------------------------------------

	writeVect (nowVect,matrRecLink (mainList [3]) ^. vt);

	decVect (nowVect,matrRecLink (mainList [4]) ^. vt,nowVect);

	// --------------------------------------------------

	multMatrToVect (nowMatr,nowVect,nowVect);

	// --------------------------------------------------

	for i: =1 to nmax do rezults. rezVect. Cells [i-1,0]: =FloatToStr (nowVect [i]);

	rezults. visible: =true;

	rezults. Left: =331;

	rezults. Top: =222;

	// ------------------------

	rezults. norm1. Text: =FloatToStr (longOfVect (nowVect));

	rezults. norm2. Text: =FloatToStr (absSum (nowVect));

	rezults. norm3. Text: =FloatToStr (absMax (nowVect));

	end;

	procedure TmatrEditor. Button6Click (Sender: TObject);

	begin

	opViev. Text: ='';

	dispose (opers [1]);

	dispose (opers [2]);

	sizeOfAction: =0;

	end;

	procedure TmatrEditor. Button7Click (Sender: TObject);

	begin

	if sizeOfAction=2 then

	begin

	// ziroMatr (nowMatr);

	// ==================================================

	// writeMatr (nowMatr,opers [1] ^. mt);

	multMatrToMatr (opers [1] ^. mt,opers [2] ^. mt,nowMatr);

	for i: =1 to nmax do

	for j: =1 to nmax do

	rezults. rezMatr. Cells [i-1,j-1]: =FloatToStr (nowMatr [i] [j]);

	end;

	rezults. visible: =true;

	rezults. Left: =331;

	rezults. Top: =222;

	// -------------------

	opViev. Text: ='';

	dispose (opers [1]);

	dispose (opers [2]);

	sizeOfAction: =0;

	end;

	procedure TmatrEditor. Save1Click (Sender: TObject);

	var writeRec: matrRec; var i: integer;

	begin

	fl: =saveD. Execute;

	if fl then

	begin

	filePath: =saveD. FileName;

	assignFile (f,filePath);

	rewrite (f);

	for i: =0 to mainList. Count-1 do

	begin

	writeRec: =matrRecLink (mainList [i]) ^;

	write (f,writeRec);

	end;

	end;

	end;

	procedure TmatrEditor. Open1Click (Sender: TObject);

	var writeRec: matrRec;

	begin

	fl: =openD. Execute;

	operList. Clear;

	mainList. Clear;

	if fl then

	begin

	filePath: =openD. FileName;

	assignFile (f,filePath);

	reset (f);

	while not (eof (f)) do

	begin

	new (nowEl);

	read (f,nowEl^);

	mainList. Add (nowEl);

	newItem: =operList. Items. Add;

	newItem. Caption: =nowEl^. strName;

	if nowEl^. typeOf=vect then

	newItem. SubItems. Add ('Vector')

	else

	newItem. SubItems. Add ('Matrix');

	if operList. Items. Count>0 then

	nowItem: =0;

	operList. Enabled: =true;

	end;

	end;

	end;

	procedure TmatrEditor. itemNombChange (Sender: TObject);

	var saveVal: real;

	begin

	if matrRecLink (mainList [nowItem]) ^. typeOf=matr then

	begin

	saveVal: =matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col+1,matrViev. Row+1];

	try

	matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col+1,matrViev. Row+1]: =StrToFloat (itemNomb. Text);

	matrViev. Cells [matrViev. Col,matrViev. Row]: =FloatToStr (matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col+1,matrViev. Row+1]);

	except

	on EConvertError do begin

	matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col+1,matrViev. Row+1]: =saveVal;

	matrViev. Cells [matrViev. Col,matrViev. Row]: =FloatToStr (saveVal);

	itemNomb. Text: =FloatToStr (saveVal);

	end;

	end;

	end;

	if matrRecLink (mainList [nowItem]) ^. typeOf=vect then

	begin

	saveVal: =matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col+1];

	try

	matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col+1]: =StrToFloat (itemNomb. Text);

	Label3. Caption: =FloatToStr (vectViev. Col);

	vectViev. Cells [vectViev. Col,vectViev. Row]: =FloatToStr (matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col+1]);

	except

	on EConvertError do begin

	showMessage ('Convert error! ');

	matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col+1]: =saveVal;

	vectViev. Cells [vectViev. Col,vectViev. Row]: =FloatToStr (saveVal);

	itemNomb. Text: =FloatToStr (saveVal);

	end;

	end;

	end;

	end;

	end.

	Код модуля "MATRIX":

	unit matrix;

	interface

	const

	nmax = 10;

	type

	size = 1. nmax;

	vector = array [size] of real;

	matrix_ = array [size,size] of real;

	// Vector working ===============================

	procedure writeVect (var op1: vector; op2: vector);

	procedure ziroVect (var op1: vector);

	// - ----------- - ------------------------------

	procedure sumVect (op1,op2: vector; var rez: vector);

	procedure decVect (op1,op2: vector; var rez: vector);

	procedure multVectToNomb (var op1: vector; nomb: real);

	function multVectToVect (op1,op2: vector): real;

	// NORMS - --

	function longOfVect (op1: vector): real;

	function absSum (op1: vector): real;

	function absMax (op1: vector): real;

	// ============== ================================

	// matrix_ working ================================

	// ============== ================================

	procedure writeMatr (var op1: matrix_; op2: matrix_);

	procedure ziroMatr (var op1: matrix_);

	// - ----------- - ------------------------------

	procedure sumMatr (op1,op2: matrix_; var rez: matrix_);

	procedure decMatr (op1,op2: matrix_; var rez: matrix_);

	procedure multMatrToNomb (var op1: matrix_; nomb: real);

	procedure multMatrToVect (op1: matrix_; op2: vector; var rez: vector);

	procedure multMatrToMatr (op1,op2: matrix_; var rez: matrix_);

	procedure transp (var op1: matrix_);

	// NORMS - --

	function longOfMatr (op1: matrix_): real;

	function ijMaxSum (op1: matrix_): real;

	function jiMaxSum (op1: matrix_): real;

	implementation

	// =============== HELP FUNCTIONS ================

	// ------------ - writeVect - -------------------

	procedure writeVect (var op1: vector; op2: vector);

	var i: size;

	begin

	for i: =1 to nmax do op1 [i]: =op2 [i];

	end;

	// ------------ - writeMatr - -------------------

	procedure writeMatr (var op1: matrix_; op2: matrix_);

	var i,j: size;

	begin

	for i: =1 to nmax do

	for j: =1 to nmax do

	op1 [i] [j]: =op2 [i] [j];

	end;

	// ------------- - ziroVect - -------------------

	procedure ziroVect (var op1: vector);

	var i: size;

	begin

	for i: =1 to nmax do op1 [i]: =0;

	end;

	// ------------- - ziroMatr - -------------------

	procedure ziroMatr (var op1: matrix_);

	var i,j: size;

	begin

	for i: =1 to nmax do

	for j: =1 to nmax do

	op1 [i] [j]: =0;

	end;

	// =================================================

	// ------------- - sumVect - --------------------

	procedure sumVect (op1,op2: vector; var rez: vector);

	var i: size;

	begin

	for i: =1 to nmax do rez [i]: =op1 [i] +op2 [i];

	end;

	// ------------- - decVect - --------------------

	procedure decVect (op1,op2: vector; var rez: vector);

	var i: size;

	begin

	for i: =1 to nmax do rez [i]: =op1 [i] - op2 [i];

	end;

	// --------- - multVectToNomb - -----------------

	procedure multVectToNomb (var op1: vector; nomb: real);

	var i: size;

	begin

	for i: =1 to nmax do op1 [i]: =op1 [i] *nomb;

	end;

	// ------------ - longOfVect - ------------------

	function longOfVect (op1: vector): real;

	var i: size; tmpVal: real;

	begin

	tmpVal: =0;

	for i: =1 to nmax do tmpVal: =tmpVal+op1 [i] *op1 [i];

	longOfVect: =sqrt (tmpVal);

	end;

	// --------- - multVectToVect - -----------------

	function multVectToVect (op1,op2: vector): real;

	var i: size; tmpVal: real;

	begin

	tmpVal: =0;

	for i: =1 to nmax do tmpVal: =tmpVal+op1 [i] *op2 [i];

	multVectToVect: =tmpVal;

	end;

	// ------------- - absSum - --------------------

	function absSum (op1: vector): real;

	var i: size; tmpVal: real;

	begin

	tmpVal: =0;

	for i: =1 to nmax do tmpVal: =tmpVal+abs (op1 [i]);

	absSum: =tmpVal;

	end;

	// ------------- - absMax - -------------------

	function absMax (op1: vector): real;

	var i: size; tmpVal: real;

	begin

	tmpVal: =op1 [1];

	for i: =2 to nmax do if op1 [i] >tmpVal then tmpVal: =op1 [i];

	absMax: =tmpVal;

	end;

	// ================================================

	// =============== matrix_ ================

	// ================================================

	// ------------- - sumMatr - ------------------

	procedure sumMatr (op1,op2: matrix_; var rez: matrix_);

	var i,j: size;

	begin

	for i: =1 to nmax do

	for j: =1 to nmax do

	rez [i] [j]: =op1 [i] [j] +op2 [i] [j];

	end;

	// ------------- - decMatr - ------------------

	procedure decMatr (op1,op2: matrix_; var rez: matrix_);

	var i,j: size;

	begin

	for i: =1 to nmax do

	for j: =1 to nmax do

	rez [i] [j]: =op1 [i] [j] - op2 [i] [j];

	end;

	// ------------- - multMatrToNomb - ------------------

	procedure multMatrToNomb (var op1: matrix_; nomb: real);

	var i,j: size;

	begin

	for i: =1 to nmax do

	for j: =1 to nmax do

	op1 [i] [j]: =op1 [i] [j] *nomb;

	end;

	// ------------- - multMatrToVect - ------------------

	procedure multMatrToVect (op1: matrix_; op2: vector; var rez: vector);

	var i,j: size; tmpVal: real;

	begin

	for i: =1 to nmax do

	begin

	tmpVal: =0;

	for j: =1 to nmax do

	tmpVal: =tmpVal+op1 [i] [j] *op2 [j];

	rez [i]: =tmpVal;

	end;

	end;

	// ------------- - multMatrToMatr - ------------------

	procedure multMatrToMatr (op1,op2: matrix_; var rez: matrix_);

	var i,j,j1: size; tmpVal: real;

	begin

	for i: =1 to nmax do

	for j1: =1 to nmax do

	begin

	tmpVal: =0;

	for j: =1 to nmax do

	tmpVal: =tmpVal+op1 [i] [j] *op2 [j] [j1];

	rez [i] [j1]: =tmpVal;

	end;

	end;

	// ------------------ - transp - ---------------------

	procedure transp (var op1: matrix_);

	var i,j: size; tmpVal: real;

	begin

	for i: =1 to nmax do

	for j: =i+1 to nmax do

	begin

	tmpVal: =op1 [i] [j];

	op1 [i] [j]: =op1 [j] [i];

	op1 [j] [i]: =tmpVal;

	end;

	end;

	// ---------------- - longOfMatr - -------------------

	function longOfMatr (op1: matrix_): real;

	var i,j: size; tmpVal: real;

	begin

	tmpVal: =0;

	for i: =1 to nmax do

	for j: =1 to nmax do

	tmpVal: =tmpVal+op1 [i] [j] *op1 [i] [j];

	longOfMatr: =sqrt (tmpVal);

	end;

	// ----------------- - ijSumMax - --------------------

	function ijMaxSum (op1: matrix_): real;

	var i,j: size; tmpVal1,tmpVal2: real;

	begin

	for j: =1 to nmax do

	tmpVal2: =tmpVal2+op1 [i] [j];

	for i: =2 to nmax do

	begin

	tmpVal1: =0;

	for j: =1 to nmax do

	tmpVal1: =tmpVal1+op1 [i] [j];

	if tmpVal1>tmpVal2 then

	tmpVal2: =tmpVal1;

	end;

	ijMaxSum: =tmpVal2;

	end;

	// ----------------- - jiMaxSum - --------------------

	function jiMaxSum (op1: matrix_): real;

	var i,j: size; tmpVal1,tmpVal2: real;

	begin

	for i: =1 to nmax do

	tmpVal2: =tmpVal2+op1 [i] [j];

	for j: =2 to nmax do

	begin

	tmpVal1: =0;

	for i: =1 to nmax do

	tmpVal1: =tmpVal1+op1 [i] [j];

	if tmpVal1>tmpVal2 then

	tmpVal2: =tmpVal1;

	end;

	jiMaxSum: =tmpVal2;

	end;

	end.


Інтерфейс програми



	

	

Перевірка програми



	Матриця А

	

програма вектор матриця інтерфейс

	
Матриця В

	

	

	Матриця С

	

	

	Вектор Х

	

	

	Вектор Y





Результуючій вектор



	

	Евклідова норма: 206,434591820266

	

	: 581,39

	: 116