Смекни!
smekni.com

Действия над матрицами

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ КАЗАХСТАН

КОНТРОЛЬНАЯ РАБОТА

по дисциплине «Инструментальные средства разработки программных средств»

На тему: «Действия над матрицами»

Выполнил:

студент гр.08-ВТ3-3

Проверил:

Преподаватель

Индивидуальное задание.

Задание: Реализация действий над матрицами (сложение, вычитание, умножение, обращение, транспонирование)

Технология: Automation, позднее связывание.

Тип (имя) сервера: MS Excel.

Формулы расчёта.

Сложение матриц.

Результатом сложения матриц А и В является матрица С элементы которой равны попарной сумме соответствующих элементов матриц А и В.

Аij+Bij = Cij

Вычитание матриц.

Результатом вычитания матриц А и В является матрица С элементы которой равны попарной разности соответствующих элементов матриц А и В.

Аij - Bij = Cij

Умножение матриц.

Результатом умножения матриц А и В является матрица С элементы которой равны сумме произведений элементов в соответствующей строке первого множителя и столбце второго.

Но, поскольку мы для расчета используем MS Excel, то умножаем матрицы с помощью доступной нам функции «МУМНОЖ».

Обращение матриц.

Обратная матрица — такая матрица A-1, при умножении на которую исходная матрица A даёт в результате единичную матрицу E:

АА-1-1А=Е

При условии что,аd-bc≠0.

Для получения обращенной матрицы используем функцию MS Excel «МОБР».

Транспонирование матриц.

Результатом транспонирования матрицы А является матрица С, каждый n-ый столбец которой идентичен n-ой строке матрицы А.

А

Результат транспонирования матрицы А матрица С
.

Для получения транспонированной матрицы средствами MS Excel используем функцию «ТРАНСП».

Схема алгоритма.


Рисунок 1. –Схема работы программы.

Для реализации задания используется функция CreateOleObject модуля comobj.

Исходный код приложения.

unit Unit1;

interface

uses

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

Dialogs, StdCtrls,comobj, Grids;

type

TForm1 = class(TForm)

Button1: TButton;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

StringGrid3: TStringGrid;

StringGrid4: TStringGrid;

StringGrid5: TStringGrid;

StringGrid6: TStringGrid;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var m:OLEvariant;

i,j:integer;

begin

randomize;

for i:=1 to 4 do

for j:=1 to 4 do

StringGrid1.Cells[i-1, j-1]:=IntToStr(random(25));

m:=CreateOLEObject('Excel.Application');

m.WorkBooks.Add;

m.WorkBooks[1].WorkSheets[1].Name:='Действия над матрицами';

//m.Application.Visible:=true;

for i:=1 to 4 do

for j:=1 to 4 do

m.WorkBooks[1].WorkSheets[1].Cells.Item[i,j]:=StringGrid1.Cells[i-1, j-1];

//оформление

m.WorkBooks[1].WorkSheets[1].Range['E1:E18'].ColumnWidth:=2;

m.WorkBooks[1].WorkSheets[1].Range['E1:E18'].Interior.Color:=RGB(0,0,0);

m.WorkBooks[1].WorkSheets[1].Range['J1:J18'].ColumnWidth:=2;

m.WorkBooks[1].WorkSheets[1].Range['J1:J18'].Interior.Color:=RGB(0,0,0);

m.WorkBooks[1].WorkSheets[1].Range['A6:I6'].Interior.Color:=RGB(0,0,0);

m.WorkBooks[1].WorkSheets[1].Range['A18:I18'].Interior.Color:=RGB(0,0,0);

m.WorkBooks[1].WorkSheets[1].Range['A12:I12'].Interior.Color:=RGB(0,0,0);

m.WorkBooks[1].WorkSheets[1].Range['A5'].Font.Bold:=true;

m.WorkBooks[1].WorkSheets[1].Range['A5'].Font.Size:=18;

m.WorkBooks[1].WorkSheets[1].Range['A5'].Value:='Исходная матрица';

m.WorkBooks[1].WorkSheets[1].Range['A11'].Font.Bold:=true;

m.WorkBooks[1].WorkSheets[1].Range['A11'].Font.Size:=13;

m.WorkBooks[1].WorkSheets[1].Range['A11'].Value:='Результат транспонирования';

m.WorkBooks[1].WorkSheets[1].Range['F5'].Font.Bold:=true;

m.WorkBooks[1].WorkSheets[1].Range['F5'].Font.Size:=13;

