Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к зачету .doc
Скачиваний:
13
Добавлен:
13.08.2019
Размер:
317 Кб
Скачать
☆
  1. Множества.

Множество представляет собой набор элементов одного порядкового типа. Элементы множества считаются неупорядоченными; каждый элемент может входить во множество не более одного раза. Тип множества описывается следующим образом:

set of базовый тип

В качестве базового может быть любой порядковый тип с элементами, для которых функция Ord возвращает значения в диапазоне от 0 до 255. Например:

type   ByteSet = set of byte;   CharSet = set of char;   Digits = set of '0'..'9';   SeasonSet = set of (Winter,Spring,Summer,Autumn);

Переменная типа множество занимает 16 байт и может содержать несколько значений базового типа. Чтобы сконструировать значение типа множество, используется конструкция вида

[список значений]

где в списке могут перечисляться через запятую либо выражения базового типа, либо их диапазоны в виде a..b, где a и b - выражения базового типа. Например:

var   bs: ByteSet;   bestdays: (Mon,Tue,Wed,Thi,Thr,Sat,Sun); ... bs:=[1,3,5,20..25]; bestdays:=[Wed,Thr..Sun];

Значения в списке могут отсутствовать, тогда множество является пустым:

bs:=[];

Операция in проверяет принадлежность элемента множеству:

if Wed in bestdays then ...

Для множеств определены операции

+ (объединение)

- (разность)

* (пересечение)

= (равенство)

<> (неравенство)

<= (вложено)  

>= (содержит)

При присваивании множеству при необходимости происходит усечение его элементов до значений базового типа. Например:

var st: set of 3..9; ... st:=[1..5,8,10,12]; // в st попадут значения [3..5,8]

Чтобы вывести значения элементов множества, необходимо перебрать всевозможные значения в цикле и проверить их на принадлежность множеству с помощью операции in:

for i:=0 to 255 do   if i in st then write(i,' ');

  1. Процедурные типы.

Модель объекта (человека) – запись

Модели действий – операции (функции) над записями

Поле записи – процедурный тип

Type tproc=procedure (x:real;var y:char);

Var p1,p2:tproc;

Type tfunkr=function (x:real):real;

Var fr1,fr2:tfunkr;

Var r1,r2:real;

f r1:=sin; r1:=sin(x); операции распроцедуривания

fr2:=ln; r2:=ln(x);

Значения процедурного типа – метка процедуры

1 ) Описание процедурной константы в Паскале:

P rocedure p имя константы (x:real,var y:char); тип константы

Begin

… значение константы

End;

P1:=p;

2 ) Не в Паскале:

C onst константа p имя константы = tproc; тип константы

Begin

… значение константы

End;

Распроцедуривание

P

Call (P) – префиксная запись

P () – постфиксная запись

Function f():real;

1) для статической типизации:

R:real; r:=f; вызвать функцию

P:проц переменная; p:=f; присваивается процедурная метка

2) для динамической типизации

Не обойтись без явной операции распроцедуривания

  1. Типовая безопасность. Идентичность типов.

Обход типового контроля:

R:record

x,y:real;

case a:char of

‘+’ : (m,n:real; c:boolean);

‘-‘ : (q:char; r:string);

‘*’ : (s:boolean; t:char);

Память будет выделена по максимуму, то есть по второй строке,

R.m:=3,14;

Writeln(R.r); - строка, которая начинается со второго байта, и в ней «неизвестное» значение длины строки r

Идентичность:

- структурная (в Паскале)

- именная (идентичность определяется через имена, структура не учитывается)

Если тип данных абстрактный, то говорить об идентичности сложно

В маткаде есть единицы измерения, язык может преобразовывать единицы измерения

Система Ады:

- тип

- родовой тип

- производный тип

Type t1=new t;

T ype t-ves is new float; разные, неприводимые друг к другу типы

Type t-rass is new float

- уточненный тип

Type tполож is new float 0..float`max – все операции переносятся, ограничение по значениям

- подтип

Type t1 is subtype t;