Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit MainUnit;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls,
- Vcl.Samples.Spin, Vcl.Menus, Vcl.Buttons, System.Generics.Collections, System.RegularExpressions;
- type
- TMatrix = array of array of Byte;
- TMainForm = class(TForm)
- MatrixGrid: TStringGrid;
- OrderSpinEdit: TSpinEdit;
- Label1: TLabel;
- MainMenu1: TMainMenu;
- About1: TMenuItem;
- File1: TMenuItem;
- Open1: TMenuItem;
- Save1: TMenuItem;
- Label2: TLabel;
- ListMemo: TMemo;
- ConvertBtn: TBitBtn;
- Label3: TLabel;
- OpenDialog: TOpenDialog;
- SaveDialog: TSaveDialog;
- procedure SetSize(Size: Byte);
- procedure OrderSpinEditChange(Sender: TObject);
- procedure GetMatrixFromGrid(var Matrix: TMatrix);
- procedure FormCreate(Sender: TObject);
- procedure ConvertBtnClick(Sender: TObject);
- procedure ConvertToInciedenceList(Matrix: TMatrix);
- procedure MatrixGridSetEditText(Sender: TObject; ACol, ARow: Integer;
- const Value: string);
- function CheckFile(): Boolean;
- procedure Open1Click(Sender: TObject);
- procedure Save1Click(Sender: TObject);
- procedure About1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- MainForm: TMainForm;
- implementation
- {$R *.dfm}
- procedure TMainForm.ConvertBtnClick(Sender: TObject);
- var
- Matrix: TMatrix;
- Order: Byte;
- IsCorrect: Boolean;
- begin
- IsCorrect := True;
- Order := StrToInt(OrderSpinEdit.Text);
- SetLength(Matrix, Order, Order);
- try
- GetMatrixFromGrid(Matrix);
- except
- MessageDlg('Enter all values into the matrix!', mtError, [mbOK], 0);
- IsCorrect := False;
- end;
- if isCorrect then
- begin
- ListMemo.Clear;
- ConvertToInciedenceList(Matrix);
- end;
- end;
- procedure TMainForm.ConvertToInciedenceList(Matrix: TMatrix);
- var
- I, J: Byte;
- begin
- for I := 0 to High(Matrix) do
- begin
- ListMemo.Lines.Add(IntTostr(I) + ': ');
- for J := 0 to High(Matrix) do
- begin
- if Matrix[I][J] = 1 then
- begin
- ListMemo.Lines[I] := ListMemo.Lines[I] + IntToStr(J) + ' ';
- end;
- end;
- end;
- end;
- procedure TMainForm.GetMatrixFromGrid(var Matrix: TMatrix);
- var
- I, J: Byte;
- begin
- for I := 0 to High(Matrix) do
- for J := 0 to High(Matrix) do
- Matrix[I][J] := StrToInt(MatrixGrid.Cells[J + 1 , I + 1]);
- end;
- procedure TMainForm.FormCreate(Sender: TObject);
- begin
- OrderSpinEdit.Text := IntToStr(5);
- end;
- procedure TMainForm.MatrixGridSetEditText(Sender: TObject; ACol, ARow: Integer;
- const Value: string);
- begin
- if not TRegEx.IsMatch(Value, '^([01]{1})$') then
- MatrixGrid.Cells[ACol, ARow] := TRegEx.Match(Value, '^([01]{1})').Value;
- end;
- procedure TMainForm.Open1Click(Sender: TObject);
- var
- I, J: Integer;
- InputFile: TextFile;
- IsCorrect: Boolean;
- Buff: Integer;
- begin
- IsCorrect := CheckFile();
- if IsCorrect then
- begin
- AssignFile(InputFile,OpenDialog.FileName);
- Reset(InputFile);
- Readln(InputFile);
- for I := 1 to MatrixGrid.ColCount - 1 do
- begin
- for J := 1 to MatrixGrid.ColCount - 1 do
- begin
- Read(InputFile, Buff);
- MatrixGrid.Cells[J, I] := IntToStr(Buff);
- end;
- Readln(InputFile);
- end;
- CloseFile(InputFile);
- end;
- end;
- procedure TMainForm.OrderSpinEditChange(Sender: TObject);
- begin
- SetSize(StrToInt(OrderSpinEdit.Text) + 1);
- ListMemo.Clear;
- end;
- procedure TMainForm.Save1Click(Sender: TObject);
- var
- OutputFile: TextFile;
- begin
- if SaveDialog.Execute then
- begin
- AssignFile(OutputFile, SaveDialog.FileName);
- Rewrite(OutputFile);
- Write(OutputFile, ListMemo.Text);
- CloseFile(OutputFile);
- end
- end;
- procedure TMainForm.SetSize(Size: Byte);
- var
- I: Byte;
- begin
- MatrixGrid.ColCount := Size;
- MatrixGrid.RowCount := Size;
- for I := 0 to Size - 1 do
- begin
- MatrixGrid.Rows[I].Clear;
- MatrixGrid.Cols[I].Clear;
- end;
- for I := 0 to Size - 1 do
- begin
- MatrixGrid.Cells[0, I + 1] := IntToStr(I);
- end;
- for I := 0 to Size - 1 do
- begin
- MatrixGrid.Cells[I + 1, 0] := IntToStr(I);
- end;
- end;
- procedure TMainForm.About1Click(Sender: TObject);
- const
- TASK = 'The program translates the adjacency matrix to the incidence list' + #13#10 +
- 'Only 1 or 0 matrix values are allowed. Maximum matrix size: 5';
- begin
- MessageDlg(TASK, mtInformation, [mbOK], 0);
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement