пример. первонач. файл :210352527635891
33
{ Вычисляем контрольную сумму }
Assign(Fn, 'Fail.dat');
Reset(Fn, 1); { Открываем нетипизированный файл с размером блока 1 }
s:=0; { Обнуляем сумму }
while not Eof(Fn) do { Читаем весь файл }
begin
BlockRead(Fn, by, 1); { Читаем очередной байт }
s:=s+by; { Прибавляем прочитанный байт к общей сумме }
end;
Close(Fn); { Закрываем файл }
Write('Контрольная сумма файла = '); { Выводим на экран контрольную сумму }
Writeln(s);
Readln; { Просто так}
Fn:File; { Нетипизированный файл }
var F:File of byte;
i:integer;
by:byte;
s:integer;
ps:integer;
n, m:integer;
Fn:File; { Нетипизированный файл }
program Proga;
var F:File of byte;
i:integer;
by:byte;
s:integer;
ps:integer;
n, m:integer;
Fn:File; { Нетипизированный файл }
begin
{ Заполняем файл случайными числами от 1 до 100}
Assign(F, 'Fail.dat');
Rewrite(F);
for i:=1 to 74 do
begin
by:=random(100)+1;
Write(F, by);
end;
Close(F);
{ Щитаем среднее арифметическое каждого десятка}
Assign(F, 'Fail.dat');
Reset(F);
s:=0; { Сумма элементов }
n:=0; { Кол-во уже прочитанных чисел за этот раз }
m:=0; { Кол-во записанных арифметических сумм }
while not Eof(F) do
begin
Read(F, by);
Write(by);
Write(' ');
s:=s+by;
inc(n);
if n=10 then { Если уже прочли 10 чисел(байт)}
begin
Writeln(s); { Для тестирования }
ps:=FilePos(F); { Запоминаем текущую позицию файла }
Seek(F, m); { Смещаемся в файле на место, куда надо писать }
by:=round(s/n); { Щитаем арифм. сумму }
Writeln(by); { Для тестирования }
Write(F, by); { Пишем в файл }
n:=0; { Сбрасываем счетчик }
s:=0;
inc(m);
Seek(F, ps);
end;
end;
if n>0 then { Если осталось что-то в сумме }
begin
Seek(F, m);
Writeln(s); { Для тестирования }
by:=round(s/n);
Writeln(by); { Для тестирования }
Write(F, by);
inc(m);
end;
Truncate(F);
Close(F);
Readln; { Для тестирования }
{ Вычисляем контрольную сумму }
Assign(Fn, 'Fail.dat');
Reset(Fn, 1);
s:=0;
while not Eof(Fn) do
begin
BlockRead(Fn, by, 1);
s:=s+by;
end;
Write('Контрольная сумма файла = ');
Writeln(s);
Close(Fn);
Readln;
end.
var F:File of byte;
i:integer;
by:byte;
s:integer;
ps:integer;
n, m:integer;
Fn:File; { Нетипизированный файл }
{ Заполняем файл случайными числами от 1 до 100}
Assign(F, 'Fail.dat');
Rewrite(F);
for i:=1 to 74 do
begin
by:=random(100)+1;
Write(F, by);
end;
Close(F);
{ Щитаем среднее арифметическое каждого десятка}
Assign(F, 'Fail.dat');
Reset(F);
s:=0; { Сумма элементов }
n:=0; { Кол-во уже прочитанных чисел за этот раз }
m:=0; { Кол-во записанных арифметических сумм }
while not Eof(F) do <-- Цикл, пока не дойдем до конца файла
begin
Read(F, by); <-- Читаем байт
s:=s+by; Прибавляем его к сумме
inc(n); прибавляем единичку к счетчику, который считает кол-во прочитанных байт очередного десятка
if n=10 then { Если уже прочли 10 чисел(байт)} если набрали 10 чисел
begin
ps:=FilePos(F); { Запоминаем текущую позицию файла }
Seek(F, m); смещаемся туда, куда надо писать арифметическую сумму (т.е. в начало файла)
by:=round(s/n); { Щитаем арифм. сумму }
Write(F, by); { Пишем в файл }
n:=0; { Сбрасываем счетчик } начнём считать опять с нуля
s:=0; сбрасываем сумму, т.к. будем щитать сумму следующего десятка
inc(m); Т.к. записали арифм. сумму в файл, надо посчитать позицию, куда будем писать следующую арифм. сумму.
Seek(F, ps); смещаемся обратно на место чтения
end;
end;
if n>0 then { Если осталось что-то в сумме }
begin
Seek(F, m);
by:=round(s/n);
Write(F, by);
inc(m);
end;
К-во элементов файла F может не делиться нацело на 10 поэтому последнее среднее арифметическое необходимо вычислить из оставшихся элементов файла
Truncate(F);
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.