- •Принципы модульного программирования
- •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
2.1. Пример программы с функцией
Задача.
Найти минимальные значения в нескольких массивах.
PROGRAM PSKMIN;
CONST
M=200;
TYPE
MAS=ARRAY[1...M] OF REAL;
VAR
A,B:MAS;
MA,MB:REAL;
I,N:INTEGER;
FUNCTION MINX (K:INTEGER;X:MAS):REAL;
{ Нахождение минимума в массиве вещественных чисел }
VAR I:INTEGER;
BEGIN
MINX:=X[1];
FOR I:=2 TO K DO
IF MINX>X[I]THEN
MINX:=X[I];
END;
BEGIN { основная программа }
Writeln('Введите размер массива');
READ (N);
Writeln('Введите первый массив');
FOR i:=1 TO N DO
READ (A[i]);
Writeln('Введите второй массив');
FOR i:=1 TO N DO
READ (B[i]);
MA: = MINX (N,A);
MB: = MINX (N,B);
Writeln('Минимальное число из первого массива - ',MA:8:2);
Writeln('Минимальное число из второго массива - ',MA:8:2);
END.
При обращении (вызове) функции на место формальных параметров подставляются фактические, как и в процедуре. Типы, количество и порядок следования фактических и формальных параметров должны совпадать.
В теле функции могут использоваться (вызываться) и другие функции, стандартные или собственные.
Пример.
Вычислить гиперболический синус по формуле:
Функция будет иметь вид:
Function Sinh(X:REAL) :REAL;
Begin
SINH:=(EXP(X)-EXP(-X) )/2;
End;
К функции можно обращаться тремя способами:
1) из основной программы;
2) из другой функции;
3) из самой себя.
Функции, которые вызывают сами себя называются рекурсивными. Примеры таких функций часто встречаются в математике: вычисление факториала, возведение числа в целую степень, вообще, нахождение любых значений методом математической индукции. Так, факториал вычисляется по формуле:
n! = n*(n -1)! – при n>0 и
n! = 1 – при n=0.
Для рекурсивных функций необходимо вырабатывать условие завершения (иначе она будет вычисляться до бесконечности). Это условие для n! записано во второй строчке ( при n=0 ) – т.к.рекурсия производится на основе второго сомножителя – (n-1)!=(n-1)*(n-2)! и т.д. – до нуля).
Запишем рекурсивную функцию вычисления факториала.
FUNCTION FACT (N:INTEGER):INTEGER;
BEGIN
IF N=0 THEN FACT:=1
ELSE
FACT:=N*FACT(N-1);
END;
3. Внешние процедуры и функции
Наиболее просто они оформляются с помощью модулей. В Турбо-паскале существует 2 типа модулей:
1) модули пользователей;
2)стандартные модули.
3.1. Модули пользователей
Общий вид таких модулей приведен на рис.4.
Рис. 4. Структура модуля Турбо-паскаля
Интерфейсная секция — общедоступная часть, ‘видимая’ из любой программы (модуля).
Секция реализации — недоступна другим модулям и содержит тела процедур и функций, описанных в интерфейсной секции.
В интерфейсной секции содержатся заголовки процедур и функций, помещенных в модуль. Здесь же описываются, так называемые, глобальные данные, применяемые в модуле и работающих с ним программах. После секции реализации должна быть секция инициализации. Она используется для отладки процедур и функций модуля и в окончательном варианте имеет вид:
Begin
End.
Пример оформления модуля:
Unit sort;
interface { интерфейсная секция }
const { Глобальная константа и тип }
nn=200;
type
mas = array[1..nn] of real;
Procedure sorty(Var Y: mas; m:integer);
Function Ymin (Y:mas; m:integer): real;
implementation { секция реализации }
Procedure sorty; { можно неполный заголовок }
Var i,k:integer;
a:real;
Begin
for k:=1 to m-1 do
for i:=1 to m-k do
if Y[i]>Y[i+1]then
Begin
a:=Y[i];
Y[i]:=Y[i+1];
Y[i+1]:=a
end;
end; { sorty }
Function Ymin;
Var
i:integer;
Begin
Ymin:=Y[1];
for i:=2 to m do
if Ymin > Y[i] then
Ymin:=Y[i];
end; { Ymin }
Begin
{ секция иницализации }
end.
Модуль компилируется отдельно. В меню компилятора устанавливают опцию disk (а не Memory). Получается файл с расширением tpu, например, Sort.tpu. К программе модуль присоединяют с помощью предложения Uses. Имя файла, содержащего модуль, и имя модуля должны быть одинаковыми! Основная программа, которая использует модуль, будет иметь вид, аналогичный приведенному ниже.
Program main;
Uses
crt,dos, {стандартные модули}
sort; {пользовательский модуль}
Var
x:mas; { х - глобальный тип, описанный в модуле sort}
n,i,j:integer;
z:real;
Begin
Writeln(`Введите размер массива`);
read (n); — размер массива
Writeln(`Введите массив`);
for i:=1 to n do
read (x[i]);
sort (x,n);
z:=Ymin (x,n);
Writeln(`Min элемент`,Z:8:2);
Writeln(`Упорядоченный массив`);
For i:=1 to n do
Write (x[i]:8:2);
Writeln ('Конец работы');
End.
