Сортировка слиянием,используя компоратор - 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.

Объяснение кода листинга программы

  1. Объявлена переменная mass типа массив целых чисел с фиксированным размером 1000000 элементов.
  2. Объявлена функция compare, которая сравнивает два целых числа и возвращает булево значение.
  3. Объявлена процедура sli, которая сортирует массив glav с помощью алгоритма слияния.
  4. Объявлена процедура sort, которая рекурсивно сортирует массив glav с помощью алгоритма слияния.
  5. Объявлены переменные f, first, last, a, b, i, n, glav.
  6. Открывается файл input.txt для чтения.
  7. Из файла input.txt считывается количество чисел для сортировки (переменная n).
  8. В цикле считываются сами числа из файла и сохраняются в массиве glav.
  9. Вызывается процедура sort для сортировки массива glav с первого элемента до n.
  10. Открывается файл output.txt для записи.
  11. В цикле в файл output.txt записываются отсортированные числа из массива glav.
  12. Программа ожидает нажатия клавиши для завершения работы.

Оцени полезность:

5   голосов , оценка 4.6 из 5
Похожие ответы