Дан файл f, компоненты которого являются целыми числами. Записать в файл g наибольшее значение первых пяти - Pascal
Формулировка задачи:
Помогите с задачей. Нужно доработать этот код. Получается нужно чтобы f, g были текстовыми документами, которые можно отдельно открыть в папке куда они сохраняются. А в данном случае при попытке открыть файл через блокнот отображается непонятные символы.Заранее спасибо.
Дан файл f, компоненты которого являются целыми числами. Записать в файл g наибольшее
значение первых пяти компонент файла f, затем - следующих пяти компонент и т.д. Если в последней группе
окажется менее пяти компонент, то последняя компонента файла g должна быть равна наибольшей из
компонент файла f, образующих последнюю (неполную) группу.
var
f, g : file of integer;
n, i, j, k : byte;
a, max : integer;
s, s1 : string;
begin
write('Введите имя исходного файла : ');
readln(s1);
assign(f,'s1.txt');
rewrite(f);
randomize;
n := random(20);
for i := 1 to n do
write(f,(random(10)));
writeln('Содержимое исходного файла ',s1,' :');
reset(f);
while not eof(f) do
begin
read(f,a);
write(a:4);
end;
writeln;
write('Имя файла g, содержащего наибольшие элементы из групп по 5 элементов : ');
readln(s);
assign(g,'s.txt');
rewrite(g);
j := 1;
for i := 1 to filesize(f) div 5 do
begin
seek(f,j-1);
read(f,a);
max := a;
for k := 2 to 5 do
begin
seek(f,k-1+j-1);
read(f,a);
if a>max then max := a;
end;
write(g,max);
inc(j,5);
end;
if filesize(f) mod 5 <> 0 then begin
seek(f,5*i);
read(f,a);
max := a;
for k := 2 to filesize(f)-5*i do
begin
seek(f,5*i-1+k);
read(f,a);
if a>max then max := a;
end;
write(g, max);
end;
writeln('Содержимое файла ',s,' :');
reset(g);
while not eof(g) do
begin
read(g,a);
write(a:4);
end;
readln;
close(f);
close(g);
end.Решение задачи: «Дан файл f, компоненты которого являются целыми числами. Записать в файл g наибольшее значение первых пяти»
textual
Листинг программы
var f, g: text;
n, i, a, max: integer;
s: string;
begin
randomize;
write('Введите имя исходного файла: ');
readln(s);
assign(f, s + '.txt');
rewrite(f);
n := random(200);
for i := 0 to n do
begin
if (i > 0) and (i mod 5 = 0) then writeln(f);
write(f, -99 + random(199):4)
end;
reset(f);
writeln('Содержимое исходного файла ', s, '.txt: ');
while not seekeof(f) do
begin
read(f, a);
write(a:4)
end;
writeln;
write('Имя файла, содержащего наибольшие элементы из групп по 5 элементов : ');
readln(s);
assign(g, s + '.txt');
rewrite(g);
reset(f);
i := 0;
while not seekeof(f) do
begin
read(f, a);
if (i = 0) or (max < a) then max := a;
if i = 4 then writeln(g, max);
i := (i + 1) mod 5
end;
if i > 0 then writeln(g, max);
writeln('Содержимое файла ', s, '.txt: ');
reset(g);
while not seekeof(g) do
begin
read(g, a);
write(a:4)
end;
readln;
close(f);
close(g)
end.
Объяснение кода листинга программы
- Объявление переменных:
f, g: text;- задают файлы f и gn, i, a, max: integer;- определяют целочисленные переменные n, i, a, maxs: string;- определяет строковую переменную s
- Создание и запись значений в файл f: a. Вводится имя исходного файла b. Присваивается файлу f имя, полученное от пользователя c. Файл f открывается для записи d. Генерируется случайное число n e. Выполняется цикл от 0 до n для записи целых чисел в файл f в несколько групп (по 5 элементов)
- Печать содержимого файла f: a. Выводится содержимое исходного файла f.txt
- Создание и запись максимальных значений в файл g: a. Запрашивается имя файла, который будет содержать наибольшие элементы из групп по 5 элементов b. Файлу g присваивается имя, полученное от пользователя c. Файл g открывается для записи d. Файл f открывается для чтения e. Выполняется цикл, в котором считываются значения из файла f и записываются наибольшие значения (из групп по 5 элементов) в файл g
- Печать содержимого файла g: a. Выводится содержимое файла g.txt
- Завершение работы с файлами: a. Закрывается файл f b. Закрывается файл g