unit Unit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, XPMan, AppEvnts, IniFiles, Math, Buttons;
type
TMatrix = array of array of Extended;
TForm6 = class(TForm)
ExitButton: TButton;
GridA1: TStringGrid;
FillButton: TButton;
ClearButton: TButton;
GridB1: TStringGrid;
GridC1: TStringGrid;
GridA2: TStringGrid;
GridB2: TStringGrid;
GridC2: TStringGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
SaveButton: TBitBtn;
OpenButton: TBitBtn;
CalcButton: TBitBtn;
XPManifest1: TXPManifest;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
ApplicationEvents1: TApplicationEvents;
procedure FillButtonClick(Sender: TObject);
procedure CalcButtonClick(Sender: TObject);
procedure ClearButtonClick(Sender: TObject);
procedure SaveButtonClick(Sender: TObject);
procedure OpenButtonClick(Sender: TObject);
procedure ExitButtonClick(Sender: TObject);
procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
private
{ Private declarations }
public
procedure Matrix2Grid(const M: TMatrix; Grid: TStringGrid);
procedure ExchangeCols(var M: TMatrix; const N, K: Integer);
procedure ClearGrid(Grid: TStringGrid);
procedure SaveMatrix(const M: TMatrix; const ASection: string; Ini: TIniFile);
procedure LoadMatrix(var M: TMatrix; const ASection: string; Ini: TIniFile);
procedure CopyMatrix(const Source: TMatrix; var Dest: TMatrix);
end;
var
Form6: TForm6;
A1, B1, C1: TMatrix; // Исходные матрицы
A2, B2, C2: TMatrix; // Преобразованные матрицы
implementation
uses Unit1;
{$R *.dfm}
procedure TForm6.FillButtonClick(Sender: TObject);
var
i, j: Integer;
begin
// Вычисляем элементы матриц и заполняем таблицы
SetLength(A1, 12, 9);
for i:= 0 to Length(A1) - 1 do
for j:= 0 to Length(A1[0]) - 1 do
A1[i, j]:= Tan((j + 1)) + Exp(Cos((i + 1)));
Matrix2Grid(A1, GridA1);
SetLength(B1, 8, 15);
for i:= 0 to Length(B1) - 1 do
for j:= 0 to Length(B1[0]) - 1 do
B1[i, j]:= Sin(3.2 * (j + 1) + 4.2) + Exp(Tan(1.5 * (i + 1)));
Matrix2Grid(B1, GridB1);
SetLength(C1, 7, 11);
for i:= 0 to Length(C1) - 1 do
for j:= 0 to Length(C1[0]) - 1 do
C1[i, j]:= Cos(12.4 * (j + 1) + 1);
Matrix2Grid(C1, GridC1);
// Очистка преобразованных данных
ClearGrid(GridA2);
ClearGrid(GridB2);
ClearGrid(GridC2);
SetLength(A2, 0, 0);
SetLength(B2, 0, 0);
SetLength(C2, 0, 0);
end;
procedure TForm6.Matrix2Grid(const M: TMatrix; Grid: TStringGrid);
var
i, j: Integer;
begin
// Заполение таблицы Grid элементами матрицы M
Grid.RowCount:= Length(M);
Grid.ColCount:= Length(M[0]);
for i:= 0 to Length(M) - 1 do
for j:= 0 to Length(M[0]) - 1 do
Grid.Cells[j, i]:= FormatFloat('0.00', M[i, j]);
end;
procedure TForm6.CalcButtonClick(Sender: TObject);
begin
// Перестановка столбцов матриц
CopyMatrix(A1, A2); // Копирование матрицы
ExchangeCols(A2, 0, Length(A2[0]) - 1); // Перестановка столбцов
Matrix2Grid(A2, GridA2); // Вывод в таблицу
CopyMatrix(B1, B2); // Копирование матрицы
ExchangeCols(B2, 2, 4); // Перестановка столбцов
Matrix2Grid(B2, GridB2); // Вывод в таблицу
// Матрица C1 не изменяется, т.к. 1-й и последний столбцы равны
CopyMatrix(C1, C2); // Копирование матрицы
ExchangeCols(C2, 0, Length(C2[0]) - 1); // Перестановка столбцов
Matrix2Grid(C2, GridC2); // Вывод в таблицу
end;
procedure TForm6.ExchangeCols(var M: TMatrix; const N, K: Integer);
var
Temp: Double;
j: Integer;
begin
// Перестановка столбцов N и K матрицы M
for j:= 0 to Length(M) - 1 do
begin
Temp:= M[j, N];
M[j, N]:= M[j, K];
M[j, K]:= Temp;
end;
end;
procedure TForm6.ClearButtonClick(Sender: TObject);
begin
// Очистка всех таблиц
ClearGrid(GridA1);
ClearGrid(GridB1);
ClearGrid(GridC1);
ClearGrid(GridA2);
ClearGrid(GridB2);
ClearGrid(GridC2);
// Очистка матриц
SetLength(A1, 0, 0);
SetLength(B1, 0, 0);
SetLength(C1, 0, 0);
SetLength(A2, 0, 0);
SetLength(B2, 0, 0);
SetLength(C2, 0, 0);
end;
procedure TForm6.ClearGrid(Grid: TStringGrid);
var
i: Integer;
begin
// Очистка таблицы Grid
for i:= 0 to Grid.RowCount - 1 do
Grid.Rows.Clear();
Grid.ColCount:= 0;
Grid.RowCount:= 0;
end;
procedure TForm6.SaveMatrix(const M: TMatrix;
const ASection: string;
Ini: TIniFile);
var
i, j: Integer;
begin
// Сохранение матрицы M в секцию ASection ini-файла Ini
if not Assigned(Ini)
then Exit;
if Ini.SectionExists(ASection)
then Ini.EraseSection(ASection);
// Запись размерности матрицы
Ini.WriteInteger(ASection, 'Строки', Length(M));
Ini.WriteInteger(ASection, 'Столбцы', Length(M[0]));
// Запись элементов матрицы
for i:= 0 to Length(M) - 1 do
for j:= 0 to Length(M[0]) - 1 do
Ini.WriteFloat(ASection, 'Cells[' + IntToStr(i + 1) + ', ' + IntToStr(j + 1) + ']', M[i, j]);
end;
procedure TForm6.LoadMatrix(var M: TMatrix; const ASection: string;
Ini: TIniFile);
var
i, j: Integer;
k, n: Integer; // Размерность матрицы
begin
// Загрузка матрицы M из секции ASection ini-файла Ini
if not Assigned(Ini)
then Exit;
// Чтение размерности и выделение памяти под матрицу
k:= Ini.ReadInteger(ASection, 'Строки', 0);
n:= Ini.ReadInteger(ASection, 'Столбцы', 0);
SetLength(M, k, n);
// Чтение элементов матрицы
for i:= 0 to Length(M) - 1 do
for j:= 0 to Length(M[0]) - 1 do
M[i, j]:= Ini.ReadFloat(ASection, 'Cells[' + IntToStr(i + 1) + ', ' + IntToStr(j + 1) + ']', 0.0);
end;
procedure TForm6.SaveButtonClick(Sender: TObject);
var
Ini: TIniFile;
begin
// Сохранение матриц в файл
if SaveDialog1.Execute()
then begin
Ini:= TIniFile.Create(SaveDialog1.FileName);
try
SaveMatrix(A1, 'Матрица A1', Ini);
SaveMatrix(B1, 'Матрица B1', Ini);
SaveMatrix(C1, 'Матрица C1', Ini);
SaveMatrix(A2, 'Матрица A2', Ini);
SaveMatrix(B2, 'Матрица B2', Ini);
SaveMatrix(C2, 'Матрица C2', Ini);
finally
Ini.Free();
end;
end;
end;
procedure TForm6.OpenButtonClick(Sender: TObject);
var
Ini: TIniFile;
begin
// Загрузка исходных матриц из файла
if OpenDialog1.Execute()
then begin
ClearButton.Click(); // Очистка таблиц и матриц
Ini:= TIniFile.Create(OpenDialog1.FileName);
try
LoadMatrix(A1, 'Матрица A1', Ini);
Matrix2Grid(A1, GridA1);
LoadMatrix(B1, 'Матрица B1', Ini);
Matrix2Grid(B1, GridB1);
LoadMatrix(C1, 'Матрица C1', Ini);
Matrix2Grid(C1, GridC1);
LoadMatrix(A2, 'Матрица A2', Ini);
Matrix2Grid(A2, GridA2);
LoadMatrix(B2, 'Матрица B2', Ini);
Matrix2Grid(B2, GridB2);
LoadMatrix(C2, 'Матрица C2', Ini);
Matrix2Grid(C2, GridC2);
finally
Ini.Free();
end;
end;
end;
procedure TForm6.ExitButtonClick(Sender: TObject);
begin
Close();
Form1.Show;
end;
procedure TForm6.CopyMatrix(const Source: TMatrix; var Dest: TMatrix);
var
k, n: Integer; // Размерность матрицы
i, j: Integer;
begin
// Копирование данных из матрицы Source в матрицу Dest
k:= Length(Source);
if (k <> 0)
then n:= Length(Source[0])
else n:= 0;
SetLength(Dest, k, n); // Установка размеров результата
//Move(Source, Dest, SizeOf(Double) * k * n); // Копирование данных
for i:= 0 to Length(Source) - 1 do
for j:= 0 to Length(Source[0]) - 1 do
Dest[i, j]:= Source[i, j];
end;
procedure TForm6.ApplicationEvents1Idle(Sender: TObject;
var Done: Boolean);
begin
FillButton.Enabled:= (Length(A1) + Length(B1) + Length(C1) = 0);
CalcButton.Enabled:= not FillButton.Enabled;
ClearButton.Enabled:= not FillButton.Enabled;
SaveButton.Enabled:= (not FillButton.Enabled) and (Length(A2) <> 0) and (Length(B2) <> 0) and (Length(C2) <> 0);
end;
end.
блок схема
Огромнейшая просьба... о помощи.. Ребята помогите с блок схемой, хоть какую нибудь... нарисуйте очень прошу... завтра нужно сдавать курсовую... а блок схемы нет... не получается у меня ничего... пожалуйста выручите кто-нибудь... Спасибо)