Глава 26 ответ к заданию «а»:
- Код: Выделить всё
var F: text;
i: integer;
s: string;
begin
Assign(F, 'Test.txt');
Rewrite(F);
for i:=1 to 10 do Writeln(F, i);
Close(F);
Reset(F);
while not Eof(F) do begin
Readln(F, S);
Writeln(S);
end;
Readln;
end.
В конце забыли второй Close(F);
Глава 30 задание «B»:
Сформируйте файл «Numbers.txt», поместив в него 100 случайных чисел
в диапазоне от 0 до 999(некоторые числа могут повторяться). Затем найдите в этом
файле: 1) максимальное и минимальное число; 2) сумму всех чисел; 3) среднее
арифметическое — напечатайте его с двумя знаками после точки.
Здесь сумма всех чисел будет превышать Integer, а о целочисленных типах больше Integer в предыдущих главах ничего не сказано. Если использовать Integer программа вылетает с ошибкой и ученик может не догадаться почему.
Сам ответ:
- Код: Выделить всё
const
CFileName = 'Numbers.txt';
CNumbers = 100;
procedure CreateDataFile; { создание файла с числами }
var
F: Text;
i, N : integer;
begin
Assign(F, CFileName);
Rewrite(F);
for i:=1 to CNumbers do begin
Write(F, Random(500)+Random(500):5);
if i mod 10 = 0 then Writeln(F);
end;
Close(F);
end;
procedure Handle; { обработка файла с числами }
var
F: Text;
N, min, max, Sum, Cnt : integer;
begin
min:=1000; { минимум }
max:=0; { максимум }
Sum:=0; { сумма }
Cnt:=0; { счетчик }
Assign(F, CFileName);
Reset(F);
while not Eof(F) do begin
if Eoln(F) then Readln(F); { пропуск конца строки }
Read(F, N);
if N<min then min:=N;
if N>max then max:=N;
Sum:= Sum+N;
Cnt:= Cnt+1;
if Cnt=CNumbers then break;
end;
Close(F);
Writeln('Минимальное=', min);
Writeln('Максимальное=', max);
Writeln('Сумма=', Sum);
Writeln('Среднее=', Sum/Cnt : 12:2);
end;
begin
CreateDataFile;
Handle;
Writeln('ok'); Readln
end.
В процедуре CreateDataFile объявлена неиспользуемая переменная N. Также Random(500) + Random(500) максимум дают 998, а по условию задачи максимум 999.
Ну и в конце, хочу спросить у знающих людей, если убрать if Cnt=CNumbers then break и позволить процедуре Read(F,N) читать последнюю пустую строку файла, почему она возвращает 0, там же ничего кроме управляющих кодов нет !?