- •Структура программы на Паскале.
- •Стандартные типы Паскаля.
- •Операторы в Паскале.
- •Цикл с параметром.
- •Типовые задачи на операторов цикла.
- •Операторы целочисленного деления.
- •Вложенные циклы.
- •Структурированные типы данных.
- •Массивы.
- •Многомерные массивы.
- •Строки.
- •Множества.
- •Записи.
- •Работа с текстовыми файлами.
- •Особенности работы с текстовым файлом:
- •Типизированные файлы.
- •Особенности работа с типизированными файлами.
- •Подпрограммы.
- •Структура подпрограмм.
- •1. Заголовок
- •2. Описательная часть
- •3. Тело подпрограммы
- •Оформление формальных параметров, которые определяет режим взаимодействия с основной программой.
- •Особенности передачи структурированных данных подпрограммы.
- •Опережающие описания.
- •Функциональный тип. Процедурный тип.
- •Сортировки.
- •Сортировка бинарными включениями.
- •Сортировка простых выборов.
- •Сортировки простым обменом.
- •Шейкер-сортировка.
- •Сортировка Шелла.
- •Модули.
- •Структура модуля.
- •Особенности компиляции программ с подключаемыми модулями.
- •Циклические ссылки модулей друг на друга.
- •Стандартные модули в Паскале.
- •Динамические переменные.
- •Динамические структуры.
- •Однонаправленные списки.
- •Формирование списков. Формирование очереди.
- •Формирование стека.
- •Классическое формирование очереди (по Вирту).
- •Работа со списками.
- •1) Проход по списку;
- •2) Добавление элемента в список;
- •Удаление элемента из списка.
- •«Древовидные структуры»
- •Удаление элемента из дерева
- •Самоупорядочивающийся список
- •Частотный словарь
- •Нерекурсивное формирование дерева
Особенности передачи структурированных данных подпрограммы.
1) Можно не использовать формальные параметры для передачи структурированных типов. В подпрограмме используются глобальные переменные структурированного типа. Но универсальность подпрограммы тогда отсутствует, т.е. подпрограмма будет работать только со строго определенной структурой.
2) Паскаль – язык строгих правил. Компилятор считает два одинаково описанных тематические и синтаксические переменные различными, поэтому явное описано структурированного типа формального параметра запрещено. Для обхода данной неприятности прибегают к следующему приему: сначала в разделе типов определяют тип данной структуры, а затем используют имя этого определенного типа при описании глобальных и формальных переменных, на место которых в дальнейшем при вызове подпрограммы будет поставлена эта глобальная переменная. Данный прием не относится к файловым структурам. При обработке файлов в подпрограмме используют глобальную переменную файлового типа. А связь этой переменной с конкретным файлом определяется в подпрограмме, поэтому подпрограмма не теряет своей универсальности.
3) Второй пункт не до конца позволяет универсализировать подпрограмму с точки зрения обработки массивов. При обработке массивов используется два приема: а) если размерности массивов известны, то тип массива описывается как самый большой массив, и в его рамках обрабатываются более мелкие массивы; вводится пороговое число, определяющее границы обработки; б) использование в качестве формального параметра открытого массива. Открытый массив нельзя использовать в качестве описательной структуры глобальной или локальной переменной, т.е. открытый массив используется в качестве описательной структуры формальной переменной.
Пример. Отсортировать строки матрицы по возрастанию. Использовать для сортировки подпрограммы сортировки одномерного массива.
type s=array [1..6] of real;
var mt:array [1..6] of s;
p,k:integer;
procedure sort (var st=s);
v
C=0
begin
repeat
c:=0;
for p:=1 to 5 do
if st[p] > st[p+1] then begin v:=st[p];
st[p]:=st[p+1]; st[p]:=v;
c
V:=ST[p]
ST[p]:=ST[p+1]
C:=c+1
end;
until c=0;
end;
begin writeln(‘’);
for k:=1 to 6 do
for p:=1 to 6 do
read(mt[k,p]);
for k:=1 to 6 do
sort(mt[k]);
for k:=1 to 6 do begin
for p:=1 to 6 do write (mt[k,p]:7:2);
writeln;
end;end.
Пример. Используя подпрограмму нахождения минимума, определить минимальное значение массивов A(6), B(8), C(12).
type mas=array[1..12] of integer;
var a,b,c:mas; p:integer;
function min (m:mas; n:integer): integer;
var mn:integer;
begin mn:=m[1]; for p:=1 to n do
if mn > m[p] then mn:=m[p];
min:=mn;
end;
begin writeln (‘’);
for p:=1 to 6 do read (a[p]);
for p:=1 to 8 do read (b[p]);
for p:=1 to 12 do read (c[p]);
writeln(‘min A= ‘,min(a,6));
writeln(‘min B= ‘,min(b,8));
writeln(‘min C= ‘,min(c,12));
end.
Опережающие описания.
Паскаль – язык строгих правил. Основное правило: все, что используется, должно быть описано до использования. Поэтому алгоритмы, включающие в себя циклические ссылки подпрограмм друг на друга (циклическая ссылка – если процедура А в своем теле вызывает процедуру В, а В вызывает А) невозможно. Для решения данной проблемы в Паскаль было введено опережающее описание. Структурно это выглядит так:
PROCEDURE A;
FORWARD;
PROCEDURE B;
тело;
PROCEDURE A;
тело;
Служебное слово FORWARD указывает компилятору, что подпрограмму, заголовок которой расположен над этим словом, необходимо искать далее по тексту программы.