Основы программирования. Файлы. Рекурсия - 15 стр.

UptoLike

Составители: 

17
try
read(f,x);
s:=s+x;
c:=c+1;
except
end;
Close(f);
writeln(c,' ',s);
end.
Отметим, что если использовать функцию Eof вместо SeekEof, то при на-
личии пробелов в конце файла после считывания последнего числа Eof(f) вер-
нет False и на следующей итерации цикла вызов read(f,x) запишет в пере-
менную x число 0. В результате количество целых чисел c
будет на 1 больше
правильного.
Решение 2. Посимвольная обработка.
Вторая стратегия решения заключается в посимвольном считывании и нака-
пливании в некоторой строковой переменной s текущей лексемы. Лексемой здесь
мы будем называть любую последовательность символов, не являющихся разде-
лителями. Если считанный символ является разделителем и лексема в строке s не
пуста, то она считается
сформированной и обрабатывается (преобразуется в чис-
ло), после чего строка s обнуляется. Если же считанный символ не является раз-
делителем, то он просто добавляется к строке s. Преобразование лексемы в число
можно осуществить процедурой Val, что позволяет обойти использование меха-
низма исключений. Далее приводится полный текст второго варианта решения.
var f: text;
ch: char;
i: integer;
begin
Assign(f,'a.txt');
Reset(f);
sum:=0;
s:='';
repeat
read(f,ch);
if not (ch in [#0..#32]) then
s:=s+ch
else if s<>'' then
begin
Val(s,i,errcode);
if errcode=0 then
sum:=sum+i;