Можно сделать втупую: разбить программу на части и запихнуть каждую часть в свою процедуру, ни на йоту не поменяв логику. Крайний случай - всю программу запихнуть в одну процедуру, но такой наглости преподы обычно не терпят.
Весь раздел описаний переменных - см выше.
Код: Выделить всё
procedure get_data;
begin
Clrscr;
Write('Input first filename to combine : ');
Readln(fi1name);
Write('Input second filename to combine : ');
Readln(fi2name);
Write('Input destination combined filename: ');
Readln(foname);
end;
procedure open_files;
begin
Assign(fi1, fi1name);
{$I-}Reset(fi1);{$I+}
If IOResult<>0 then
begin
Writeln('File '+fi1name+' could''nt be opened or it does''nt exist');
halt(1);
end;
Assign(fi2, fi2name);
{$I-}Reset(fi2);{$I+}
If IOResult<>0 then
begin
Writeln('File '+fi2name+' could''nt be opened or it does''nt exist');
halt(2);
end;
Assign(fo, foname);
Rewrite(fo);
end;
procedure combine;
begin
nstr := 1; lastpage := 0; npage:=1;
Writeln('Combining in progress...');
repeat
If lastpage <> npage then
begin
lastpage := npage;
str(npage, istr);
Writeln(fo);
Writeln(fo, ' -= '+istr+' =- ');
Writeln(fo);
end;
If nstr mod 2 = 0 then
if eof(fi1) then Readln(fi2, istr)
else Readln(fi1, istr)
else
if eof(fi2) then Readln(fi1, istr)
else Readln(fi2, istr);
Writeln(fo, istr);
inc(nstr);
If nstr mod 50 = 0 then inc(npage);
until eof(fi1) and eof(fi2);
end;
procedure finalize;
begin
close(fi1);
close(fi2);
close(fo);
Writeln('Finished');
end;
BEGIN {основная программа}
get_data;
open_files;
combine;
finalize;
END.
Такая программа обозначает примерно следующее: "Не знаю, зачем вы нас заставляете забивать гвозди микроскопом, но раз вы так хотите, можно и это".
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.