Поясните, что к чему, что значат все строчки, только простыми словами, подробно
{$R *.dfm}
//разрешить ввод в Edit1 только цифр, первая не 0
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (not (key in ['0'..'9'])) //несоответствие алфавиту вещественных чисел
or((Edit1.Text='')and(key='0')) then Key:=#0; //подмена недопустимого символа пустым значением
end;
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
randomize;
n:=StrToInt(Edit1.Text);
setlength(m,n);//выделим память под массив
Edit2.Text:='';
for i:=0 to n-1 do //Заполнить массив случайными числами
Begin
m:=random(10);
Edit2.Text:=Edit2.Text+' '+IntToStr(m); //вывести элементы массива
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j,k,d,x:integer;
begin
//сортировка шейкером
d:=1; i:=-1;
for k:=n-1 downto 0 do //k - количество сравниваемых пар
begin
i:=i+d;
for j:=0 to k-1 do
begin
if ((RadioGroup1.ItemIndex=0) and ((m-m[i+d])*d<0))//(по убыванию)
or ((RadioGroup1.ItemIndex=1) and ((m-m[i+d])*d>0))// (по возрастанию)
then
//меняем местами соседние элементы
begin
x:=m;
m:=m[i+d];
m[i+d]:=x;
end;
i:=i+d;
end;
d:=-d; //меняем направление движения на противоположное
Edit3.Clear;
for j:=0 to n-1 do //вывести отсортированный массив
Edit3.Text:=Edit3.Text+' '+IntToStr(m[j]);
sleep(1000);//задержка для прсмотра
Application.ProcessMessages; //чтобы было видно
end;
Label3.Caption:='Сортировка закончена';
end;
end.