Приложение А (продолжение)
Приложение Б
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
gbRazmer: TGroupBox;
lbN: TLabel;
lbM: TLabel;
edN: TEdit;
edM: TEdit;
buRazmer: TButton;
gbMatrix1: TGroupBox;
sgMatrix1: TStringGrid;
buRandom: TButton;
gbMatr2: TGroupBox;
sgMatrix2: TStringGrid;
buPerest: TButton;
gbOsob: TGroupBox;
buOsob: TButton;
lbOsob1: TLabel;
lbOsob2: TLabel;
buZapoln: TButton;
sgMatrix3: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure buRazmerClick(Sender: TObject);
procedure buRandomClick(Sender: TObject);
procedure buPerestClick(Sender: TObject);
procedure buOsobClick(Sender: TObject);
procedure buZapolnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
n,m: integer;
matr1, matr2, matr3: array [1..20, 1..20] of integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize; // включить генератор случайных чисел
end;
procedure TForm1.buRazmerClick(Sender: TObject);
var i: integer;
begin
// установить размер матрицы
n:= StrToInt(edN.Text);
m:= StrToInt(edM.Text);
// визуальное отображение
sgMatrix1.RowCount:= n+1;
sgMatrix1.ColCount:= m+1;
for i:= 1 to n do
sgMatrix1.Cells[0, i]:= IntToStr(i);
for i:= 1 to m do
sgMatrix1.Cells[i, 0]:= IntToStr(i);
sgMatrix2.RowCount:= n+1;
sgMatrix2.ColCount:= m+1;
for i:= 1 to n do
sgMatrix2.Cells[0, i]:= IntToStr(i);
for i:= 1 to m do
sgMatrix2.Cells[i, 0]:= IntToStr(i);
sgMatrix3.RowCount:= n+1;
sgMatrix3.ColCount:= m+1;
for i:= 1 to n do
sgMatrix3.Cells[0, i]:= IntToStr(i);
for i:= 1 to m do
sgMatrix3.Cells[i, 0]:= IntToStr(i);
end;
procedure TForm1.buRandomClick(Sender: TObject);
var i, j: integer;
begin
for i:= 1 to n do
for j:= 1 to m do
begin
matr1[i, j]:= random(11);
sgMatrix1.Cells[j, i]:= IntToStr(matr1[i, j]);
end;
end;
procedure TForm1.buZapolnClick(Sender: TObject);
var i, j: integer;
begin
for i:= 1 to n do
for j:= 1 to m do
begin
matr1[i, j]:= StrToInt(sgMatrix1.Cells[j, i]);
end;
end;
procedure TForm1.buPerestClick(Sender: TObject);
var i, j, k: integer;
begin
// формирование переставленной матрицы
for j:= 1 to (m div 2) do
for i:= 1 to n do
begin
matr2[i, j]:= matr1[i, m-j+1];
matr2[i, m-j+1]:= matr1[i, j];
end;
// проверка если стобцов нечетное число, то средний столбец остается без изменений
if (m mod 2)<>0 then
for i:= 1 to n do
matr2[i, m div 2+1]:= matr1[i, m div 2+1];
// отображение переставленной матрицы
for i:= 1 to n do
for j:= 1 to m do
begin
sgMatrix2.Cells[j, i]:= IntToStr(matr2[i, j]);
end;
end;
procedure TForm1.buOsobClick(Sender: TObject);
var
i, j, l, osob1, osob2, k: integer;
fLev, fPrav: boolean;
begin
// подсчет особых в 1 матрице
osob1:= 0;
for i:= 1 to n do
for j:= 2 to m-1 do
begin
k:= matr1[i, j];
// сравнение слева от текущего элемента (если он не первый)
begin
fLev:= true;
for l:= 1 to j-1 do
if matr1[i, l]>=k then fLev:= false;
end;
// сравнение справа от текущего элемента (если он не последний)
fPrav:= true;
for l:= j+1 to m do
if matr1[i, l]<=k then fPrav:= false;
if fLev and fPrav then osob1:= osob1+1;
end;
lbOsob1.Caption:= 'Число "особых" элементов в матрице1 = '+ IntToStr(osob1);
// подсчет особых вo 2 матрице
osob2:= 0;
for i:= 1 to n do
for j:= 2 to m-1 do
begin
k:= matr2[i, j];
// сравнение слева от текущего элемента (если он не первый)
begin
fLev:= true;
for l:= 1 to j-1 do
if matr2[i, l]>=k then fLev:= false;
end;
// сравнение справа от текущего элемента (если он не последний)
fPrav:= true;
for l:= j+1 to m do
if matr2[i, l]<=k then fPrav:= false;
if fLev and fPrav then osob2:= osob2+1;
end;
lbOsob2.Caption:= 'Число "особых" элементов в матрице2 = '+ IntToStr(osob2);
// формирование отсортированной матрицы
if osob1>= osob1 then
matr3:= matr1
else
matr3:= matr2;
for i:= 1 to n do
for j:= m downto 2 do
for l:= 1 to m-1 do
if matr3[i, l] < matr3[i, l+1] then
begin
k:=matr3[i, l];
matr3[i, l]:=matr3[i, l+1];
matr3[i, l+1]:=k;
end;
// отображение переставленной матрицы
for i:= 1 to n do
for j:= 1 to m do
begin
sgMatrix3.Cells[j, i]:= IntToStr(matr3[i, j]);
end;
end;
end.