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

Множества

Синтаксис: set of T, где Т – произвольный порядковый тип.

Семантика:

Значения типа set of T – произвольные конечные совокупности значений вида a1, … ,an типа Т. Рассматриваемые совокупности не считаются упорядоченными. Все множества, полученные перестановкой элементов a1, … , an считаются равными.

Синтаксис констант [E1, … , En], где Ei – есть выражение типа Т, либо интервалы вида Еi1 … Ej2, где Еi1 … Ej2 – выражение типа Т, например [2,2,1,…,7].

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

  1. Предикаты.

X in S ~ XS

S1<=S2 ~ S1 S2

  1. Теоретико-множественные операции.

S1+S2 ~ S1S2

S1*S2 ~ S1S2

S1-S2 ~ S1\ S2

  1. Эквивалентность теоретико-множественных и логических обозначений.

Любое множество однозначно связывается с формулой – характеристической формулой (предикатом множества).

Fs(x)=true(~)xS

Сопоставим теоретико-множественные операции, логические операции над предикатами.

x  S ~ Fs(x) =true

S1 S2 ~  x  S1 (x  S2)

x  S1  S2 ~ fs1(x) or fs2(x)

x  S1  S2 ~ fs1(x) and fs2(x)

x  S1\ S2 ~ fs1(x) and not fs2(x)

Двойственность теории множеств и логики можно использовать для компактной записи свойств.

((x>=1)and(x<=10)) or ((x>=20)and(x<=40))

x:n[1..10]+[20..40]

Решето Эратосфена

Найти все простые числа меньше заданного числа n.

Program Eratos(input,output);

Type tNumbers=0,255;

Var n:integer;

Primes: set of tNumbers;

Numbers: set of tNumbers;

Begin

Read(n);

Numbers:=[2,n]

Primes:=[ ];

While Numbers<>[] do

Begin

{найти первое в Numbers}

While not (p in numbers) do p:=p+1;

{положить его в Primes }

Primes:=Primes+[p]

{удалить его и все кратные из Numbers}

K:=p;

While k<=n do

begin

Numbers:=numbers - [k];

K:=k+p;

end;

end;

{печать Primes}

For k:=1 to n do if k in Primes then write(k);

end.

Подпрограммы. Пользовательские процедуры и функции

Вычислить: Y:=(A+b)*C+D*(A-D)/(C-D), где A,B,C,D  Q

Type tRational;

Var A,B,C,D : tRational;

Y: tRational

Z,T: tRational;

Chis,znam:integer;

Begin

{read(a,b,c,d)}

{y:=a+b};{z:=a-b};{t:=c-d};{z:=z/t}

{z:=d+z}{y:=y+z}

{write(y)}

end;

Синтаксис обращения к процедурам

Текст включающий в себя области описаний (констант, типов, процедур и функций) и составной оператор, наз

Имена → значения

Procedure → имя (список формальных параметров).

Блок → тело процедуры (запись, алгоритм вычислений).

Любая функция (процедура) определяется некоторым выражением, но выражение определяет несколько функций. Список формальных параметров состоит из выражений вида: v:t или var v:t, где t – имя типа, v – идентификатор.

V – это не имя переменной (в программистском смысле), она не именует никакую область памяти. С другой стороны, это переменная в математическом смысле, поскольку определена область значений.

Область описаний ← Блок → Составные операторы

Объекты, определённые в соответствие определения процедуры в блоке, называются локальными; определённые вне этого блока – глобальными.

Блоки могут быть вложены друг в друга.

(Рисунок)

Фрагмент блока, начинающийся с описания объекта до конца блока, называется областью действия этого объекта. Именно в этом фрагменте соответствующее определению имя имеет заданные этим определением значения. Вне области действия имя либо имеет другой смысл, либо не имеет никакого смысла.

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