Общий костяк программы нам дали на уроке (т. е. список названий процедур и функции). По нему составила программу. Но у меня ошибка: переполнение стека. +Я не понимаю перехода от файла к строке (связки) и связи процедур - могла напутать. Помогите разобраться.
procedure read_data(fn:string;
var mas:massive;
n:integer);
var f:text;
begin
assign(f,fn);
reset(f);
n:=0;
while not eof(f) do
begin
n:=n+1;
read(f,mas[n]);
end;
close(f);
end;
procedure write_data(fn:string;
var mas:massive;
n:integer);
var f:text;
i:integer;
begin
assign(f,fn);
rewrite(f);
for i:=1 to n do
writeln(f,mas[i]);
close(f);
end;
procedure sort_data(mas:massive;
n:integer);
var i,j:integer;
exchange:string;
begin
for i:=1 to n-1 do
for j:=1 to n-i do
if mas[j]<mas[j+1] then
begin
exchange:=mas[j];
mas[j]:=mas[j+1];
mas[j+1]:=exchange;
end;
end;
procedure sort(fn:string);{Процедура слияния. Сборка}
var mas:massive;
n:integer;
begin
read_data(fn,mas,n);
sort_data(mas,n);
write_data(fn,mas,n);
end;
procedure copy_files(var f,f_res:text); {При слиянии копирует оставшийся файл (первый или второй) в третий}
var n:integer;
begin
n:=0;
while not eof(f) do
begin
n:=n+1;
readln(f,n);
writeln(f_res,n);
end;
end;
function test_files(var f1,f2,f_res:text):boolean; {функция проверки: пустой ли файл, если да, то копируется в третий файл с помощью функции}
begin
if eof(f1) then
begin
copy_files(f2,f_res);
test_files:=false;
end
else
if eof(f2) then
begin
copy_files(f1,f_res);
test_files:=false;
end
else test_files:=true;
end;
procedure merge_files(var f1,f2,f_res:text); {процедура слияния}
var a,b:string;
begin
readln(f1,a);
readln(f2,b);
while not eof(f1) and not eof(f2) do
begin
if a>b then
begin
writeln(f_res,a);
read(f1,a);
end
else
begin
writeln(f_res,b);
read(f2,b);
end;
end;
test_files(f1,f2,f_res);
end;
procedure merge(fn1,fn2,fn_res:string); {Сборка. Процедура слияния файлов}
var
f1,f2,f_res:text;
a,b:string;
begin
assign(f1,fn1);
reset(f1);
assign(f2,fn2);
reset(f2);
assign(f_res,fn_res);
rewrite(f_res);
if test_files(f1,f2,f_res) then
merge_files(f1,f2,f_res);
close(f1);
close(f2);
close(f_res);
end;
var a,b,c:text; {основная программа}
begin
sort('a.txt');
sort('b.txt');
merge('a.txt','b.txt','c.txt');
end.
Сообщение отредактировано: Natalia -