![]() |
|
|
|
|
#1
|
|||
|
|||
|
Дополните программу пожалуйста, нужно вывести отсортированный массив из массива2 (удалить повторяющиеся элементы(оставить по 1), и отсортировать полученный массив в порядке возрастания)+ желательно комментарии к программе(что бы попытаться разобраться).
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a:array[1..15,1..15] of integer;
n,m:integer;
implementation
{$R *.dfm}
//кнопка создания матрицы
procedure TForm1.Button1Click(Sender: TObject);
var k:integer;
begin
val(Edit1.Text,n,k);
//размеры таблицы 1
n:=2*n+1;
StringGrid1.RowCount:=n; //количество строк таблицы 1
StringGrid1.ColCount:=n; //количество столбцов таблицы 1
m:=4*(n-1)+1;
StringGrid2.ColCount:=m; //количество столбцов таблицы 2
StringGrid1.Options:=StringGrid1.Options+[goEditing,goTabs];//разрешим редактирование ячеек
ShowMessage('Введите в таблицу 1 элементы матрицы, целые числа ');
end;
//кнопка для формирование нового массива
procedure TForm1.Button2Click(Sender: TObject);
var i,j,k:integer;
begin
for i:=1 to n do
for j:=1 to n do
begin
val(StringGrid1.Cells[j-1,i-1],a[i,j],k);
if k<>0 then ShowMessage('В ячейке ['+inttostr(i)+','+inttostr(j)+'] неверно введено число, поправьте'); //защита
end;
for i:=1 to n-1 do
begin
StringGrid2.Cells[i-1,0]:=inttostr(a[1,i]); //первая строка
StringGrid2.Cells[n+i-2,0]:=inttostr(a[i,n]); //последний столбец
StringGrid2.Cells[2*n+i-3,0]:=inttostr(a[n,n-i+1]); //последняя строка с конца
StringGrid2.Cells[3*n+i-4,0]:=inttostr(a[n-i+1,1]);//первый столбец снизу-вверх
end;
StringGrid2.Cells[m-1,0]:=inttostr(a[n div 2+1,n div 2+1]); //центральный элемент
end;
end. |
|
#2
|
||||
|
||||
|
Чтоб "(удалить повторяющиеся элементы(оставить по 1) " нужны дополнительные данные на массив и массив2, их размерность, а вот с упорядочиванием одномерного массива намного проще
Код:
type
TArr = array of integer;
procedure tpm(var a : TArr);
var
i,j,t : integer;
begin
{сортировка массива методом простых обменов ("пузырька") }
for i:= 0 to Length(a)-1 do
for j:=i+1 to Length(a)-1 do
if a[i] <= a[j] then
begin
t := a[i];
a[i] := a[j];
a[j] := t;
end;
end;Код:
procedure TForm1.Button2Click(Sender: TObject);
var
i,j,b: integer;
a: TArr;
begin
for i := 0 to StringGrid1.ColCount-1 do
begin
SetLength(a,StringGrid1.ColCount);
for j := 0 to StringGrid1.RowCount-1 do
a[j]:= StrToInt(StringGrid1.Cells[i,j]);
tpm(a);
for b := 0 to Length(a) do
StringGrid2.Cells[i, b]:= IntToStr(a[b]);
end;
end; |