
Вопрос задан 11.03.2021 в 14:57.
Предмет Информатика.
Спрашивает Пак Сергей.
[Delphi - Form] - 99 Определить является ли целочисленная матрица симметричной относительно
вертикальной оси. При отсутствии симметрии заменить элементы на минимальный из них.

Ответы на вопрос

Отвечает Трусова Александра.
Unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
N:byte;
A:array[1..256,1..256] of shortint;
implementation
{$R *.dfm}
Function S4(A:shortint):String;
Begin
result:=IntToStr(A);
For A:= 1 to 4-Length(result) do
result:=' '+result;
End;
procedure TForm1.Button1Click(Sender: TObject);
Var
i,j:byte;
S:string;
begin
Randomize;
N:=StrToInt(Edit1.Text);
ListBox1.Clear;
For i:= 1 to N do
Begin
S:='';
For j:= 1 to N do
Begin
A[i,j]:=random(256)-128;
S:=S+S4(A[i,j])+' '
End;
ListBox1.Items.Add(S)
End;
end;
procedure TForm1.Button2Click(Sender: TObject);
Var
M,i,j,iMin,jMin:byte;
B:boolean;
S:string;
begin
M:=N div 2;
B:=true;
For i:= 1 to N do
For j:= 1 to M do
if A[i,j] <> A[i,N-j+1] then B:=false;
if Not B then
Begin
iMin:=1;
jMin:=1;
For i:= 1 to N do
For j:= 1 to N do
if A[i,j] < A[iMin,jMin] then
Begin
iMin:=i;
jMin:=j;
End;
ListBox1.Clear;
For i:= 1 to N do
Begin
S:='';
For j:= 1 to N do
Begin
A[i,j]:=A[iMin,jMin];
S:=S+S4(A[i,j])+' '
End;
ListBox1.Items.Add(S)
End;
End
end;
end.
Для красивого вывода матрицы на форме стоит моноширинный шрифт Courier New(Шрифт можно изменить так: выбрать объект(например, ListBox1), далее найти свойство Font → Name, и изменить шрифт на нужный). Размер шрифта на Label1 = 13(Label1.Size = 13).
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
N:byte;
A:array[1..256,1..256] of shortint;
implementation
{$R *.dfm}
Function S4(A:shortint):String;
Begin
result:=IntToStr(A);
For A:= 1 to 4-Length(result) do
result:=' '+result;
End;
procedure TForm1.Button1Click(Sender: TObject);
Var
i,j:byte;
S:string;
begin
Randomize;
N:=StrToInt(Edit1.Text);
ListBox1.Clear;
For i:= 1 to N do
Begin
S:='';
For j:= 1 to N do
Begin
A[i,j]:=random(256)-128;
S:=S+S4(A[i,j])+' '
End;
ListBox1.Items.Add(S)
End;
end;
procedure TForm1.Button2Click(Sender: TObject);
Var
M,i,j,iMin,jMin:byte;
B:boolean;
S:string;
begin
M:=N div 2;
B:=true;
For i:= 1 to N do
For j:= 1 to M do
if A[i,j] <> A[i,N-j+1] then B:=false;
if Not B then
Begin
iMin:=1;
jMin:=1;
For i:= 1 to N do
For j:= 1 to N do
if A[i,j] < A[iMin,jMin] then
Begin
iMin:=i;
jMin:=j;
End;
ListBox1.Clear;
For i:= 1 to N do
Begin
S:='';
For j:= 1 to N do
Begin
A[i,j]:=A[iMin,jMin];
S:=S+S4(A[i,j])+' '
End;
ListBox1.Items.Add(S)
End;
End
end;
end.
Для красивого вывода матрицы на форме стоит моноширинный шрифт Courier New(Шрифт можно изменить так: выбрать объект(например, ListBox1), далее найти свойство Font → Name, и изменить шрифт на нужный). Размер шрифта на Label1 = 13(Label1.Size = 13).




Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Вот пример кода на языке Delphi, который выполняет задачу определения симметричности матрицы относительно вертикальной оси и заменяет элементы, если симметрия отсутствует:
delphiprocedure CheckAndReplaceMatrix(var matrix: array of array of Integer); var numRows, numCols, i, j: Integer; symmetric: Boolean; minValue: Integer; begin numRows := Length(matrix); numCols := Length(matrix[0]); symmetric := True; // Проверяем симметричность матрицы for i := 0 to numRows - 1 do begin for j := 0 to numCols - 1 do begin if matrix[i][j] <> matrix[i][numCols - j - 1] then begin symmetric := False; Break; end; end; if not symmetric then Break; end; // Если матрица не симметрична, заменяем элементы на минимальный из них if not symmetric then begin minValue := matrix[0][0]; for i := 0 to numRows - 1 do begin for j := 0 to numCols - 1 do begin if matrix[i][j] < minValue then minValue := matrix[i][j]; end; end; for i := 0 to numRows - 1 do begin for j := 0 to numCols - 1 do begin matrix[i][j] := minValue; end; end; end; end;
Вы можете вызвать эту процедуру, передав в неё вашу целочисленную матрицу (представленную в виде двумерного массива), и она проверит, является ли матрица симметричной относительно вертикальной оси. Если симметрия отсутствует, элементы матрицы будут заменены на минимальное значение.


Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili