- •Программирование и алгоритмические языки
- •Основные понятия процедурного программирования. Области и процедуры
- •Способы обозначения и определения процедур
- •Языки блок-схем
- •Трассировка программы
- •Структурное программирование
- •Программы, как файловые процедуры
- •Итерационные и рекуррентные последовательности
- •Восходящее и нисходящее программирование
- •Язык программирования Pascal
- •Процедурный Паскаль Синтаксис Паскаль-программы
- •Основные операторы
- •Классификация типов Простые (скалярные) типы
- •Стандартные типы
- •Пользовательские скалярные типы данных
- •Алгоритмическое определение булевских операций
- •Стратегия вычисления условий
- •Вычисление кванторов
- •Символьный тип
- •Производные(структурные) типы Массивы
- •Операции над массивами
- •Расширенный синтаксис. Массивы размерности n.
- •Строки. Динамические массивы.
- •Комбинированные типы и записи
- •Оператор присоединения
- •Типизированные файлы.
- •Упорядоченные файлы
- •Поиск в упорядоченном файле
- •Арифметика упорядоченных файлов
- •Дихотомический поиск в упорядоченном массиве
- •Простые алгоритмы сортировки
- •Множества
- •Операции над множествами
- •Решето Эратосфена
- •Подпрограммы. Пользовательские процедуры и функции
- •Синтаксис обращения к процедурам
- •Синтаксис использования или обращения к процедурам.
- •Семантика
- •Правила построения модифицированного тела:
- •Пользовательские процедуры (продолжение)
- •Подпрограммы и функции
- •Описание функции
- •Обращение к функции
Множества
Синтаксис: set of T, где Т – произвольный порядковый тип.
Семантика:
Значения типа set of T – произвольные конечные совокупности значений вида a1, … ,an типа Т. Рассматриваемые совокупности не считаются упорядоченными. Все множества, полученные перестановкой элементов a1, … , an считаются равными.
Синтаксис констант [E1, … , En], где Ei – есть выражение типа Т, либо интервалы вида Еi1 … Ej2, где Еi1 … Ej2 – выражение типа Т, например [2,2,1,…,7].
Операции над множествами
Предикаты.
X in S ~ XS
S1<=S2 ~ S1 S2
Теоретико-множественные операции.
S1+S2 ~ S1S2
S1*S2 ~ S1S2
S1-S2 ~ S1\ S2
Эквивалентность теоретико-множественных и логических обозначений.
Любое множество однозначно связывается с формулой – характеристической формулой (предикатом множества).
Fs(x)=true(~)xS
Сопоставим теоретико-множественные операции, логические операции над предикатами.
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 – это не имя переменной (в программистском смысле), она не именует никакую область памяти. С другой стороны, это переменная в математическом смысле, поскольку определена область значений.
Область описаний ← Блок → Составные операторы
Объекты, определённые в соответствие определения процедуры в блоке, называются локальными; определённые вне этого блока – глобальными.
Блоки могут быть вложены друг в друга.
(Рисунок)
Фрагмент блока, начинающийся с описания объекта до конца блока, называется областью действия этого объекта. Именно в этом фрагменте соответствующее определению имя имеет заданные этим определением значения. Вне области действия имя либо имеет другой смысл, либо не имеет никакого смысла.
Здесь встречаемся с проблемой конфликта (коллизии) имён – несколько разных объектов могут носить одно и то же имя. Всегда имеется в виду наиболее локальное описание.