Writeln(OutFile, Counter:3,
Sum:14, Rating:11:1);
end
else { а если оценок не было }
Writeln(OutFile, Counter:3, Fam:18,' : Ученик не аттестован');
end;
begin {--- Главная программа ---}
Counter:= 0; { обнуляем счетчик строк }
{ открываем входной файл }
Assign(InFile,'
{ создаем выходной файл }
Assign(OutFile,'
{ выводим шапку таблицы }
Writeln(OutFile, 'Номер Фамилия Количество Сумма Средний');
Writeln(OutFile, ' оценок баллов балл');
{ пока не конец входного файла… }
while not Eof(InFile) do begin
Counter:= Counter+1; { наращиваем счетчик строк }
HandleString; { обрабатываем строку }
{ переход на следующую строку }
if not Eof(InFile) then Readln(InFile);
end;
{ закрываем оба файла }
Close(InFile); Close(OutFile);
end.
• Для чтения отдельного слова в строке файла не годятся ни оператор Readln (он прочитает всю строку), ни оператор Read, который не видит конца строки. Слово читается посимвольно оператором Read с отслеживанием признака окончания строки и других условий.
• Строку выходного файла можно формировать порциями, применяя несколько вызовов процедуры Write. Каждый такой вызов формирует часть строки и продвигает позицию записи, оставляя её в текущей строке. Для перехода к следующей строке вызывается процедура Writeln.
А) Напишите программу для преобразования первого варианта базы данных «Police.txt» (которая содержит по одному числу в строке) во второй вариант (будет содержать по три числа в строке).
Б) Файл с физическими данными старшеклассников содержит три колонки: фамилия, рост и вес ученика. Создайте программы для решения следующих задач:
• отбор кандидатов для занятий баскетболом, – рост кандидата должен составлять не менее 175 см;
• поиск учеников с избыточным весом, для которых разница между ростом ученика (см) и его весом (кг) составляет менее 100.
Ваши программы должны сформировать соответствующие файлы с фамилиями и данными учеников.
Глава 32
Порядковые типы данных
Вот поле битвы, где там и сям мелькают спины бегущего противника. Разгоряченные боем, наши полки готовы гнать его хоть на край света. Но что это? Зачем полководец прекращает атаку и велит трубить сбор? Поверьте, он знает свое дело: выигрыш битвы – ещё не победа в войне. Предстоят новые сражения, и надо укрепить армию: дать отдых бойцам, накормить, подлечить и вновь построить в боевые порядки.
Освоенные нами элементы Паскаля (считайте их нашим войском) разбили в пух и прах все поставленные задачи. Но, то ли ещё будет! Впереди сильнейший противник. Так соберем свою армию в кулак, соединим все, что нам известно о Паскале. В этой и двух последующих главах мы детально рассмотрим уже освоенные элементы языка, и в первую очередь – типы данных.
Кто из вас видел «предметы вообще»? Также не бывает и «данных вообще», – они обязательно принадлежат к тому либо иному типу. Учреждая переменную, параметр или функцию, потрудитесь сообщить их тип компилятору, иначе он не уяснит, сколько памяти отвести для этих данных и что позволено совершать с ними.
На рис. 73 представлены почти все типы данных, встроенные в язык Паскаль. Их принято делить на три категории: простые, сложные и указатели. К настоящему моменту вы знакомы со многими простыми типами данных и одним сложным – строковым типом String.
Чем разнятся сложные типы от простых? Тем ли, что сложные труднее изучать? Отчасти так, но суть не в этом. Сложные типы обладают внутренней структурой, в которой выделяются отдельные элементы. Так, например, можно выделить отдельные символы в строке. Простые же типы данных не «раскалываются» на мелкие детали.
А указатели? Их применяют для доступа к данным других типов. Указатель чем-то похож на адрес электронной почты или на гиперссылку, в свое время я расскажу об указателях все.