- •Программирование и алгоритмические языки
- •Основные понятия процедурного программирования. Области и процедуры
- •Способы обозначения и определения процедур
- •Языки блок-схем
- •Трассировка программы
- •Структурное программирование
- •Программы, как файловые процедуры
- •Итерационные и рекуррентные последовательности
- •Восходящее и нисходящее программирование
- •Язык программирования Pascal
- •Процедурный Паскаль Синтаксис Паскаль-программы
- •Основные операторы
- •Классификация типов Простые (скалярные) типы
- •Стандартные типы
- •Пользовательские скалярные типы данных
- •Алгоритмическое определение булевских операций
- •Стратегия вычисления условий
- •Вычисление кванторов
- •Символьный тип
- •Производные(структурные) типы Массивы
- •Операции над массивами
- •Расширенный синтаксис. Массивы размерности n.
- •Строки. Динамические массивы.
- •Комбинированные типы и записи
- •Оператор присоединения
- •Типизированные файлы.
- •Упорядоченные файлы
- •Поиск в упорядоченном файле
- •Арифметика упорядоченных файлов
- •Дихотомический поиск в упорядоченном массиве
- •Простые алгоритмы сортировки
- •Множества
- •Операции над множествами
- •Решето Эратосфена
- •Подпрограммы. Пользовательские процедуры и функции
- •Синтаксис обращения к процедурам
- •Синтаксис использования или обращения к процедурам.
- •Семантика
- •Правила построения модифицированного тела:
- •Пользовательские процедуры (продолжение)
- •Подпрограммы и функции
- •Описание функции
- •Обращение к функции
Символьный тип
Множество значений: некоторое множество алфавитных символов, фиксированных данной версией языка. Любой такой алфавит считается упорядоченным, т.е. символьный тип – порядковый, значит определено c1<с2, если c1 идет в алфавите раньше, чем с2. Также succ(c), pred(c).
Известно, что любой алфавит содержит малые и большие латинские символы и буквы, причем они упорядочены в естественном смысле:
‘a’<’b’<’c’<…
‘A’<’B’<’C’<…
Переменная Буквенная константа
a ‘a’
‘0’<’1’<’2’<…
Кроме того, на символьном типе определены операции chr и ord.
chr(i) – выдает символ с заданным номером i
ord(a) – выдает номер символа
Символьный тип является универсальным в том смысле, что значение любого другого типа как-то обозначается в некоторой фиксированной системе обозначения.
Задача: определить данное целое число по его записи в десятичной системе.
Упражнение:
Определить данное целое число по его записи
Обратное: выяснить запись числа по его значению
Достаточно:
Научиться находить значения цифр (‘0’,’1’,…,’9’). Это решит задачу в случае символьной последовательности длиной 1.
Научиться вычислять значение числа по значению входящих в его запись символов.
‘2’,’0’,’0’,’1’
2001
2•103+0•102+0•101+1•100
Надо вычислить со старшей цифры.
m=1 ord(c)-ord(‘0’)
m=2 n=
n+1=ni•10+ci
Обратная задача.
Дано число, перевести его в символьное представление.
n[0,9] chr(n+ord(‘0’))
n=
ci+1=ni mod 10
ni+1=ni div 10
Идея: вычислять c и n по рекуррентной схеме до тех пор, пока n не станет равно 0.
Недостаток решения: знаки порождаются в обратном порядке.
Упражнение 3: Найти схему порождения записи числа в «естественном» порядке.
Производные(структурные) типы Массивы
A :array[I] of T , где Т произвольный тип (в стандарте, кроме файлов). I – произвольный конечный порядковый тип.
Семантика:
Множество значений:
частный случай: тип индексов I есть ограничение целого типа [1..n], [0..n]. В этом случае множество значений – класс всех последовательностей фиксированной длины n. Тип «массив» - статический; f: NT, т.е. фу нкций из интервала [1,n] T
В общем случае значениями являются функции. f: IT. I – не интервал, из I в T все функции на конечном множестве аргументов. Массив – явно определяемая, табличная функция (соответствие).
Операции над массивами
Единственная операция над массивами – операция выборки, синтаксис A[e] – A – имя массива, e – любое выражение типа I (a[e]=app(a,e) от двух переменных). Семантика зависит от места, занимаемой операции в присваиваниях.
Напомню, с точки зрения семантики мы рассматриваем (кратные) присваивания как стандартное обозначение любого оператора.
Справа в присваивании операция выборки означает вычисление массива (как функции) в заданной «точке», т.е. по аргументу-индексу.
Пример. y:=a[x]. Значение y становиться равным значению a(x).
При отдельном рассмотрении соответствующий оператор применения функции к аргументу называется оператором аппликации.
Слева в присваивании операция выборки означает переопределение массива (как функции) в заданном аргументе.
Пример. a[x]:=y. Значение a[x] становиться равным текущему значению переменной y.
В любом случае, значение индекса должно принадлежать области определения массива. В противном случае говорят об ошибке «выхода за границы массива».