Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ПАЯ (1-й семестр).doc
Скачиваний:
10
Добавлен:
20.11.2019
Размер:
1.23 Mб
Скачать

Комбинированные типы и записи

Record

N1: T1;

……..

Nm: Tm;

End.

Значениями типа «запись» являются функцией с областью определения, состоящей из имен N1,…,Nm. Причем f(N1)Ti i=1,…,m

В математике такая конструкция называется именованном декартовым произведением.

Просто декартовым произведением называется множество всех последовательностей длины m, таких, что tiTi.

Например

Real2=Real•Real

{<t1,t2>, t1real, t2real}

Запись – это набор переменных N1,…,Nm, типа T1,…,Tm, воспринимаемый как единое целое. Основная операция – операция выборки, с той же семантикой, что и у массивов, но с другим синтаксисом.

r.Ni, где r – переменная тип «запись», Ni – одно из имен N1,…,Nm.

Понятие «запись» не вычислительное, а логическое – это описание состояния некоторого объекта.

type

tTochka = record

x,y: real;

end;

{x,y – декартовы координаты точки}

record

ugol,radius: real;

end;

{полярные координаты точки}

Вычислить значение многочлена

Begin

read(n,x,a);

s:=a; k:=1;

for i:=1 to n do

begin

read(a);

k:=x•k;

s:=s+a•k;

end;

write(s);

End.

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

Type complex=record

re:real;

comp:real;

end;

Var i,n: integer;

l:real;

x,a,k,s: complex;

Begin

read(n,x.re,x.comp,a.re,a.comp);

s.re:=a.re;

s.comp:=a.comp;

k.re:=1;

k.comp:=0;

for i:=1 to n do

begin

read(a.re,a.comp);

l:=k.re;

k.re:=x.re•k.re-x.comp•k.comp;

k.comp:=x.re•k.comp+l•x.comp;

s.re:=s.re+a.re•k.re-a.comp•k.comp;

s.comp:=s.comp+a.re•k.comp+a.re•x.comp;

end;

if s.comp<0

then

write(s.re,‘-’,abs(s.comp))

else

write(s.re,‘+’,abs(s.comp));

End.

Упражнение: написать программу зачисление абитуриентов в университет. В ходе зачисления используется информация:

  1. ФИО

  2. уникальный код абитуриента

  3. оценка за экзамен

  4. зачет/незачет по русскому языку

  5. наличие медали

Абитуриент зачисляется, если он либо имеет медаль и 5 за первый экзамен, либо не имеет двоек и его средний балл больше проходного (считаем, что проходной балл уже подсчитан).

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

Для того чтобы избежать необходимости выписывать полное точечное обозначение поля записи можно применять оператор присоединения вида: with r do s, где r – имя переменной типа «запись», а s – один оператор, в котором вместо имен вида r.Ni можно использовать имена вида Ni.

Семантика: оператор эквивалентен выполнению оператора S, в котором все имена вида Ni заменены именами вида r.Ni.

Типизированные файлы.

file of T, где Т – произвольный статический тип, кроме файла.

Семантика: последовательность компонент типа Т, произвольной длины.

Операторы: Assign (AssignFile), reset, rewrite, eof, close (CloseFile) – имеют ту же семантику. Операторы read и write имеют очевидную семантику, но другой синтаксис.

Read(f,v), где f – имя файла, v – единственная переменная типа Т.

Write(f,e), где f – имя файла, где е – единственное выражение типа Т.

Понятие строки и операции readln, writeln, eoln в этом случае не определены.