Вопросы и задания
1. Чем комбинированный тип данных отличается от регулярного типа данных (массива)?
Комбинированный тип данных (запись) отличается от регулярного типа данных (массива) тем, что он может содержать несколько полей разных типов данных, представляя собой структуру данных, где каждое поле имеет свое имя и свой тип данных. В то время как массив представляет собой коллекцию элементов одного и того же типа данных.
2. Что такое запись?
Запись (record) в программировании - это комбинированный тип данных, который может содержать поля различных типов данных.
3. Опишите комбинированный тип для записей, содержащих следующие данные учеников: фамилию, имя, год рождения, рост (в сантиметрах), вес (в килограммах).
type Student = record LastName: string; FirstName: string; BirthYear: integer; HeightCM: integer; WeightKG: real; end;
4. Опишите содержимое текстового файла, из которого будут вводиться данные, соответствующие описанию из предыдущего задания, для нескольких учеников класса (не менее пяти).
Иванов Иван 2005 175 65.5 Петров Петр 2006 170 60.0 Сидорова Ольга 2005 160 55.2
5. Напишите программу, по которой будут введены данные из файла, описанного в предыдущем задании, и выполнена следующая обработка:
1) определение среднего роста и среднего веса всех учеников;
2) вывод на экран и в файл rost.txt списка (фамилии, имена, возраст) учеников, рост которых выше среднего роста;
3) вывод на экран и в файл ves.txt списка учеников, вес которых ниже среднего веса.
program StudentsProcessing;
var InputFile: text; StudentData: Student; TotalHeight, TotalWeight: real; Count: integer; AvgHeight, AvgWeight: real; RostFile, VesFile: text;
begin Assign(InputFile, 'students.txt'); Reset(InputFile);
TotalHeight := 0; TotalWeight := 0; Count := 0;
while not eof(InputFile) do begin read(InputFile, StudentData); TotalHeight := TotalHeight + StudentData.HeightCM; TotalWeight := TotalWeight + StudentData.WeightKG; Count := Count + 1; end;
if Count > 0 then begin AvgHeight := TotalHeight / Count; AvgWeight := TotalWeight / Count; end else begin AvgHeight := 0; AvgWeight := 0; end;
writeln('Средний рост всех учеников: ', AvgHeight:0:2, ' см'); writeln('Средний вес всех учеников: ', AvgWeight:0:2, ' кг');
Assign(RostFile, 'rost.txt'); Rewrite(RostFile); Assign(VesFile, 'ves.txt'); Rewrite(VesFile);
Reset(InputFile);
while not eof(InputFile) do begin read(InputFile, StudentData); if StudentData.HeightCM > AvgHeight then writeln(RostFile, StudentData.LastName, ' ', StudentData.FirstName, ' ', StudentData.BirthYear); if StudentData.WeightKG < AvgWeight then writeln(VesFile, StudentData.LastName, ' ', StudentData.FirstName, ' ', StudentData.BirthYear); end;
Close(InputFile); Close(RostFile); Close(VesFile); end.
6. Решите предыдущую задачу, не используя в программе массива записей. Подсказка: оператор Reset можно использовать в программе многократно для повторного чтения файла, начиная с его первой записи.
program StudentsProcessingNoArray;