Упорядочить массив по убыванию, удалив нули со сдвигом влево ненулевых элементов
Категория: Delphi/Pascal
2011-08-26 20:31:57
Дан одномерный массив H(n), заполненными случайными целыми числами от -F до F. Упорядочить массив по убыванию, удалив нули со сдвигом влево ненулевых элементов
code: #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;
Поделиться: