Помогите отладить программу delphi.

компьютеры программирование программы математика Delphi

Программа должна сортировать массив(его длинна это степень двойки, т.е. 2,4,8,...). Берутся числа стоящие на нечетных местах и ставятся по порядку вначале массива, а затем берутся числа стоящие на четных местах и ставятся по порядку за ними и этот процесс повторяется для образовавшихся частей до тех пор пока не дойдет до частей из двух чисел.
Например, есть массив 0 1 2 3 4 5 6 7, тогда после выполнения программы массив будет иметь вид
0 2 4 6 1 3 5 7.
Далее эта процедура повторяется уже для половинок исходного массива(0 2 4 6 и 1 3 5 7) и массив тогда принимает вид 0 4 2 6 1 5 3 7. Так как в оставшихся половинках(0 4 и 2 6 и 1 5 и 3 7) все на четных и нечетных местаъ то их сортировать не надо и это окончательный ответ.
uses crt;
var position,k,n,m,bufer,point,q,part,d:integer; a: array [0 .. 4096] of integer;
begin

point:=16;

for position:=0 to (point-1) do a[position]:=position;

part:=2;


while round(point/part)>2 do
begin
for q:=0 to round(part/2-1) do
begin
position:=2+q*part;k:=1;
for n:=1 to round(point/part-1) do
begin
bufer:=a[position];
for m:= position downto position+1-k do a[m]:=a[m-1];
a[position-k]:=bufer;
k:=k+1;
position:=position+2;
end;
end;
part:=part*2;
end;

for position:=0 to (point-1) do
write(a[position],' ');
end.
Эту программму хотел модифицировать на основе рабочей которая правильно выполняет только первый этап(делит массив на четные и нечетные):
uses crt;
var position,k,n,m,bufer,point,q,part,d:integer; a: array [0 .. 4096] of integer;
begin

point:=16;

for position:=0 to (point-1) do a[position]:=position;

part:=2;


position:=2;k:=1;
for n:=1 to round(point/part-1) do
begin
bufer:=a[position];
for m:= position downto position+1-k do a[m]:=a[m-1];
a[position-k]:=bufer;
k:=k+1;
position:=position+2;
end;

for position:=0 to (point-1) do
write(a[position],' ');
end.
Ответы:
можно так:
const
 n = 16;
var
 a: array[0..n * 2 - 1] of Integer;
 procedure Exchange(S{tart}: Integer; L{en}: Integer);
 var
   i, H{alf}: Integer;
 begin
   H := L div 2;
   for i := 0 to H - 1 do
   begin
     a[n + i] := a[S + i * 2];
     a[n + H + i] := a[S + i * 2 + 1];
   end;
   for i := 1 to L - 2 do
     a[S + i] := a[n + i];
   if L > 4 then
   begin
     Exchange(S, H);
     Exchange(S + H, H);
   end;
 end;
var
 i: Integer;
begin
 for i := 0 to n - 1 do
   a[i] := i;


10 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.