
Массивы записей
Тип записи может быть использован при объявлении компонентов массива. Например, используя тип записи Student, можно объявить массив Gruppa:
type Student = record Fam: string; Ball: array[1..4] of 2..5; end; var Gruppa: array [1..30] of Student; |
Каждый элемент этого массива представляет собой запись, содержащую фамилию студента и его 4 оценки. Для занесения в массив отличной оценки за первый экзамен второму студенту группы можно использовать оператор:
Gruppa[2].Ball[1] := 5;
а для I-того студента за третий экзамен хорошей оценки: Gruppa[I].Ball[3] := 4;
Пример обработки массива записей
Рассмотрим задачу обработки массива записей. Запись имеет следующую структуру:
Требуется определить в заданном массиве записей "стул" фамилию директора, выпускающего самые дешевые в среднем стулья. Опишем структуру записи:
type Izgot = record {запись "изготовитель"} Gor, Fab, Fam : string; end; Stul = record Mater: string; {запись "стул"} H : real; Cena : integer; Iz : Izgot; end; MasZap = array[1..100] of Stul; |
Исходные данные: |
N - число записей в массиве; |
|
Mas[1..N] - массив записей "стул" типа MasZap |
Результат: |
фамилия директора |
Предполагаем, что нет одноименных фабрик. Задачу можно разбить на две подзадачи:
1. Формирование массивов:
MasFab - содержит все различные фабрики-изготовители; KolSt - содержит число видов стульев, выпускаемых каждой фабрикой; SumCen - содержит сумму цен всех видов стульев, выпускаемых на соответствующей фабрике.
2. Вычисление номера фабрики (в массиве MasFab), выпускающей стулья с минимальной средней ценой. После этого можно напечатать фамилию директора этой фабрики.
Покажем, как можно, осуществив систематическую декомпозицию, свести поставленную задачу к комбинации простых типовых алгоритмов.
Алгоритм Обработка_массива_записей Начало обнуление счетчика числа различных фабрик цикл перебора всех записей поиск фабрики в массиве MasFab если фабрика-изготовитель текущего стула еще не встречалась ранее то - запоминание новой записи "изготовитель" в массиве MasFab; - инициализация счетчика числа видов стульев в массиве KolSt; - инициализация суммарной цены стульев в массиве SumCen; иначе - увеличение счетчика числа видов стульев в массиве KolSt для найденной фабрики; - увеличение суммарной цены стульев в массиве SumCen для найденной фабрики; все кц Min = большое положительное число цикл перебора средних цен стульев всех различных фабрик если средняя цена < Min то - запоминание номера соответствующей фабрики; - запоминание в Min средней цены; все кц вывод (фамилии директора фабрики с найденным номером) Конец |
Решение использует следующие типовые алгоритмы:
- вычисление нового массива, число элементов которого заранее неизвестно (использование счетчика); - вычисление массива, содержащего все различные элементы ("отсутствие/присутствие"); - вычисление суммы элементов массива; - поиск номера минимального элемента в массиве.