Песни о Паскале | страница 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, указывая лишь один параметр – файловую переменную.

• Данные внутрь процедур и функций можно передавать через глобальные переменные; такой прием допустим для несложных программ.