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

Пример.

With a, bd do

Begin

name := ‘Акимов’;

sex := men;

Year : =1900;

Month :=8;

Day :=25;

married := false;

end;

Нельзя использовать в операторах ввода-вывода запись целиком.

Writeln (a); –{ ошибка.}

Присваивать записи можно.

A:=b; { значения полей b в a }

7.3. Записи с вариантами (экономия пространства)

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

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

Type

Sex (men, wom);

People = record

Fam : string [15]; { array [1…15] of char;}

Dr:birthday;

Case mw : sex of

Men : ( voen:boolen; prof : string [20]);

Wom : ( mar:boolen; childs:integer)

End;

Var

M1,w1 : people;

---------------------------------------------------

With w1,dr do

Begin

Fam := ‘Иванова’;

year := 1980;

month := 12;

day :=1;

Mw:=wom;

mar := true;

childs := 2;

End.

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

Ключ выбора (или поле признака, дискриминанта, поле тега (этикетка)) обычно указывает вариант. При определении вариантной записи в стандартном Паскале требуется, чтобы все до одного значения ключа выбора были налицо, т.е. каждому значению был сопоставлен определенный вариант. Следовательно, если описать ключ выбора с типом integer , то пришлось бы описать 65535 вариантов (-32768..32767)

В turbo pascal все иначе.

Пример

Case N: integer of

1,12 : (cartons : integer);

13,144 : (crates : integer);

32000 : (truckboad : integer; datpos : array [1..5] of char)

У N всего пять значений.

Планируя размещение вариантной записи в памяти компьютера, компилятор всегда резервирует пространство, достаточное для самого протяженного из возможных вариантов. Таким образом, все варианты как бы накладываются друг на друга. Поскольку ключ выбора в предложении case … of фактически игнорируется компилятором., требование Паскаля к нему:

· Ключ должен определять некоторый стандартный или предварительно объявленный порядковый тип.

· Перед тем как использовать один из вариантов записи переменной выбора варианта (ключу выбора) следует присвоить соответствующее значение.

Пример использования массива записи

Задача. Программа вводит информацию о 30 студентах:

- фамилия;

- год рождения;

- год поступления в институт;

- оценки последней сессии.

Результат программы – список отличников.

Program zap;

Type

Student = record

Fam : string [15];

Yr : 1900.. 2000;

Yp : 2000...2007;

Marks : record

progr,mathem, engl, ist :1..5;

s:real

End

End;

Const

N=25;

Type

Var

Group : array [1..n] of student;

Person:student;

I,j:integer;

Begin

Writeln;

For i:=1 to n do

With group[i], marks do

Begin

Writeln (‘Введите данные’, I,’-го студента’);

Write (‘Введите фамилию’); Readln (fam);

Writeln (‘Введите год рождения, год поступления, оценки по программированию, математике, английскому, истории’);

Readln (yr,yp,progr,mathem, engl,ist);

End;

Writeln (‘Список отличников’);

For I :=1 to n do

With group[i], marks do

If (progr=5) and (mathem=5) and (engl=5) and (ist=5)

then writeln (fam,yr :6, yp:6)

end.

Пример:

Вывести данные о студентах, фамилии которых начинаются на букву «С» и средний балл у которых >4,5.

For I :=1 to n do

With group[i], marks do

begin

S:=(progr+mathem+engl+ist)/4;

(fam[1]=’C’) and (s>4.5) then

Writeln(fam, yr:6,yp:6)

End;

Пример: Упорядочить список студентов в порядке убывания среднего балла.

For I :=1 to n do

With group[i], marks do

S:=(progr+mathem+engl+ist)/4;

For I :=1 to n-1 do

For J :=i+1 to n do

If group[i].marks.s< group[j].marks.s then

Begin

Person:=group[i];

group[i] :=group[j];

group[j]:= Person

end;

{вывод}

For I :=1 to n do

With group[i], marks do

begin

write(fam);

Writeln(yr,’ ‘, yp,’ ‘, progr,’ ‘,mathem,’ ‘ , engl,’ ‘, ist,’ ‘, s:5:2)

End;

Множества

Понятие множества

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

Множества – это наборы однотипных связанных друг с другом объектов. Характер связи между объектами лишь подразумевается программистом, но не контролируется Т-П. Количество элементов, входящих в множество, может меняться 0-255. 1 элемент множества занимает 1 байт.

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

Нельзя обратиться к элементу множества по его индексу.

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

Описание типа множества имеет вид:

<имя типа> = set of <базовый тип>;

<имя типа> - правильный идентификатор;

set of - зарезервированные слова (множество ,из);

<базовый тип> - базовый тип элементов множества, используется любой порядковый тип, кроме WORD, INTEGER, LONGINT, SHORINT, т.е. порядковые значения нижней и верхней границы базового типа не должны выходить за пределы 0-255.

Пример

TYPE

Daytype = (mon,tue,wed,thu,fri,sat.sun);

VAR

Washdays,bathdays : set of daytype;

Можно вовсе опустить TYPE

VAR

Washdays,bathdays : set of (mon,tue,wed,thu,fri,sat.sun)

Несколько примеров определения переменных типа множество:

Var

Teaset : set of char;

Letters : set of ‘A’..’Z’;

digits: set of ‘0’..’9’;

dice: set of 2..122;

const

number :set of=[4,7,1,9];

Конструктор множества

Конструктор множества используется для задания множества: список элементов множества перечисляется через (,), обрамляется квадратными скобками.

Пример

Var

town : set of (Moscow, Kiev, Sochi);

S1,S2,S3 : set of ‘0’…’9’

S4,S5,S6 : set of 0…9;

S1=: [‘1’,’2’,’3’];

S2=: [‘3’,’2’,’1’];

S3=: [‘2’,’3’];

S4=: [0…3,6];

S5=: [4,5];

S6=: [3..9];

Переменная town множественного типа может принимать следующие значения:

[Moscow] [Kiev] [Sochi]

[Moscow,Sochi] [Moscow, Kiev] [Kiev, Sochi]

[Moscow, Kiev, Sochi] [ ]

В общем случае, если базовое множество содержит N элементов, производный множественный тип определяет Если фрагмент программы содержит операции над несколькими записями, то в операторе присоединения необходимо указать список переменных записей, разделенных запятыми - student2.ru подмножеств. Переменная town может принимать Если фрагмент программы содержит операции над несколькими записями, то в операторе присоединения необходимо указать список переменных записей, разделенных запятыми - student2.ru =8 различных значений.

Пример

Множество [‘c’..’a’] является пустым, т.к. в перечислении объектов базового типа порядковый номер ‘c’ > порядкового номера ‘a’.

Наши рекомендации