Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal_2_02.rtf
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
102 Кб
Скачать
☆
    1. Оператор uses секции реализации

Borland Pascal позволяет вам размещать в секции реализации оператор uses. В случае его присутствия оператор uses должен следовать непосредственно за ключевым словом implementation (аналогично тому, как в интерфейсной секции оператор uses должен следовать непосредственно за ключевым словом interface).

Размещение в секции реализации оператора uses позволяет "скрыть" внутренние детали модуля, поскольку используемые в секции реализации модули оказываются "невидимыми" для того, кто этот модуль использует. Более важным, однако, является то, что это позволяет вам строить взаимнозависимые модули.

Поскольку программные модули в Borland Pascal не обязаны иметь строго иерархическую структуру, то допускается использовать циклические ссылки на модули.

    1. Создание ваших собственных модулей

Если вы хотите написать модуль, содержащий некоторые полезные подпрограммы, и использовать эти подпрограммы в своих программах, напишите модули и сохраните его под именем, заданным в заголовке модуля. Borland Pascal сохраняет файл с расширением .PAS, как и любой другой файл, созданный в редакторе Borland Pascal. В исходном файле может содержаться только один модуль.

    1. Компиляция модуля

При компиляции модуля вместо создания файла .EXE Borland Pascal создает файл .TPU. Модуль является независимой единицей компиляции, но исполняться не может.

    1. Пример

Теперь напишем небольшой модуль. Назовем его IntLib и вставим в него две простые подпрограммы для целых чисел - процедуру и функцию:

unit IntLib;

interface

procedure ISwap(var I,J : integer);

function IMax(I,J : integer) : integer;

implementation

procedure ISwap;

var

Temp : integer;

begin

Temp := I; I := J; J := Temp

end; { конец процедуры ISwap }

function IMax;

begin

if I > J

then IMax := I

else IMax := J

end; { конец функции IMax }

end. { конец модуля IntLib }

Наберите этот модуль, запишите его в файл INTLIВ.PAS, а затем скомпилируйте его. Программа, которая использует модуль IntLib, будет иметь вид:

program IntTest;

uses IntLib;

var

A,B : integer;

begin

Write('Введите два целочисленных значения: ');

Readln(A,B);

ISwap(A,B);

Writeln('A = ',A,' B = ',B);

Writeln('Максимальное значение равно ',IMax(A,B));

end. { конец программы IntTest }

  1. Практическая часть

Разработать модуль одного из двух вариантов:

  1. Модуль приближенного решения алгебраических и трансцендентных уравнений;

  2. Модуль приближенного вычисления интеграла.

В качестве примера рассмотрим упрощенный модуль приближенного вычисления интеграла методом трапеций.

unit Proc;

interface

type

MathFunc = function(x: Real): Real;

function Area(a, b: Real; n: Integer; f: MathFunc): Real;

implementation

function Area(a, b: Real; n: Integer; f: MathFunc): Real;

var

i: Integer;

s, h, c, d: Real;

begin

s := 0;

h := (b-a)/n;

for i:= 1 to n do

begin

c := a+h*(i-1);

d := a+h*i;

s := s+h*(f(c)+f(d))/2;

end; { for }

Area := s;

end; { Area }

end. { Proc }

Здесь функция приближенного вычисления определенного интеграла методом трапеций Area имеет четыре параметра: a, b, n и f. a и b имеют тип Real, представляющие соответственно начало и конец интервала, на котором выполняется аппроксимация; n - это целое число подынтервалов; f - формальный параметр процедурного типа MathFunc, используемый в качестве имени функции. Фактический параметр, связанный с f, должен быть именем функции вещественного типа. Эта функция определяет кривую, площадь под которой вычисляется.

Программа, тестирующая функцию Area для подынтегральной функции

f(x) = x2 - x

может иметь вид

program ProcTypeDemo;

uses Proc;

var

a, b: Real;

n: Integer;

{$F+}

function Func(x: Real): Real;

begin

Func := Sqr(x)-x;

end;

{$F-}

begin

Write('A - нижняя граница интервала : '); Readln(a);

Write('B - верхняя граница интервала: '); Readln(b);

Write('N - число подинтервалов : '); Readln(n);

Writeln('---------------------------------------------');

Writeln('S - площадь под кривой : ', Area(a,b,n,Func):10:2);

Readln;

end. { ProcTypeDemo }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]