|
#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; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |