Чтение онлайн

на главную - закладки

Жанры

Шрифт:

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

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

• Целые числа не содержат дробной части. Для действий с дробными числами применяют вещественные типы, например, Real.

• Для получения дробного результата деления пользуйтесь операцией «/» (косая черта). Операция DIV при делении отбрасывает дробную часть.

• Для ровной печати чисел применяйте спецификаторы ширины поля.

А слабо?

А) Функция Trunc выделяет целую часть вещественного числа, например:

Writeln (Trunc( 12.345 )); { 12 }

Исследуйте её и придумайте способ выделения дробной части вещественного числа. Напишите подходящую функцию и программу для её проверки.

Б) Объясните и проверьте, что напечатает следующая программа.

var N: integer;

begin for N:=1 to 20 do Writeln (’ ’:N, N); end.

В) Сформируйте файл «Numbers.txt», поместив в него 100 случайных чисел в диапазоне от 0 до 999 (некоторые числа могут повторяться). Затем найдите в этом файле: 1) максимальное и минимальное число; 2) сумму всех чисел; 3) среднее арифметическое – напечатайте его с двумя знаками после точки.

Г) Сканирование марсианской поверхности дало файл, содержащий высоту отдельных его точек вдоль одного из направлений, – пусть это будет файл «Numbers.txt» из предыдущей задачи. Найдите точки, где вероятней всего обнаружить марсианскую воду. На следующем ниже рисунке они обозначены буквами W. Программа должна напечатать две колонки: порядковый номер точки относительно начала файла (счет от нуля) и высоту точки (такие точки математики называют локальными минимумами).

Рис. 70 – Рельеф марсианской поверхности

Глава 31

Финал журнальной истории

В предыдущей главе мы поклялись восстановить съеденную мышами программу и отчасти сдержали клятву. Нами решена упрощенная задача – обработка журнала без фамилий учеников, то есть, мы исполнили вычислительную часть проекта. Теперь завершим его, добившись обработки настоящего классного журнала. Требуется, казалось бы, пустяк – прочесть фамилии учеников. Но воспользоваться

процедурой Readln, как мы поступили в программе шифрования текста, здесь не получится, – она прочитает всю строку целиком, включая и оценки (которые станут как бы частью фамилии!).

Буква за буквой

Славный литературный герой Остап Бендер по поводу желанного миллиона сказал так: «Я бы взял частями, но мне нужно сразу!». Увы! При чтении фамилий надо проявить терпение. Если не получается сразу, возьмем по частям. Ведь строка фамилии состоит из отдельных букв, – так прочитаем фамилию по буквам! Прочитать букву может все та же процедура Read, например:

var sym : char;

...

Read(InFile, sym); { чтение одного символа }

А фамилию S склеим из отдельных букв:

S:= S + sym;

Разумеется, что здесь нужен цикл, условием выхода из которого будет либо достижение первого пробела, либо достижение конца строки. В этом и состоит основная идея алгоритма, показанного на рис. 71.

Рис.71 – Упрощенный алгоритм побуквенного чтения фамилии

Нелишняя предосторожность

Людям свойственно ошибаться, – даже учителям! В строках журнала (а это текстовый файл) могут оказаться лишние пробелы – как между оценками, так и в начале строки, перед фамилией. И что тогда? – проверьте на практике. При чтении чисел процедура Read «не заметит» лишних пробелов, – она достаточно «умна». Другое дело – показанная выше блок-схема: если перед фамилией обнаружится пробел, то чтение слова завершится досрочно. Стало быть, для правильного чтения фамилии надо пропустить стоящие перед нею пробелы (если они есть). Это улучшение слегка усложнит блок-схему (рис. 72).

Рис.72 – Усовершенствованный алгоритм побуквенного чтения фамилии

Достройка программы

В основу новой версии программы «P_31_1» положим программу «P_30_1». Вам следует, прежде всего, открыть её и сохранить под новым именем. Готово? Тогда приступаем к правке.

Начнем с главной программы, где надо изменить имена входных и выходных файлов (чтобы не путать с похожими файлами предыдущей версии).

Assign(InFile,'Journal2.in'); Reset(InFile);

Assign(OutFile,'Journal2.out'); Rewrite(OutFile);

Позаботьтесь о том, чтобы файл «Journal2.in» был похож на настоящий классный журнал с фамилиями, как о нём сказано в начале 30-й главы.

Второе изменение внесем в процедуру обработки строки HandleString. Здесь объявим ещё одну переменную строкового типа, назовем её Fam, она будет вмещать фамилию ученика.

Поделиться:
Популярные книги

Корпулентные достоинства, или Знатный переполох. Дилогия

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.53
рейтинг книги
Корпулентные достоинства, или Знатный переполох. Дилогия

Идеальный мир для Лекаря 19

Сапфир Олег
19. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 19

Бастард Императора. Том 8

Орлов Андрей Юрьевич
8. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 8

Боги, пиво и дурак. Том 4

Горина Юлия Николаевна
4. Боги, пиво и дурак
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 4

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Хозяйка дома в «Гиблых Пределах»

Нова Юлия
Любовные романы:
любовно-фантастические романы
5.75
рейтинг книги
Хозяйка дома в «Гиблых Пределах»

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Идеальный мир для Лекаря 5

Сапфир Олег
5. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 5

Волчья воля, или Выбор наследника короны

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Волчья воля, или Выбор наследника короны

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Измена. Право на счастье

Вирго Софи
1. Чем закончится измена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на счастье

Миротворец

Астахов Евгений Евгеньевич
12. Сопряжение
Фантастика:
эпическая фантастика
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Миротворец

Он тебя не любит(?)

Тоцка Тала
Любовные романы:
современные любовные романы
7.46
рейтинг книги
Он тебя не любит(?)

Система Возвышения. Второй Том. Часть 1

Раздоров Николай
2. Система Возвышения
Фантастика:
фэнтези
7.92
рейтинг книги
Система Возвышения. Второй Том. Часть 1