- •Принципы модульного программирования
- •1. Процедуры
- •1.1.Пример программы с процедурой
- •1.2. Расположение процедур в программе
- •2. Функции
- •2.1. Пример программы с функцией
- •3. Внешние процедуры и функции
- •3.1. Модули пользователей
- •Сложные типы данных, применяемые в Паскале
- •1. Множества
- •1.1. Примеры программ с использованием множеств
- •2. Записи
- •2.1.Пример программы обработки записей
- •Файлы и наборы данных
- •1.Текстовые файлы
- •1.1. Создание текстового файла
- •1.2. Работа с существующим текстовым файлом
- •2. Последовательные файлы
- •2.1.Примеры программ с файлами, содержащими данные простого типа
- •2.2.Работа с файлами, содержащими данные сложного типа
- •2.2.1. Создание последовательного файла
- •2.2.2. Работа с файлом filan
- •3. Файлы с произвольным (прямым) доступом
- •3.1. Создание файла с прямым доступом
- •3.2. Работа с файлом: поиск и коррекция записей
- •3.3. Упорядочение записей в файле
- •3.4. Удаление записей из файла
- •3.5. Вставка записей в файл
- •Динамическое распределение памяти. Указатели и списки
- •1. Использование указателей. Списки
- •2. Очереди
- •2.1. Очередь типа Lifo
- •2.2. Очередь Fifo
- •Стандартные модули Турбо Паскаля
- •Модуль Crt
- •Модуль dos
- •Модуль Graph
- •1. Инициирование графического режима
- •2. Вывод текста (надписей) в графическом режиме
- •3. Вывод точек на экран
- •4. Построение графических изображений
- •5. Запоминание и вывод изображений
- •Библиографический список
- •Содержание
- •Процедуры 3
- •2. Функции 12
ПРОГРАММИРОВАНИЕ
Принципы модульного программирования
При программировании ‘сверху вниз’ алгоритм записывается в виде последовательности шагов. В каждый момент времени человек может рассматривать небольшое число деталей, поэтому на ‘верхнем уровне’ алгоритма число шагов обычно небольшое. На следующем этапе детализируются отдельные шаги. При этом некоторые шаги могут повторяться.
Для того, чтобы программы было проще понимать и записывать, стараются сделать их более компактными. Это достигается двумя способами:
1) использованием циклов;
2) применением процедур и функций.
Итак, основной прием при разработке алгоритмов и программ — выделение циклических участков и часто встречающихся участков программ, которые формируются в виде процедур и функций.
Процедуры и функции — это законченные программные модули, которые в программе выполняются многократно.
Достоинства модульного программирования:
1) упрощение процесса написания и отладки программ;
2) сокращение объема программ.
Недостаток — некоторое увеличение затрат времени и памяти на оформление модулей и обращение к ним.
Паскаль-программа может содержать модули двух типов:
1) процедуры;
2) функции.
Они различаются по оформлению и особенностям работы.
1. Процедуры
Процедура — это программный модуль, выполняющий решение некоторой самостоятельной подзадачи.
Процедуры, как и функции, размещаются в программе сразу же после описания данных и перед begin, которое указывает начало основной части программы, т.е. следующим образом:
PROGRAM
CONST
VAR
Процедура 1
. . . . .
Процедура n
BEGIN
. . . . . .
END.
Сама процедура оформляется в виде:
PROCEDURE имя(параметры);
Описание локальных переменных
BEGIN
Операторы <= Тело процедуры
END;
Первый оператор — это заголовок процедуры. Если сравнить с заголовком и концом программы, то в них много общего:
PROCEDURE
и
PROGRAM
.. . . . .
END.
и
END;
Поэтому можно саму Паскаль-программу считать главной процедурой.
Локальные переменные — это рабочие переменные, которые используются только внутри данной процедуры.
На вход процедуры (в качестве исходных данных) поступает совокупность параметров-аргументов, а на выходе формируются параметры-результаты. Причем, процедура позволяет получить один или несколько результатов, а функция — только один.
Список формальных параметров содержит имена переменных, массивов и типов, являющихся аргументами и результатами процедуры. Этот список может отсутствовать. Элементы списка параметров описываются полностью, с указанием типов.
Пример 1.
Печать горизонтальной линии длиной n символов.
PROCEDURE GORLINE(n:Integer);
VAR
I:INGTEGER;
BEGIN
WRITELN;
FOR I:=1 to n DO
WRITE(`-`);
WRITELN;
END;
Здесь n — формальный параметр,
i — локальная переменная.
Процедуры в программе выполняются не в том порядке, в каком они записаны. К ним обращаются (их вызывают) из главной программы по имени с указанием фактических параметров.
Например:
имя:
или имя(список фактических_параметров);
После выполнения процедуры происходит возврат в основную программу к оператору, стоящему после вызывающего, как показано на рис.1.
Рис.1. Механизм вызова процедуры
Пример.
PROGRAM GRAF1;
CONST
. . . . . . .
VAR
X,Y: REAL;
I,K:INTEGER;
PROCEDURE PCHLINE (N:INTEGER);
. . . . . .
END; { PchLine }
BEGIN { основная программа }
X:=0;
FOR I:=1 TO 60 DO
BEGIN
. . . . .
Y:=
K:=ROUND (Y);
PCHLINE (K);
. . . . . .
END;
END.
Здесь N — формальный параметр (в процедуре),
K — фактический (в основной программе).
Различие между ними можно проиллюстрировать аналогией с доказательством теорем из геометрии. В доказательстве фигурируют углы и длины, которые соответствуют формальным параметрам процедуры. Если сделать конкретную подстановку (например, 30 градусов, 4 см), то будет доказан частный случай теоремы (решена задача для фактических параметров).
Если в процедуре несколько параметров, то соответствие устанавливается по порядку.
Пример.
PROCEDURE P1(X,Y,Z:REAL;K:INTEGER);
. . . . . . .
Begin
. . . . . . .
End;
. . . . . . .
BEGIN { основная программа }
. . . . .
P1 (A,B,C,N); {вызов P1}
. . . . .
END.
Здесь устанавливается следующее соответствие :
ОСНОВНОЕ ПРАВИЛО:
Типы, количество и порядок следования формальных и фактических параметров должны совпадать.
Массивы должны иметь одинаковую размерность. Поэтому они описываются с помощью описателя типа. Этот описатель позволяет завести в программе новые типы данных, определяемые пользователем. Такие типы имеют тот же статус, что и стандартные Real, Integer и др.). В общем виде типы пользователя описываются так.
Type
имя1=тип1;
имя2=тип2;
. . . . . .
Пример.
Type
MasInt =Array[1..10,1..10] of Integer;
MasStr =Array[1..10] of String;
Описатель типов в программе располагается после описания констант и перед описанием переменных:
Program ...;
Const
. . .
Type
. . .
Var
. . .
BEGIN { основная программа }
. . . . .
END.
Параметры процедур делятся на 2 класса:
1) параметры-значения;
2) параметры-переменные.
Параметр-значение — используется в процедуре и после окончания ее работы не изменяется (для процедуры является константой). Это, – как правило, аргумент процедуры.
Так, в процедуре PCHLINE параметр – N,а в Р1 – все 4 параметра являются параметрами-значениями. При выполнении этих процедур в них передаются фактические значения переменных A,B,C,N. Сами эти значения в главной программе не меняются.
При вызове процедур с параметром-значением фактический параметр может быть выражением соответствующего типа.
Пример.
PCHLINE (2*K-1);
PCHLINE (20);
и т.д.
Параметр-переменная — не только используется в процедуре, но и позволяет изменять значение фактического параметра. Это – результат работы процедуры.
При обращении к процедуре она получает доступ к памяти, в которой хранится значение фактического параметра, соответствующего параметру-переменной. Таким образом обеспечивается возможность изменения фактического параметра.
Параметр-переменная описывается в списке формальных параметров с помощью описателя VAR.
Пример.
PROCEDURE SumXY(X,Y:REAL;VAR Z,Q:REAL);
BEGIN
Z:=X+Y;
IF Z<0 Then
Q:= -Z
Else
Q=Z;
END; { SumXY }
Описатель VAR записывается столько раз, сколько разных типов параметров-переменных используется в процедуре. Параметр-переменная при вызове не может представляться выражением.