m.WorkBooks[1].WorkSheets[1].Range['F5'].Value:='Результат вычитания';

m.WorkBooks[1].WorkSheets[1].Range['F11'].Font.Bold:=true;

m.WorkBooks[1].WorkSheets[1].Range['F11'].Font.Size:=13;

m.WorkBooks[1].WorkSheets[1].Range['F11'].Value:='Результат сложения';

m.WorkBooks[1].WorkSheets[1].Range['A17'].Font.Bold:=true;

m.WorkBooks[1].WorkSheets[1].Range['A17'].Font.Size:=13;

m.WorkBooks[1].WorkSheets[1].Range['A17'].Value:='Результат умножения';

m.WorkBooks[1].WorkSheets[1].Range['F17'].Font.Bold:=true;

m.WorkBooks[1].WorkSheets[1].Range['F17'].Font.Size:=13;

m.WorkBooks[1].WorkSheets[1].Range['F17'].Value:='Результат обращения';

m.WorkBooks[1].WorkSheets[1].Range['A19'].Font.Name:='Times New Roman';

m.WorkBooks[1].WorkSheets[1].Range['A19:J19'].RowHeight:=30;

m.WorkBooks[1].WorkSheets[1].Range['A19:J19'].MergeCells:=true;

m.WorkBooks[1].WorkSheets[1].Range['A19'].Font.Bold:=true;

m.WorkBooks[1].WorkSheets[1].Range['A19'].Font.Size:=13;

m.WorkBooks[1].WorkSheets[1].Range['A19'].Value:='Действия сложения,вычитания умножения производятся между "исходной" и "транспонированной" матрицами.';

m.WorkBooks[1].WorkSheets[1].Range['A19'].Wraptext:=true;

//транспонирование

m.WorkBooks[1].WorkSheets[1].Range['A7:D10', EmptyParam].Select;

m.WorkBooks[1].WorkSheets[1].Range['A7:D10', EmptyParam].FormulaArray:='=ТРАНСП(R1C1:R4C4)';

//сложение

m.WorkBooks[1].WorkSheets[1].Range['F7:I10', EmptyParam].Select;

m.WorkBooks[1].WorkSheets[1].Range['F7:I10', EmptyParam].FormulaArray:='=(R1C1:R4C4)+(R7C1:R10C4)';

//вычитание

m.WorkBooks[1].WorkSheets[1].Range['F1:I4', EmptyParam].Select;

m.WorkBooks[1].WorkSheets[1].Range['F1:I4', EmptyParam].FormulaArray:='=(R1C1:R4C4)-(R7C1:R10C4)';

//умножение

m.WorkBooks[1].WorkSheets[1].Range['A13:D16', EmptyParam].Select;

m.WorkBooks[1].WorkSheets[1].Range['A13:D16', EmptyParam].FormulaArray:='=МУМНОЖ(R1C1:R4C4;R7C1:R10C4)';

//обращение

m.WorkBooks[1].WorkSheets[1].Range['F13:I16', EmptyParam].Select;

m.WorkBooks[1].WorkSheets[1].Range['F13:I16', EmptyParam].FormulaArray:='=МОБР(R1C1:R4C4)';

//передача данных

for i:=13 to 16 do

for j:=1 to 4 do

StringGrid5.Cells[j-1, i-13]:=m.WorkBooks[1].WorkSheets[1].Cells.Item[i,j];

for i:=7 to 10 do

for j:=6 to 10 do

StringGrid4.Cells[j-6,i-7]:=m.WorkBooks[1].WorkSheets[1].Cells.Item[i,j];

for i:=1 to 4 do

for j:=6 to 10 do

StringGrid3.Cells[j-6, i-1]:=m.WorkBooks[1].WorkSheets[1].Cells.Item[i,j];

for i:=1 to 4 do

for j:=7 to 10 do

StringGrid2.Cells[j-7, i-1]:=m.WorkBooks[1].WorkSheets[1].Cells.Item[j,i];

for i:=13 to 16 do

for j:=6 to 10 do

StringGrid6.Cells[j-6, i-13]:=m.WorkBooks[1].WorkSheets[1].Cells.Item[i,j];

m.displayalerts:=false;

m.application.quit;

m:=Unassigned;

end;

Рисунок 2.- «Окно вывода результатов действий над матрицами»

Список использованной литературы:

3. Корняков В. Н. «Программирование документов и приложений MS Office в Delphi.» —СПб. : БХВ-Петербург, 2005. - 496 с : ил. ISBN 5-94157-458-4