Песни о Паскале | страница 114
> var Rating: Real;
Но этого недостаточно. Дело в том, что, если мы оставим формулу
> Rating:= Sum div Cnt;
без изменений, то и результат не изменится. Все потому, что операция DIV (от Division – «деление») предназначена только для целых чисел, и дробную часть она всё равно отбросит. Для деления вещественных чисел в Паскале есть другая операция, она записывается косой чертой «/». Значит, упомянутый выше оператор мы должны изменить так:
> Rating:= Sum / Cnt;
Вот теперь должно заработать! Запустив новый вариант программы и открыв выходной файл, вы найдете вот что.
>Номер Количество Сумма Средний
> оценок баллов балл
>1 3 12 4.00000000000000E+0000
>2 4 20 5.00000000000000E+0000
>3 4 18 4.50000000000000E+0000
>4 3 10 3.33333333333212E+0000
>5 2 7 3.50000000000000E+0000
Что бы это значило? Средний балл считается верно, но печатается очень странными уродливыми числами! Не пугайтесь, перед вами научный формат представления вещественного числа, он удобен для изображения очень маленьких и очень больших чисел. Например, известное физикам и химикам число Авогадро (примерно 6,022140 умноженное на 10 в 23-й степени) изображается как 6.022140E+0023. Но нам этот формат не подходит, и мы заменим его, задав спецификатор ширины поля.
Для вещественных чисел спецификатор состоит из двух частей, разделяемых двоеточием. Первая часть задает общую ширину поля печати (так же, как и для целых чисел), а вторая – количество цифр после запятой (после точки). Чтобы напечатать переменную Rating с одним знаком после точки при общей ширине поля в 12 позиций, нам следует применить такой оператор печати.
> Writeln(OutFile, Counter:3, Cnt:13, Sum:14, Rating:12:1);
Теперь вновь запустим программу и полюбуемся на результат.
>Номер Количество Сумма Средний
> оценок баллов балл
>1 3 12 4.0
>2 4 20 5.0
>3 4 18 4.5
>4 3 10 3.3
>5 2 7 3.5
Прекрасно! Изрядно потрудившись и одолев ряд ошибок, мы достигли цели! Осталось лишь подытожить завоевания этой главы.
• Функция Eoln следит за признаком конца текущей строки, применяется совместно с оператором WHILE.
• Для продвижения позиции чтения в начало следующей строки вызывайте процедуру Readln, указывая лишь один параметр – файловую переменную.
• Данные внутрь процедур и функций можно передавать через глобальные переменные; такой прием допустим для несложных программ.