holysh писал(а):добавлю цельІй код:
Если бы я сказал, что с этого следовало начинать, это была бы неправда, потому что начинать следовало бы с текста задания, к которому приложен текущий проект, чтобы помогальщикам, если таковые найдутся не нужно было рассовывать кнопочки по формочкам.
Что же мы видим: имеется статический массив
А[1..100], который заполняется частично, начиная с
нулевого индекса, но сортируется всегда целиком. Если в параметрах проекта включить проверку диапазона, это даже не скомпилируется.
Предлагаю заменить статический массив динамическим, ну и сортировки лучше вынести в отдельные процедуры, принимающие открытый массив, тогда не нужен будет Generics.Collections.
- Код: Выделить всё
var
Form1: TForm1;
A: array of Integer;
procedure Sort(var a: array of Integer);
procedure SortDesc(var a: array of Integer);
implementation
{$R *.lfm}
{ TForm1 }
procedure Sort(var a: array of Integer);
var
i, j, temp: Integer;
begin
// Сортировка массива A по росту
for i := 0 to High(a)-1 do
for j := i + 1 to High(a) do
if a[i] > a[j] then
begin
temp := a[i];
a[i] := a[j];
a[j] := temp;
end;
end;
procedure SortDesc(var a: array of Integer);
var
i, j, temp: Integer;
begin
// Сортировка массива А по убьІванию
for i := 0 to High(a)-1 do
for j := i + 1 to High(a) do
if a[i] < a[j] then
begin
temp := a[i];
a[i] := a[j];
a[j] := temp;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
begin
Sort(A);
// ВьІвод отсортированного массива A в ListBox2
ListBox2.Clear;
for i := 0 to High(A) do
ListBox2.Items.Add(IntToStr(A[i]));
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i: Integer;
begin
SortDesc(A);
// ВьІвод отсортированного массива А в ListBox2
ListBox2.Clear;
for i := 0 to High(A) do
ListBox2.Items.Add(IntToStr(A[i]));
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i, half: Integer;
begin
if Length(A) > 1 then
begin
half := Length(A) div 2;
Sort(A[0..half-1]);
SortDesc(A[half..High(A)]);
ListBox2.Clear;
for i := 0 to High(A) do
ListBox2.Items.Add(A[i].ToString);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, count: Integer;
begin
// Получение кол-ва чисел с Edit1
count := StrToIntDef(Edit1.Text, 0);
// Проверка на допустимость кол-ва чисел
if (count > 0) and (count <= 100) then
begin
SetLength(A, count);
// Заполнение массива A ограниченньІм кол-вом чисел
for i := 0 to High(A) do
begin
if i mod 2 = 0 then
A[i] := Random(101) // положительньІе числа для парньІх позиций
else
A[i] := -Random(101); // отрицательньІе числа для непарньІх позиций
end;
// ВьІвод ограниченного массива A в ListBox1
ListBox1.Clear;
for i := 0 to High(A) do
ListBox1.Items.Add(IntToStr(A[i]));
end
else
ShowMessage('Введите значение количества (от 1 до 100).');
end;
end.
Как-то так, при условии, что я правильно понял задание.