Найти в файле наибольшее число и два числа, стоящих перед ним - Pascal
Формулировка задачи:
Решение задачи: «Найти в файле наибольшее число и два числа, стоящих перед ним»
program pr;
const n=12;
var f:file of integer;
g:text;
i,a,p,mx,imx:integer;
s:real;
begin
randomize;
assign(f,'c:\file1.txt');
rewrite(f);
assign(g,'c:\file2.txt');
rewrite(g);
for i:=1 to n do
begin
a:=random(50);
write(f,a);
end;
reset(f);
writeln('Содержание файла:');
while not eof(f) do
begin
read(f,a);
write(a,' ');
end;
writeln;
seek(f,0);
p:=0;
for i:=3 to filesize(f)-1 do
begin
seek(f,i);
read(f,a);
seek(f,p);
write(f,a);
p:=p+1;
end;
seek(f,filesize(f)-2);
truncate(f);
writeln('Удаление первых 3:');
seek(f,0);
while not eof(f) do
begin
read(f,a);
write(a,' ');
end;
writeln;
seek(f,0);
read(f,mx);
imx:=0;
for i:=1 to filesize(f)-1 do
begin
read(f,a);
if a>mx then
begin
mx:=a;
imx:=i;
end;
end;
if imx<2 then
begin
writeln(g,'Максимальное =',mx,' его номер =',imx+1);
writeln(g,'Перед ним нет 2 чисел');
end
else
begin
s:=0;
seek(f,imx);
for i:=imx downto imx-2 do
begin
seek(f,i);
read(f,a);
s:=s+a;
write(g,' ',a);
end;
writeln(g);
write(g,'Cумма=',s:0:2);
end;
close(f);
close (g);
end.
Объяснение кода листинга программы
Программа начинается с определения константы n, которая определяет количество чисел, которые будут записаны в файл. Затем определяются переменные f и g, которые представляют собой файлы для чтения и записи соответственно. Далее следует цикл for, который повторяется n раз. В каждой итерации этого цикла генерируется случайное число a между 1 и 50 и записывается в файл f. После этого сбрасывается счетчик i и цикл for повторяется снова. После завершения цикла for, содержимое файла f выводится на экран. Затем файл f сбрасывается в начало и начинается цикл while, который повторяется до тех пор, пока не будет достигнут конец файла. В каждой итерации этого цикла число a считывается из файла f, записывается в переменную a и выводится на экран. После окончания цикла while, файл f сбрасывается в начало и начинается цикл for, который повторяется до тех пор, пока не будет достигнут конец файла. В каждой итерации этого цикла число a считывается из файла f, записывается в переменную a и выводится на экран. Если в процессе выполнения программы было обнаружено, что наибольшее число (mx) стоит перед двумя другими числами (imx-1 и imx-2), то выводится сообщение об этом на экран. В конце программы закрываются файлы f и g.