Основы программирования на C++, PASCAL
3.22. Внешние подпрограммы и модули
Стандартный Паскаль не располагает средствами разработки и поддержки библиотек программиста (в отличие, скажем, от Фортрана и других языков программирования высокого уровня), которые компилируются отдельно и в дальнейшем могут быть использованы не только самим разработчиком. Если программист имеет достаточно большие наработки и те или иные подпрограммы могут быть использованы при написании новых приложений, то приходится эти подпрограммы целиком включать в новый текст.
В Турбо Паскале это ограничение преодолевается за счет, во-первых, введения внешних подпрограмм, во-вторых, разработки и использования модулей. В данном разделе мы рассмотрим оба способа.
Организация внешних подпрограмм. Начнем с внешних подпрограмм. В этом случае исходный текст каждой процедуры или функции хранится в отдельном файле и при необходимости с помощью специальной директивы компилятора включается в текст создаваемой программы.
Проиллюстрируем этот прием на примере задачи целочисленной арифметики. Условие задачи: дано натуральное число п. Найти сумму первой и последней цифр этого числа.
Для решения будет использована функция, вычисляющая количество цифр в записи натурального числа. Вот ее возможный вариант:
Function Digits(N: Longint): Byte;
Var Ko1: Byte;
Begin
Ko1:=0;
While N<>0 Do
Begin
Ko1:=Ko1+1;
N:=N Div 10
End;
Digits:=Ko1
End;
Сохраним этот текст в файле с расширением inc (это расширение внешних подпрограмм в Турбо Паскале), например digits.inc.
Опишем еще одну функцию: возведение натурального числа в натуральную степень (аn).
Function Power(A,N:Longint): Longint;
Var I,St: Longint;
Begin
St:=l;
For I:=1 To N Do
St:=St*A;
Power:=St
End;
А теперь составим основную программу, решающую поставленную задачу. В ней будут использованы описанные выше функции.
Program Examplel;
Var N,S: Integer;
{$1 digits.inc} {подключение внешней функции из файла digits.inc, вычисляющей количество цифр в записи числа}
{$1 power.inc} {подключение внешней функции из файла power.inc, вычисляющей результат возведения числа А в степень N}
Begin
Write('Введите натуральное число:'); ReadLn(N) ;
(для определения последней цифры числа N берется остаток от деления этого числа на 10, а для определения первой цифры N делится на 10, возведенное в степень на единицу меньшую, чем количество цифр в записи числа (т.к. нумерация разрядов начинается с 0))