Тема урока "Решение задач с использованием комбинированного типа данных и текстовых файлов"
Сегодня на уроке вы:
познакомитесь с примерами решения задач с использованием комбинированного типа данных и текстовых файлов.
Повторим!
Комбинированным называется структурный тип данных, который состоит из фиксированного числа величин различных типов, которые называются полями. Сами же объекты комбинированного типа данных называются записями. В записи каждое поле имеет свое собственное имя.
Может возникнуть вопрос: «Как удобнее организовать ввод данных комбинированного типа, ведь эти данные могут иметь значительный объём, а их ввод с клавиатуры – долгий процесс, при котором достаточно легко допустить ошибку, причём в этом случае всё придётся начинать сначала?».
Поэтому для ввода данных лучше заранее создать текстовый файл, в котором данные, необходимые для решения задачи, будут записаны определённым образом.
Рассмотрим структуру файла, в котором записаны данные об учениках школы. Обратим внимание, что данные для каждой новой записи находятся в отдельных строках, а данные отдельных полей разделяются пробелами. При этом фамилии и инициалы учеников записаны также в отдельных строках. Это нужно потому, что при считывании строковой переменной, из файла считываются все данные до признака конца строки.
Структура файла с данными комбинированного типа
Задача
Написать программу, которая обрабатывает информацию о мальчиках школы и отбирает среди тех, кто родился в 2002 году кандидатов в баскетбольную команду школы, а также определяет среди кандидатов самого высокого. Рост кандидата в баскетбольную команду должен быть не меньше 170 сантиметров, а соотношение его роста и веса должно быть в промежутке от 2 до 2.8. Данные об учениках хранятся в файле, имя которого пользователь вводит с клавиатуры.
program basketbolisty;
type
data = record
d: 1..31;
m: 1..12;
g: word;
end;
uchenik = record
fio: string [20];
rost, ves: byte;
dr: data;
end;
var
student, basketbolist: uchenik;
f: text;
fn: string;
p: boolean;
begin
writeln ('Программа, отбирающая кандидатов в баскетбольную команду школы. Введите имя файла, в котором хранятся данные о мальчиках школы.');
readln (fn);
assign (f, fn);
reset (f);
readln (f);
basketbolist.rost:=0;
p:=false;
while not (eof (f)) do
begin
readln (f, student.fio);
readln (f, student.rost, student.ves, student.dr.d, student.dr.m, student.dr.g);
if (student.dr.g=2002) and (student.rost>=170) and ((student.rost/student.ves>=2) and (student.rost/student.ves<=2.8))
then begin
if not (p)
then begin
writeln ('Кандидаты в баскетбольную команду:');
p:=true;
end;
writeln (student.fio:22, student.rost:5, ' см.', student.ves:5, ' кг', student.dr.d:4, '.', student.dr.m:2);
if student.rost>basketbolist.rost
then basketbolist:=student;
end;
end;
close (f);
if p
then write ('Самый высокий кандидат: ', basketbolist.fio, basketbolist.rost:5, ' см.')
else write ('Кандидатов в команду не найдено.');
end.
Выполни задания
Повтори § 29.