Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль.doc
Скачиваний:
58
Добавлен:
07.06.2015
Размер:
1.21 Mб
Скачать

20.4. Записи

Записи — это совокупности элементов разных типов, имеющих общее имя и назначение. Примеры записей — адрес человека, анкетные данные, сводка об успеваемости и т.д. Массив – тоже совокупность данных, но одного типа. Компонентами (полями) записи могут быть переменные скалярного типа, строки, а также массивы и другие записи. Сами записи могут образовать массив.

В общем случае в разделе Type запись описывается так:

Type

Имя_записи = Record

Описания полей

end; {конец описания записи}

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

Пример.

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

Type

Adres = Record

Gorod : String [20];

Ul : String [20];

Dom : Integer;

Kv : Integer

End;

Рассмотрим еще один пример, в котором полем записи будет массив.

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

ФИО, номер зачетки, оценки по 5 предметам.

Type

Stud = Record

Fam : String[15];

Im : String[10]

Ot : String[15];

Numz : LongInt;

O :Array[1..5] Of Integer

End;

Используя этот тип, сведения о 25 студентах группы можно поместить в массив, описав его так: Var

Grup : Array[1..25] Of Stud;

RabAnk : Stud; { Рабочая переменная }

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

При этом имя поля будет составным вида:

Имя_записи.имя_поля.

Пример.

RabAnk.NumZ := 2100756; {Поле номера зачетки в переменной RabAnk}

RabAnk.Fam := ’Иванов’; {Поле фамилии в переменной RabAnk}

Для массивов записей:

Grup[1].Fam := ’Абрамова’; {Фамилия первого студента в группе}

Writeln(Grup[i].Numz); {Номер зачетки i–го студента в группе}

Write(Grup[10].O[1]); {оценка по первому предмету 10-го студента }

20.4.1. Примеры программ обработки записей

Пример 1. Ввести в ЭВМ ведомость студентов одной группы по пяти предметам. Вывести на экран фамилии и номера зачеток неуспевающих студентов.

Алгоритм

1. Ввести количество студентов (n).

2. Для номера студента (i) от 1 до n выполнить

ввести ведомость [i]

3. Количество_двоечников = 0.

4. Для i от 1 до n выполнить

4.1. колич_2 = 0

4.2. Для j от 1 до 5 выполнить

Если у ведомости [i].оценка[j] < 3, то

колич_2 = колич_2 + 1

4.3. Если колич_2 > 0, то

а) вывести ведомость [i],

б) Количество_двоечников = Количество_двоечников +1

5. Вывести Количество_двоечников.

6. Закончить.

Программа для этого алгоритма будет иметь вид

Program Count_2;

Const

Nmax=40; { Max количество студентов в группе }

Dl=15; { длина фамилии и имени }

M=5; { количество оценок }

Type

Stud = Record

Fam,Im,Ot : String [dl];

Numz : LongInt;

Otm : Array [1..m] Of Integer

End;

Var

Vedom : Array [1..Nmax] Of Stud;

i,j : Integer;

kdv,k2,n : Integer;

Begin

Writeln(’Введите количество студентов’);

Readln(n); {п. 1.}

Writeln(’Вводите информацию о каждом студенте’);

For i:=1 to n Do {п. 2.}

Begin

Write(’Фамилия: ’);

ReadLn(Vedom[i].Fam);

Write(’Имя: ’);

ReadLn(Vedom[i].Im);

Write(’Отчество: ’);

ReadLn(Vedom[i].Ot);

Write(’Номер зачетки: ’);

ReadLn(Vedom[i].Numz);

WriteLn(’Вводите оценки по одной:’);

For j := 1 to m do

Begin

WriteLn(’Введите ’,j,’ –ю оценку’);

ReadLn(Vedom[i].Otm[j]);

End;

End;

kdv := 0; {п. 3.}

Writeln(’Фамилии и номера зачеток двоечников’);

For i:=1 to n Do

Begin

k2 := 0; {п. 4.1.}

For j := 1 to m Do {п. 4.2.}

If Vedom[i].Otm[j] < 3 Then

k2 := k2+1;

If k2 > 0 Then {п. 4.3.}

Begin

kdv := kdv + 1;

Writeln(Vedom[i].Fam:16,Vedom[i].Numz:8)

End;

End;

Writeln(’Количество двоечников в группе - ’,kdv);

WriteLn(’Нажмите Enter...’);

ReadLn;

End.

Для сокращения записи программ с данными типа Record используется оператор With, который в общем случае записывается так:

With Имя_Записи Do