Дан одномерный массив H(n), заполненными случайными целыми числами от -F до F. Упорядочить массив по убыванию, удалив нули со сдвигом влево ненулевых элементов — Delphi(Делфи)

var
  Form1: TForm1;
  n:integer;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
  //Свойства таблицы
  StringGrid1.RowCount:=1;
  StringGrid1.FixedRows:=0;
  StringGrid1.FixedRows:=0;
  StringGrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,
                        goRangeSelect,goEditing,goTabs,goAlwaysShowEditor];
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  n:=StrToInt(Edit3.Text); //Размер массива
  StringGrid1.ColCount:=n;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
  h:array[1..100] of Integer;
  i,k:Integer;
  changed:Boolean;
  buf:Integer;
begin
  k:=0;
  for i:=1 to n do
  begin
    if (StrToInt(StringGrid1.Cells[i-1,0])<StrToInt(Edit1.Text))
    or (StrToInt(StringGrid1.Cells[i-1,0])>StrToInt(Edit2.Text))
    then
    begin
      MessageBox(Handle,PChar('Значение '+IntToStr(i)+'-го элемента массива не входит в диапазон '+Edit1.Text+'..'+Edit2.Text),'Ошибка!',MB_ICONERROR);
      Exit;
    end;
    //Нулевые элементы удаляем
    if StringGrid1.Cells[i-1,0]<>'0' then
    begin
      inc(k);
      h[k]:=StrToInt(StringGrid1.Cells[i-1,0]);
    end;
  end;
  //Сортировка методом обмена
  repeat
    changed:=False;
    for i:=1 to k-1 do
    if h[i][i+1] then
    begin
      buf:=h[i];
      h[i]:=h[i+1];
      h[i+1]:=buf;
      changed:=True;
    end;
  until not changed;
  StringGrid1.ColCount:=k;
  //Вывод отсортированного массива в таблицу
  for i:=1 to k do StringGrid1.Cells[i-1,0]:=IntToStr(h[i]);
end;

Leave a Comment

+ 7 = 9