- •Программирование и алгоритмические языки
- •Основные понятия процедурного программирования. Области и процедуры
- •Способы обозначения и определения процедур
- •Языки блок-схем
- •Трассировка программы
- •Структурное программирование
- •Программы, как файловые процедуры
- •Итерационные и рекуррентные последовательности
- •Восходящее и нисходящее программирование
- •Язык программирования Pascal
- •Процедурный Паскаль Синтаксис Паскаль-программы
- •Основные операторы
- •Классификация типов Простые (скалярные) типы
- •Стандартные типы
- •Пользовательские скалярные типы данных
- •Алгоритмическое определение булевских операций
- •Стратегия вычисления условий
- •Вычисление кванторов
- •Символьный тип
- •Производные(структурные) типы Массивы
- •Операции над массивами
- •Расширенный синтаксис. Массивы размерности n.
- •Строки. Динамические массивы.
- •Комбинированные типы и записи
- •Оператор присоединения
- •Типизированные файлы.
- •Упорядоченные файлы
- •Поиск в упорядоченном файле
- •Арифметика упорядоченных файлов
- •Дихотомический поиск в упорядоченном массиве
- •Простые алгоритмы сортировки
- •Множества
- •Операции над множествами
- •Решето Эратосфена
- •Подпрограммы. Пользовательские процедуры и функции
- •Синтаксис обращения к процедурам
- •Синтаксис использования или обращения к процедурам.
- •Семантика
- •Правила построения модифицированного тела:
- •Пользовательские процедуры (продолжение)
- •Подпрограммы и функции
- •Описание функции
- •Обращение к функции
Расширенный синтаксис. Массивы размерности n.
Пусть Т – произвольный тип (кроме файлового).
Для записи типа array[I1] of array [I2] of T и соответствующей перации выборки a [x][y] допустим более компактный синтаксис array[I1 ,I2] of T и a[i,j]
Аналогично вводятся обозначения вида array[I1,…,In] of T и a[i1,…,in];
Обычно такой случай связывается с матрицами размерности n.
Задача: подсчитать частоту вхождений каждой малой буквы в заданный текст.
Вычисляется функция: область определения – символы [‘a’, …, ‘s’], область значения – N (натуральные числа).
{ki – количество вхождений i-ой буквы алфавита}
assign(f,’…’);
reset(f);
for c:=’a’ to ‘z’ do k[c]:=0;
while not eof(f) do
begin
read(f,c);
k[c]:=k[c]+1;
end;
close(f);
Статические массивы выглядят не очень естественным представлением данных в случае последовательностей произвольной длины или функций с расширяемой областью определения. В таких случаях более естественно рассматривать последовательности не более, чем заданной длины (функции, области определения которых содержаться в фиксированном множестве). Назовем такие массивы «псевдодинамическими».
Строки. Динамические массивы.
array of T.
Множество значений: все функции с множеством значений Т и областью определения nN.
Основная операция – операция выборки.
Описание переменной вида a: array of T в реальности определяет функцию с пустой областью определения. Потому, например, присваивание вида a[1]:=1; будет ошибкой.
Реальная область значений определяется динамически, т.е. в ходе выполнения программы с помощью оператора setlength(a,b); a – имя динамического массива; b – выражение, принимающее значения, натурального типа. Текущую длину можно определить с помощью функции length(а). Контроль за выходом за границы массивов в этом случае не осуществляется автоматически.
Обычная операция выборки имеет ту же семантику, что и для статических массивов. Другие (например присваивание) – нет. Смотри далее – ссылочный тип.
Упражнение: запрограммировать операции над последовательностями, представляя их псевдодинамическими и динамическими массивами.
Включение и удаление компоненты с заданным номером или заданным значением.
Объединение, разность, пересечение, множества компонент.
Динамические массивы появляются только в Object Pascal или Delphi, но задолго до этого появляется их частный случай – динамические символьные массивы или строки.
String имеет максимальную длину 255 символов. Кроме очевидных операций выборки, установки длины и функции длины, на типе определены следующие операции:
Конкатенация (сцепление)
S:=S1+S2, где S1=c1,…,cn, S2= c1…cm, S=c1,…,cn,c1…cm
Предикат сравнения строк. Словарный (лексикографический) порядок: S1<S2, S1=c1…cn, S2=c1…cm. Пусть i – наименьшее число, такое что ci<ci. Если такого i не найдено, то строки равны. S1<S2, если ci<ci в смысле установленного ранее порядка на типе char.
‘шабаш’<‘шалаш’
‘шабаш’<‘шабашка’
В случае неодинаковой длины считаем что меньшее слово дополнено нужным количеством пустых символов, которые меньше любого символа алфавита.
В Паскале тип string не считается порядковым, но соответственные функции succ и pred не трудно определить.
Упражнение: сделай это