Курсовая работа: Розрахунок норм вектору
Название: Розрахунок норм вектору Раздел: Рефераты по информатике, программированию Тип: курсовая работа |
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ "КПІ" ФАКУЛЬТЕТ ПРИКЛАДНОЇ МАТЕМАТИКИ Кафедра спеціалізованих комп’ютерних систем КУРСОВА РОБОТА з дисципліни "Технологія програмування" Виконав: Семенякін Володимир Постановка завданняРозробити програму для розрахунку норм вектору, отриманому по наступній формулі: , Де A, B, C - матриці й X, Y - вектори. Теоретичні відомості Для обрахунку заданої формули необхідно: a) Написати процедуру[1] множення матриці на матрицю. b) Написати процедуру сумування матриць. c) Написати процедуру віднімання векторів. d) Написати функцію множення матриці на вектор e) Написати функцію для обчислення евклідової норми вектора. f) Написати функцію обчислення норми вектора g) Написати функцію обчислення норми вектора h) Створити зручний інтерфейс для користувача. Множення матриць: Звідки легко бачити, що при множені матриці розмірами NM на матрицю розмірами МК буде отримана матриця розміром NК. Сумування матриць: Легко бачити, що задана дія ніяк не впливає на розмірність результуючої матриці. Матриці, що сумуються, мають бути однакових розмінностей. Множення матриці на вектор: Аналогічно множенню матриці на матрицю. Другим операндом у такій ситуації виступає матриця розміром М1 . В результаті виникає матриця розміром N1 , або ж просто вектор з N координатами. Віднімання векторів: Обчислення евклідової норми[2] : Відбувається за наступною формулою: Частіше всього евклідова норма використовується для обчислення довжини вектора. Норми й не потребують пояснення. Їх зміст у їх вигляді. Обґрунтування доцільності використання модулів Модулі дозволяють використання функцій, процедур й типів для роботи з матрицями і векторами у інших програмах. Отже модульне програмування додає універсальності. Функції й процедури доцільні, коли виникає багаторазове повторення одних й тих же алгоритмів. Ця курсова робота - як раз той випадок. Код програмиКод головної програми: 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 [1] Усі дії над матрицями та векторами, результатами яких не є скалярне значення треба робити з допомогою процедур, адже функція не може передавати складну структуру даних у якості результату. [2] У найбільш широкому змісті нормою у лінійній алгебрі називається деяка функція, що ставить у відповідність матриці (вектору) деяке число (скаляр). |