Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

I: integer;

Begin {Ball}

WriteLn('Введите массив данных из 25 строк');

for i := 1 to 25 do

ReadLn(tbl[i].fam, tbl[i].b1, tbl[i].b2, tbl[i].b3, tbl[i].b4, tbl[i].b5);

for i := 1 to 25 do

begin

tbl[i].sb := (tbl[i].b1+

tbl[i].b2+tbl[i].b3+tbl[i].b4+tbl[i].b5)/5;

WriteLn(tbl[i].sb);

end;

End. {Ball}

9.2 Оператор присоединения

Использование в программе селекторов записи (составных имен) приводит к ее удлинению и излишней громоздкости. С целью устранения этого неудобства в языке Паскаль используется оператор присоединения (оператор with), который позволяет осуществлять доступ к компонентам записи таким образом, как если бы они были простыми переменными. Общий вид оператора присоединения таков:

with <имя записи> do <оператор>

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

for i := 1 to 25 do

with tbl[i] do

ReadLn(fam,b1 ,Ь2,ЬЗ,Ь4,Ь5);

Окончательный вариант программы имеет следующий вид:

Пример 9.2 Определение среднего балла и сортировка

Program Shall;

Type

stud = record

fam : string[15];

b1,b2, bЗ, b4, b5:2..5; sb: real;

end ;

Var

tbl:array[1..25]ofstud;

у: stud;

I, j, k, m : integer;

X: real;

Begin {Sball}

{ввод исходных данных}

Writeln('Введите количество записей');

Read(m); {m - число записей в массиве tbl}

WriteLn(' Введите компоненты записей');

for i := 1 to m do

with tbl[i] do

ReadLn(fam, b1, b2, bЗ, b4, b5);

for i := 1 to m {вычисление среднего балла}

with tbl[i] do

sb := (b1+b2+bЗ+b4+b5)/5 ;

for i := 1 to m-1 do {copтировка списка группы студентов}

begin

k:=i;

x := tbl[i]. sb;

for i := i+1 to m do

if tbl[i] > x then

begin

k:=j;

x := tbl[j]. sb;

end;

у := tbl[k];

tbl[k] := tbl[i];

tbl[i] := y;

end;

for i := 1 to m do {печать результатов}

with tbl[i] do

WriteLn(fam : 15, sb : 6 : 3)

End. {Sball}

В приведенной программе приняты следующие обозначения: т -число студентов в группе (может быть представлено целым числом от 1 до 25); у - вспомогательная запись, необходимая для промежуточного за­поминания элемента массива tbl при перестановке значений его элемен­тов; х, к - вспомогательные переменные для запоминания максимального текущего значения среднего балла и его индекса в массиве записей.

9.3 Вложенные записи

Допускается использование записи в качестве элемента другой запи­си. В результате получается сложная запись.

Пример 9.3 В памяти ЭВМ требуется хранить анкетные данные, представленные в виде следующей таблицы.

Анкета

п/п

Ф.И.О.

Дата рождения

Пол

Фамилия

Имя

Отчество

Год

Месяц

Число

Обозначим запись через идентификатор anketa, который определим в разделе описания переменных следующим образом:

Var

anketa : record

npp : integer;

fio: record

fam, im, ot: string[15];

end ;

dr: record

god: 1900. .2100;

mes: string[8];

den: 1 ..31;

end ;

pol: string[3];

end;

Элементами записи anketa являются также записи fio и dr. В резуль­тате получается сложная запись. Запись anketa содержит анкетные дан­ные одного лица. Если программист намеревается хранить анкетные дан­ные о 100 человеках, то либо запись anketa должна иметь тип массива с числом элементов 100, либо каждый элемент второго уровня (nрр, fiо, dr, pol) должен быть массивом с числом элементов 100.

При обращении к компонентам сложных записей можно использо­вать оператор with, имеющий вложенную структуру с любой степенью вложенности. Например, обращение к полю происходит с помощью со­ставного имени anketa.dr.god, а с использованием оператора присоедине­ния - с помощью конструкции

with anketa do

with dr do

god := 1965 ;

Или несколько проще:

with anketa, dr do

god := 1965 ;

Использование оператора присоединения существенно облегчает на­писание программ и делает более эффективным многократное обращение к полям одной записи.