Упорядочить массив по убыванию, удалив нули со сдвигом влево ненулевых элементов

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

code: #delphi
  1. var
  2.   Form1: TForm1;
  3.   n:integer;
  4. implementation
  5. {$R *.DFM}
  6. procedure TForm1.FormCreate(Sender: TObject);
  7. begin
  8.   //Свойства таблицы
  9.   StringGrid1.RowCount:=1;
  10.   StringGrid1.FixedRows:=0;
  11.   StringGrid1.FixedRows:=0;
  12.   StringGrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,
  13.                         goRangeSelect,goEditing,goTabs,goAlwaysShowEditor];
  14. end;
  15. procedure TForm1.Button1Click(Sender: TObject);
  16. begin
  17.   n:=StrToInt(Edit3.Text); //Размер массива
  18.   StringGrid1.ColCount:=n;
  19. end;
  20. procedure TForm1.Button2Click(Sender: TObject);
  21. var
  22.   h:array[1..100] of Integer;
  23.   i,k:Integer;
  24.   changed:Boolean;
  25.   buf:Integer;
  26. begin
  27.   k:=0;
  28.   for i:=1 to n do
  29.   begin
  30.     if (StrToInt(StringGrid1.Cells[i-1,0])<StrToInt(Edit1.Text))
  31.     or (StrToInt(StringGrid1.Cells[i-1,0])>StrToInt(Edit2.Text))
  32.     then
  33.     begin
  34.       MessageBox(Handle,PChar('Значение '+IntToStr(i)+'-го элемента массива не входит в диапазон '+Edit1.Text+'..'+Edit2.Text),'Ошибка!',MB_ICONERROR);
  35.       Exit;
  36.     end;
  37.     //Нулевые элементы удаляем
  38.     if StringGrid1.Cells[i-1,0]<>'0' then
  39.     begin
  40.       inc(k);
  41.       h[k]:=StrToInt(StringGrid1.Cells[i-1,0]);
  42.     end;
  43.   end;
  44.   //Сортировка методом обмена
  45.   repeat
  46.     changed:=False;
  47.     for i:=1 to k-1 do
  48.     if h[i][i+1] then
  49.     begin
  50.       buf:=h[i];
  51.       h[i]:=h[i+1];
  52.       h[i+1]:=buf;
  53.       changed:=True;
  54.     end;
  55.   until not changed;
  56.   StringGrid1.ColCount:=k;
  57.   //Вывод отсортированного массива в таблицу
  58.   for i:=1 to k do StringGrid1.Cells[i-1,0]:=IntToStr(h[i]);
  59. end;
Поделиться:

Похожие статьи: