Кодинг
★ Рубрика: Кодинг
★ Тема: Pascal

Записи в Паскале

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

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

Пример. Запись, характеризующая адрес человека, очевидно, должна содержать сведения о городе, улице, № дома, № квартиры. Структура соответствующей записи в разделе 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-го студента}
Пример. Ввести ведомость студентов одной группы по пяти предметам. Вывести на экран фамилии и номера зачеток неуспевающих студентов.
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); 
Writeln(’Вводите информацию о каждом студенте’);
For i:=1 to n Do 
 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; 
Writeln(’Фамилии и номера зачеток двоечников’);
For i:=1 to n Do
Begin
k2 := 0; 
For j := 1 to m Do 
If Vedom[i].Otm[j] < 3 Then
k2 := k2+1;
If k2 > 0 Then 
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 Оператор;

В Операторе к полям записи автоматически добавляется Имя_Записи. С использованием этого оператора цикл ввода данных в приведенной выше программе был бы записан так
For i:=1 to n Do
 With Vedom[i] do
 Begin
 Write(’Фамилия: ’);
 ReadLn(Fam);
 Write(’Имя: ’);
 ReadLn(Im);
 Write(’Отчество: ’);
 ReadLn(Ot);
 Write(’Номер зачетки: ’);
 ReadLn(Numz);
 WriteLn(’Вводите оценки по одной’);
 
 For j := 1 to m do
 Begin
 WriteLn(’Введите ’,j,’ –ю оценку’);
 ReadLn(Otm[j]);
 End;
 End; { With }
 Похожие публикации: Pascal

Войти и комментировать [ Вход | Регистрация ]