Песни о Паскале | страница 113
> W := 15;
> Writeln(OutFile, Cnt : 10, Sum : W);
Здесь значение переменной Cnt будет напечатано на десяти символьных позициях, а значение переменной Sum – на пятнадцати (соответственно значению W).
Спецификаторы – это дополнительные параметры процедуры печати, придающие красоту выводимым результатам. Когда число требует меньше места, чем задано в спецификаторе, лишние позиции заполнятся пробелами, а нам того и надо. К тому же, спецификатор может выравнивать выводимые числа по левому, или правому краю колонки: положительное его значение выравнивает число по правому краю, а отрицательное – по левому. Спецификаторы применяют и к строковым выражениям.
Для нашего случая я подобрал следующие значения спецификаторов.
> Writeln(OutFile, Counter:3, Cnt:13, Sum:14, Rating:12);
Исправьте заодно и этот оператор вывода в файл:
> Writeln(OutFile, Counter:3, ' Ученик не аттестован');
Снова запустите программу и проверьте результат. Кстати, если вы не закрывали окно с выходным файлом «P_30_1.out», то по завершении программы IDE сообщит о том, что файл на диске был изменен, – это сделала ваша программа. Но в открытом окне все осталось по-прежнему, потому IDE спрашивает разрешение на обновление окна, – дайте положительный ответ кнопкой «Yes» и переключитесь в окно с файлом «P_30_1.out». Теперь вы увидите вот что.
>Номер Количество Сумма Средний
> оценок баллов балл
>1 3 12 4
>2 4 20 5
>3 4 18 4
>4 3 10 3
>5 2 7 3
Это почти идеальный результат. Осталась лишь одна шероховатость, – средний балл не содержит дробной части. Займемся этим вопросом.
Обратимся к строке программы, где вычисляется средний балл.
> Rating:= Sum div Cnt;
Здесь одно целое число делится на другое, и результат тоже получается целым. Куда же девается дробная часть? Увы, дробная часть отбрасывается. Куда отбрасывается, не знаю, но она теряется. Поэтому при целочисленном делении получаются, например, такие забавные результаты.
> 7 div 3 = 2
> 7 div 4 = 1
> 7 div 5 = 1
Целые числа потому и целые, что не дают «отколоть» от себя ни крошки. Они как штучный товар. Но средний балл – это «развесной товар», – для него нужны другие числа, и они в Паскале есть.
Я говорю о вещественных числах. В Паскале есть несколько типов для представления таких чисел. Один из них – REAL – родной для Паскаля, поскольку существовал в первой версии языка. Другие добавились с появлением в компьютерах математических сопроцессоров. Для хранения среднего балла воспользуемся типом REAL; с этой целью изменим объявление переменной Rating следующим образом: