Сортировка слиянием,используя компоратор - Free Pascal
Формулировка задачи:
Возникает многочисленные ошибки ordinal expression expected.А также в 29 строчке illegal type conversion :'Boolean' to 'comp'
program laba05_v2; type mass= array [1..1000000] of int64; func= function(a,b:int64): boolean; var f:text; first,last: int64; a,b,i,n: int64; glav:mass; function compare(a,b:int64): boolean; begin if (a<b) then compare:=true else compare:=false; end; procedure sli(var glav:mass; first,last:int64); var start,fin,medium,i,j:int64; pob:mass; begin medium:=(first+last) div 2; start:=first; fin:=medium+1; for i:=first to last do if (start<=medium) and ((fin>last) or (comp (glav[start]>glav[fin]))) then begin pob[i]:=glav[start]; start:=start+1; end else begin pob[i]:=glav[fin]; fin:=fin+1; end; for i:=first to last do glav[i]:=pob[i]; end; procedure sort(var glav:mass; first,last: longint); begin if first<last then begin sort(glav, first, (first+last) div 2); sort(glav, (first+last) div 2+1, last); sli(glav, first, last); end; end; begin assign(f,'input.txt'); reset(f); read(f,n); for i:=1 to n do begin read(f,glav[i]); end; close(f); sort(glav,1,n); assign(f,'output.txt'); rewrite(f); for i:=1 to n do begin write(f,glav[i],' '); end; close(f); end.
Решение задачи: «Сортировка слиянием,используя компоратор»
textual
Листинг программы
type mass= array [1..1000000] of int64; function compare(a,b:int64): boolean; begin compare:=a<b end; procedure sli(var glav:mass; first,last:integer); var start,fin,medium:integer; i,j:integer; pob:mass; begin medium:=(first+last) div 2; start:=first; fin:=medium+1; for i:=first to last do if (start<=medium) and ((fin>last) or compare(glav[start],glav[fin])) then begin pob[i]:=glav[start]; start:=start+1; end else begin pob[i]:=glav[fin]; fin:=fin+1; end; for i:=first to last do glav[i]:=pob[i]; end; procedure sort(var glav:mass; first,last: longint); begin if first<last then begin sort(glav, first, (first+last) div 2); sort(glav, (first+last) div 2+1, last); sli(glav, first, last); end; end; var f:text; first,last: int64; a,b,i,n: integer; glav:mass; begin assign(f,'input.txt'); reset(f); read(f,n); for i:=1 to n do read(f,glav[i]); close(f); sort(glav,1,n); assign(f,'output.txt'); rewrite(f); for i:=1 to n do write(f,glav[i],' '); close(f); readln; end.
Объяснение кода листинга программы
- Объявлена переменная
mass
типа массив целых чисел с фиксированным размером 1000000 элементов. - Объявлена функция
compare
, которая сравнивает два целых числа и возвращает булево значение. - Объявлена процедура
sli
, которая сортирует массивglav
с помощью алгоритма слияния. - Объявлена процедура
sort
, которая рекурсивно сортирует массивglav
с помощью алгоритма слияния. - Объявлены переменные
f
,first
,last
,a
,b
,i
,n
,glav
. - Открывается файл
input.txt
для чтения. - Из файла
input.txt
считывается количество чисел для сортировки (переменнаяn
). - В цикле считываются сами числа из файла и сохраняются в массиве
glav
. - Вызывается процедура
sort
для сортировки массиваglav
с первого элемента доn
. - Открывается файл
output.txt
для записи. - В цикле в файл
output.txt
записываются отсортированные числа из массиваglav
. - Программа ожидает нажатия клавиши для завершения работы.