Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2020, 13:27   #1
Екатерина_________
Новичок
Джуниор
 
Регистрация: 20.02.2020
Сообщений: 5
Восклицание объясните, пожалуйста код

Код:
type 
massiv=array[1..100] of integer;
var n, i, k, z, r0: integer;
A,C,B: massiv;

{процедура, сливающая массивы}
procedure Merge(var A: massiv; first, last: integer);
var middle, start, final , j: integer;
mas: massiv;
begin
middle:=(first+last) div 2; {вычисление среднего элемента}
start:=first; {начало левой части}
final:=middle+1; {начало правой части}
for j:=first to last do {выполнять от начала до конца}
if (start<=middle) and ((final>last) or (A[start]<A[final])) then
begin
mas[j]:=A[start];
inc(start);
end
else
begin
mas[j]:=A[final];
inc(final);
end;
{возвращение результата в массив}
for j:=first to last do A[j]:=mas[j];
end;

{процедура сортировки}
procedure MergeSort(var A: massiv; first, last: integer);
begin
if first<last then
begin
MergeSort(A, first, (first+last) div 2); {сортировка левой части}
MergeSort(A, (first+last) div 2+1, last); {сортировка правой части}
Merge(A, first, last); {слияние двух частей}
end;
end;

{основной блок программы}
begin
write('Размер массива > ');
readln(n);
for i:=1 to n do begin 
                 write(i, ' элемент > '); 
                 read(A[i]); 
                 C[i]:=A[i];
                 if A[i] = 0 then begin
                                  B[i]:=i;                                  
                                  end;
                 end;

MergeSort(A, 1, n); {вызов сортирующей процедуры}
write('Упорядоченный массив: '); {вывод отсортированного массива}

// k z r0 B[] C[]

for i:=1 to n do begin
if i = B[i] then k:=0
            else k:=C[i];

if A[i] = k then 
            else begin
                 z:=i;
                 repeat
                 if A[z]>0 then begin 
                                r0 := A[z];
                                A[z] := A[i];
                                A[i] := r0;
                                end;
                 z:=z+1;
                 until A[i]>0;
                 end;

end;


for i:=1 to n do write(A[i], ' ');
end.
Екатерина_________ вне форума Ответить с цитированием
Старый 05.06.2020, 13:28   #2
Екатерина_________
Новичок
Джуниор
 
Регистрация: 20.02.2020
Сообщений: 5
По умолчанию

поверхностно понимаю, но хотелось бы совсем понять
Екатерина_________ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните пожалуйста код DellXT Общие вопросы C/C++ 4 22.09.2018 12:18
Объясните пожалуйста код Dimka-novitsek Общие вопросы C/C++ 1 22.06.2015 17:38