Приложение А (продолжение)





Приложение А (продолжение)


Приложение Б

Листинг программы

 

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.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-10-17 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: