Отчеты по лабораторным работам
  • Регистрация
1 1 1 1 1 1 1 1 1 1 Рейтинг 0.00 (0 Голоса)

Лабораторная №1 По дисциплине ОАПС.

Цель работы: Разработать программу, реализующую преобразование матрицы смежности в матрицу инциндентности.

Постановка задачи: Программа должна преобразовывать заданную матрицу смежности в матрицу инциндентности. Матрицы внутри программы при этом должны представляться одномерным массивом байт.

Описание программы: На главной форме программы имеется поля ввода, предназначенное для изменения размера входной матрицы. Для представления матриц используется компонент TStringGrid.

Тестовый пример:

Имеется граф с четырьмя вершинами:

b

 

c

1  2

a d e f

2  4

матрица смежности:

Матрица нициндентности:

a b c d e f

Результат работы программы:

Вывод: в ходе лабораторной работы была разработана программа преобразовывающая матрицу смежности в матрицу инциндентности.

Текст программы:

unit Unit1;

interface

uses

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

StdCtrls, Grids, ComCtrls, Mask, Buttons, unit2;

type

TForm1 = class(TForm)

Label1: TLabel;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

BitBtn1: TBitBtn;

MaskEdit1: TMaskEdit;

BitBtn2: TBitBtn;

Label2: TLabel;

Label3: TLabel;

procedure FormCreate(Sender: TObject);

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

Shift: TShiftState);

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

Shift: TShiftState);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

str:String;

smejnMatr:array[0..8] of byte;

incendMatr:array[0..8] of word;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

var

a, b,rowsNum:integer;

Buffer: PChar;

Size: Byte;

begin

Size := MaskEdit1.GetTextLen;

Inc(Size);

GetMem(Buffer, Size);

MaskEdit1.GetTextBuf(Buffer, Size);

rowsNum:= strToInt(StrPas(Buffer));

FreeMem(Buffer, Size);

for a:=1 to 8 do

begin

incendMatr[a]:=0;

smejnMatr[a]:=0;

end;

Stringgrid1.RowCount:=rowsNum;

StringGrid1.ColCount:=rowsNum;

StringGrid1.EditorMode:=true;

Stringgrid2.RowCount:=rowsNum;

StringGrid2.ColCount:=rowsNum;

StringGrid2.EditorMode:=false;

end;

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if (not((key=VK_NUMPAD0)or(key=VK_NUMPAD1) or (key = Ord('0')) or (key = Ord('1')))) then

begin

Beep;

end;

end;

procedure TForm1.StringGrid1KeyUp(Sender: TObject; var Key: Word;

Shift: TShiftState);

var

i, j:integer;

begin

i:=stringGrid1.Row;

j:=stringGrid1.col;

StringGrid1.Cells[j, i]:='';

if((key = Ord('0')) or (key=VK_NUMPAD0)) then

StringGrid1.Cells[j, i]:='0';

if((key = Ord('1'))or (key=VK_NUMPAD1)) then

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

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

var

rowsNum:integer;

Buffer: PChar;

Size: Byte;

begin

Size := MaskEdit1.GetTextLen;

Inc(Size);

GetMem(Buffer, Size);

MaskEdit1.GetTextBuf(Buffer, Size);

rowsNum:= strToInt(StrPas(Buffer));

FreeMem(Buffer, Size);

Stringgrid1.RowCount:=rowsNum;

StringGrid1.ColCount:=rowsNum;

StringGrid1.EditorMode:=true;

Stringgrid2.RowCount:=rowsNum;

StringGrid2.ColCount:=rowsNum;

StringGrid2.EditorMode:=false;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

var

biter:bitOperator;

begin

biter := bitOperator. Create;

biter. getFormData;

biter. buildIncendMatrix;

biter. setFormData;

end;

end.

unit Unit2;

interface

uses

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

StdCtrls, Grids, ComCtrls, Mask, Buttons;

type

bitOperator = class

procedure getFormData();

procedure setFormData();

procedure buildIncendMatrix();

private

{ Private declarations }

public

{ Public declarations }

end;

implementation

uses unit1;

var

arcNum:integer;

procedure bitOperator. getFormData();

var

i, j,b, rc, cc:integer;

begin

for i:=0 to (Form1.stringgrid1.RowCount) do

for j:=0 to Form1.stringgrid1.ColCount do

begin

if(Form1.stringGrid1.Cells[j, i] = '1') then

begin

b:=1;

b:=b shl j;

smejnMatr[i]:=smejnMatr[i] or b;

end;

end;

end;

procedure bitOperator. buildIncendMatrix();

var

i, j,cnt, b,rc, cc:integer;

wReg1,wReg2,wReg3,tmp:word;

begin

rc:=Form1.stringgrid1.RowCount;

cc:=Form1.stringgrid1.ColCount;

cnt:=0;

arcNum:=0;

for i:=0 to rc do

for j:=0 to cc+cc do

begin

tmp:=i;

b:=1;

b:=b shl j;

b:=smejnMatr[i] and b;

if((b > 0) and (i<>j))then

begin

wReg1:=1;

wReg1:=wReg1 shl cnt;

incendMatr[i]:=incendMatr[i] or wReg1;

wReg1:=1;

wReg1:=wReg1 shl (cnt+1);

tmp:=wReg1;

incendMatr[j]:=incendMatr[j] or wReg1;

cnt:=cnt+2;

arcNum:=arcNum+1;

end;

end;

end;

procedure bitOperator. setFormData();

var

i, j,cnt, rc, cc:integer;

wReg1,wReg2,wReg3:word;

begin

cnt:=0;

Form1.stringgrid2.ColCount:=arcNum;

rc:=Form1.stringgrid2.RowCount;

cc:=Form1.stringgrid2.ColCount;

j:=0;

for i:=0 to rc do

begin

while (j<=(cc+cc)) do

begin

wReg1:=1;

wReg1:=wReg1 shl j;

wReg2:=incendMatr[i] and wReg1;

wReg1:=1;

wReg1:=wReg1 shl (j+1);

wReg3:=incendMatr[i] and wReg1;

if((wReg2 > 0)and(wReg3=0)) then

Form1.StringGrid2.Cells[cnt, i]:='-1';

if((wReg2=0)and(wReg3>0)) then

Form1.StringGrid2.Cells[cnt, i]:='+1';

if((wReg2=0)and(wReg3=0)) then

Form1.StringGrid2.Cells[cnt, i]:='0';

inc(cnt);

j:=j+2;

end;

j:=0;

cnt:=0;

end;

end;

end.

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


Защитный код
Обновить

По темам:

История Украины

Культурология

Высшая математика

Информатика

Охотоведение

Статистика

География

Военная наука

Английский язык

Генетика

Разное

Технологиеские темы

Украинский язык

Филология

Философия

Химия

Экология

Социология

Физическое воспитание

Растениевосдство

Педагогика

История

Психология

Религиоведение

Плодоводство

Экономические темы

Бухгалтерские темы

Маркетинг

Иностранные языки

Ветеринарная медицина

Технические темы

Землеустройство

Медицинские темы

Творчество

Лесное и парковое хозяйство