Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids, Vcl.Menus;
- type
- TMainForm = class(TForm)
- PopupMenu1: TPopupMenu;
- MainMenu1: TMainMenu;
- OpenDialog1: TOpenDialog;
- SaveDialog1: TSaveDialog;
- N1: TMenuItem;
- N2: TMenuItem;
- AboutProgram: TMenuItem;
- AboutMe: TMenuItem;
- OpenFileMenu: TMenuItem;
- SaveFileMenu: TMenuItem;
- N7: TMenuItem;
- CloseFormMenu: TMenuItem;
- MatrixOnForm: TStringGrid;
- Label1: TLabel;
- Label2: TLabel;
- MatrixSize: TEdit;
- ResultButton: TButton;
- ResultLabel: TEdit;
- Label3: TLabel;
- procedure CloseFormMenuClick(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- procedure AboutMeClick(Sender: TObject);
- procedure AboutProgramClick(Sender: TObject);
- procedure OpenFileMenuClick(Sender: TObject);
- procedure SaveFileMenuClick(Sender: TObject);
- procedure MatrixSizeKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure MatrixSizeKeyPress(Sender: TObject; var Key: Char);
- procedure MatrixOnFormKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure MatrixOnFormKeyPress(Sender: TObject; var Key: Char);
- procedure MatrixSizeChange(Sender: TObject);
- procedure MatrixOnFormClick(Sender: TObject);
- procedure ResultButtonClick(Sender: TObject);
- procedure ResultLabelChange(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- MainForm: TMainForm;
- type
- TMatrix = array of array of Integer;
- implementation
- {$R *.dfm}
- function FileExtensionChek(var NameOfFile: String): Boolean;
- var
- Extension: String;
- i, j: Integer;
- begin
- if(pos('.',NameOfFile) = 0)then
- begin
- ShowMessage('Так как во введённом имени файла не указано расширение, автоматически присвоено расширение ".txt".');
- NameOfFile := NameOfFile + '.txt';
- FileExtensionChek := True;
- end
- else
- begin
- Extension := '';
- j := length(NameOfFile);
- for i := pos('.',NameOfFile) to j do
- Extension := Extension + NameOfFile[i];
- if (Extension <> '.txt') and (Extension <> '.doc') and (Extension <> '.text') then
- begin
- ShowMessage('Внимание, произошла ошибка! Файл с данным расширением не может быть использован. Программа поддерживает расширения : ".txt", ".doc", ".text".');
- FileExtensionChek := False;
- end
- else
- FileExtensionChek := True;
- end;
- end;
- procedure TMainForm.AboutMeClick(Sender: TObject);
- begin
- Application.MessageBox('Данная программа разработана студентом группы 951007 Королёнком К.А.', 'Справка', MB_OK + MB_ICONINFORMATION)
- end;
- procedure TMainForm.AboutProgramClick(Sender: TObject);
- begin
- Application.MessageBox('Данная программа находит определитель матрицы.', 'Справка', MB_OK + MB_ICONINFORMATION)
- end;
- procedure TMainForm.CloseFormMenuClick(Sender: TObject);
- begin
- Close;
- end;
- procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- begin
- case Application.MessageBox('Вы уверены, что хотите выйти из программы?', 'Выход', MB_YESNO) of ID_YES: ;
- else
- CanClose := False;
- end;
- end;
- procedure TMainForm.MatrixOnFormClick(Sender: TObject);
- var
- NCol, NRow: Integer;
- Correct: Boolean;
- begin
- ResultLabel.Text := '';
- Correct := True;
- if MatrixSize.Text = '' then
- Correct := False;
- if Correct then
- begin
- if (StrToInt(MatrixSize.Text) < 21) and (StrToInt(MatrixSize.Text) > 1) then
- begin
- MatrixOnForm.ColCount := StrToInt(MatrixSize.Text);
- MatrixOnForm.RowCount := StrToInt(MatrixSize.Text);
- MatrixOnForm.EditorMode := True;
- MatrixOnForm.Options:= MatrixOnForm.Options + [goEditing] + [goTabs];
- end
- else
- Application.MessageBox('Ошибка! Указан недопустимый размер матрицы.','Ошибка', MB_OK + MB_ICONSTOP);
- end
- else
- Application.MessageBox('Ошибка! Не указан размер матрицы.','Ошибка', MB_OK + MB_ICONSTOP);
- end;
- procedure TMainForm.MatrixOnFormKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if (Key = VK_INSERT) then Key:= 0;
- end;
- procedure TMainForm.MatrixOnFormKeyPress(Sender: TObject; var Key: Char);
- begin
- if not (Key in ['0'..'9', #8])then Key := #0;
- end;
- procedure TMainForm.MatrixSizeChange(Sender: TObject);
- var
- i: Integer;
- begin
- if (Sender as TEdit).Text <> '' then
- ResultButton.Enabled := True
- else
- ResultButton.Enabled := False;
- with MatrixOnForm do
- for i := 0 to MatrixOnForm.RowCount do
- begin
- Rows[i].Clear;
- MatrixOnForm.RowCount := 2;
- MatrixOnForm.ColCount := 2;
- end;
- ResultLabel.Text := '';
- end;
- procedure TMainForm.MatrixSizeKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if (Key = VK_INSERT) then Key:= 0;
- end;
- procedure TMainForm.MatrixSizeKeyPress(Sender: TObject; var Key: Char);
- begin
- if not (Key in ['0'..'9', #8])then Key := #0;
- end;
- procedure TMainForm.OpenFileMenuClick(Sender: TObject);
- var
- FileF: TextFile;
- FileData, FileName: String;
- IsInvalidInput: Boolean;
- NCol, NRow: Integer;
- begin
- with MatrixOnForm do
- for NRow := 0 to MatrixOnForm.RowCount do
- begin
- Rows[NRow].Clear;
- MatrixOnForm.RowCount := 2;
- MatrixOnForm.ColCount := 2;
- end;
- ResultLabel.Text := '';
- MatrixSize.Text := '';
- if OpenDialog1.Execute then
- begin
- FileName := OpenDialog1.FileName;
- IsInvalidInput := True;
- IsInvalidInput := FileExtensionChek(FileName);
- if FileExists(FileName) and IsInvalidInput then
- begin
- AssignFile(FileF, FileName);
- Reset(FileF);
- if EoF(FileF) then
- Application.MessageBox('Ошибка! Данный файл является пустым.','Ошибка', MB_OK + MB_ICONSTOP)
- else
- begin
- Readln(FileF, FileData);
- MatrixSize.Text := FileData;
- if (StrToInt(MatrixSize.Text) < 21) and (StrToInt(MatrixSize.Text) > 1) then
- begin
- MatrixOnForm.ColCount := StrToInt(MatrixSize.Text);
- MatrixOnForm.RowCount := StrToInt(MatrixSize.Text);
- MatrixOnForm.EditorMode := True;
- MatrixOnForm.Options:= MatrixOnForm.Options + [goEditing] + [goTabs];
- end
- else
- Application.MessageBox('Ошибка! Указана недопустимый размер матрицы.','Ошибка', MB_OK + MB_ICONSTOP);
- for NCol := 0 to MatrixOnForm.ColCount do
- for NRow := 0 to MatrixOnForm.ColCount do
- begin
- ReadLn(FileF, FileData);
- MatrixOnForm.Cells[NRow, NCol] := FileData;
- end;
- end;
- CloseFile(FileF);
- end
- else if IsInvalidInput then
- Application.MessageBox('Ошибка! Данный файл не найден.','Ошибка', MB_OK + MB_ICONSTOP);
- end;
- end;
- function MatrixWithoutRowAndCol(Matrix: TMatrix; Row, Col: Integer): TMatrix;
- var
- OffRow, OffCol: Integer;
- Size: Integer;
- i, j: Integer;
- NewMatrix: TMatrix;
- begin
- OffRow := 0;
- OffCol := 0;
- Size := Length(Matrix) - 1;
- SetLength(NewMatrix, Size, Size);
- for i := 0 to Size - 1 do
- begin
- if(i = Row) then
- OffRow := 1;
- OffCol := 0;
- for j := 0 to Size - 1 do
- begin
- if(j = Col) then
- OffCol := 1;
- NewMatrix[i][j] := Matrix[i + OffRow][j + OffCol];
- end;
- end;
- MatrixWithoutRowAndCol := NewMatrix;
- end;
- function MatrixDet(Matrix: TMatrix): Integer;
- var
- Det: Integer;
- Degree: Integer;
- Size: Integer;
- i, j: Integer;
- NewMatrix: TMatrix;
- begin
- Det := 0;
- Degree := 1;
- Size := Length(Matrix);
- if (Size = 2) then
- Det := Matrix[0][0]*Matrix[1][1] - Matrix[1][0]*Matrix[0][1]
- else
- begin
- SetLength(NewMatrix, Size - 1, Size - 1);
- for i := 0 to High(Matrix) do
- begin
- for j := 0 to High(Matrix) do
- begin
- NewMatrix := MatrixWithoutRowAndCol(Matrix, 0, j);
- Det := Det + Degree * (Matrix[0][j] * MatrixDet(NewMatrix));
- Degree := (-1) * Degree;
- end;
- end;
- end;
- MatrixDet := Det;
- end;
- procedure TMainForm.ResultButtonClick(Sender: TObject);
- var
- Matrix: TMatrix;
- IsCorrect: Boolean;
- j, i: Integer;
- Det: Integer;
- begin
- IsCorrect := True;
- for i := 0 to MatrixOnForm.RowCount - 1 do
- for j := 0 to MatrixOnForm.ColCount - 1 do
- if (MatrixOnForm.Cells[i, j] = '') then
- IsCorrect := False;
- if (IsCorrect = False) then
- Application.MessageBox('Ошибка! Есть пустые окна!','Ошибка', MB_OK + MB_ICONSTOP)
- else
- begin
- SetLength(Matrix, StrToInt(MatrixSize.Text), StrToInt(MatrixSize.Text));
- for i := 0 to MatrixOnForm.RowCount - 1 do
- for j := 0 to MatrixOnForm.ColCount - 1 do
- Matrix[i, j] := StrToInt(MatrixOnForm.Cells[j, i]);
- Det := MatrixDet(Matrix);
- ResultLabel.Text := IntToStr(Det);
- end;
- end;
- procedure TMainForm.ResultLabelChange(Sender: TObject);
- begin
- if (ResultLabel.Text <> '') then
- SaveFileMenu.Enabled := True
- else
- SaveFileMenu.Enabled := False
- end;
- procedure TMainForm.SaveFileMenuClick(Sender: TObject);
- var
- FileF: TextFile;
- FileName: String;
- IsInvalidInput: Boolean;
- begin
- if SaveDialog1.Execute then
- begin
- FileName := SaveDialog1.FileName;
- IsInvalidInput := True;
- IsInvalidInput := FileExtensionChek(FileName);
- if FileExists(FileName) and IsInvalidInput then
- begin
- AssignFile(FileF, SaveDialog1.FileName);
- Rewrite(FileF);
- Write(FileF,'Определитель матрицы :');
- Write(FileF, ResultLabel.Text);
- CloseFile(FileF);
- end
- else
- Application.MessageBox('Ошибка! Данный файл не найден.','Ошибка', MB_OK + MB_ICONSTOP);
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement