Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Лабы_Ч2.doc
Скачиваний:
5
Добавлен:
09.11.2019
Размер:
2 Mб
Скачать

7.1.23Массивы записей

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

type

TAttArray = array[1..100] of TAttRec;

При обращении к элементу массива записей также используются индексы, заключаемые в квадратные скобки. При этом следует учитывать, что элементом массива является запись и, поэтому, квадратные скобки ставятся после имени записи, а затем, через точку, записывается имя поля.

Например.

var a: TAttArray;

a[1].fio:=’Петренко А,П,’;

a[1].gr := ‘КС041’;

a[1].srBall := ‘3.2’;

7.1.24Поля записей как массивы

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

Ниже описан другой вариант типа записи, который предусматривает наличие массива оценок в записи вместо среднего балла.

type

TMarkArray = array[1..10] of integer;

TAttRecord = record

Fio : String[20]; Gr : String[5]; marks : TMarkArray;

end;

При обращении к элементам массива, являющегося полем записи квадратные скобки с индексом следует ставить уже после имени поля.

Например.

var r: TAttRecord;

r.mark[1]:=5;

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

Рассмотрим пример, в котором описан массив результатов модульного контроля с массивами оценок.

type

TMarkArray = array[1..10] of integer;

TAttRecord = record

Fio : String[20]; Gr : String[5]; marks : TMarkArray;

end;

TAttArray=array[1..100] of TAttRecord;

var a: TAttArray;

a[15].mark[6]:=5;

Здесь в запись под номером 15 заносится пятерка по предмету под номером 6.

7.1.25Сортировка массивов записей

Сортировка массива записей производится так же, как и сортировка массива чисел, то есть записи сравниваются и, если необходимо, переставляются. Единственная проблема здесь заключается в том, что способов сравнения записей, а, следовательно, и вариантов сортировки, может быть много, и каждый из них может понадобиться. Так для массива, рассмотренного в предыдущем примере, записи можно сортировать по фамилии студента или по среднему баллу, найденному из массива оценок, по количеству неудовлетворительных оценок и т.д. Более того, возможны и более сложные случаи сортировки, например, по группе, а в пределах одной группы по фамилии студента.

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

7.1.26Ввод-вывод записей

При организации ввода-вывода следует иметь в виду, что непосредственно запись ввести или вывести, без использования специально написанных процедур, нельзя. Можно вводить или выводить отдельные поля записи, или элементы полей, если поля имеют сложную структуру.

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

Исходя из изложенных особенностей, можно рекомендовать вводить и выводить записи через компонент TStringGrid. Нулевую строку компонента целесообразно использовать для вывода названий полей, а в следующей строке выводить или выводить их значения. При работе с массивом технология работы остается та же. Количество столбцов и строк компонента, а также названия полей в нулевой строке можно задать программно, при загрузке формы.

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

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

При выводе массива записей количество строк компонента TStringGrid можно настраивать программно, в соответствии с количеством записей в массиве.