Компания ALT Linux
Опубликован: 10.04.2015 | Доступ: свободный | Студентов: 762 / 0 | Длительность: 14:03:00
Специальности: Программист, Преподаватель
Лекция 4:

Подпрограммы

4.8 Разработка модулей

Модуль — это автономная программная единица, включающая в себя различные компоненты: константы, переменные, типы, процедуры и функции. Мы использовали модули при разработке визуальных приложений в Lazarus. Теперь рассмотрим, как создавать личный модуль.

Модуль имеет следующую структуру:

UNIT имя модуля;

INTERFACE

интерфейсная часть

IMPLEMENTATION

исполняемая часть

BEGIN

инициирующая часть

end.

Заголовок модуля состоит из служебного слова UNIT и следующего за ним имени. Причём имя модуля должно совпадать с именем файла, в котором он хранится. Модуль EDIT должен храниться в файле edit.pas.

Интерфейсная часть начинается служебным словом INTERFACE, за которым находятся объявления всех глобальных объектов модуля: типов, констант, переменных и подпрограмм. Эти объекты будут доступны всем модулям и программам, вызывающим данный модуль.

Исполняемая часть начинается служебным словом IMPLEMENTATION и содержит описания подпрограмм, объявленных в интерфейсной части. Здесь же могут объявляться локальные объекты, которые используются только в интерфейсной части и остаются недоступными программам и модулям, вызывающим данный модуль.

В инициирующей части размещаются исполняемые операторы, содержащие некоторый фрагмент программы. Эти программы исполняются до передачи управления основной программе и обычно используются для подготовки её работы. Инициирующая часть может отсутствовать вместе с начинающим её словом begin.

В качестве примера создадим модуль работы с комплексными числами, в котором будут представлены подпрограммы, реализующие основные операции5Суммой двух чисел a + bi и c + di является число (a + c) + (b + d)i, разностью этих чисел является число (a - c) + (b - d)i, произведением — число (ac - bd) + (bc + ad)i, частным — число \left(\frac{ab+bd}{c^2+d^2}\right)+\left(\frac{bc+ad}{c^2+d^2}\right)i.. с комплексными числами:

  • procedure sum(a,b:complex;var c:complex) — процедура сложения двух комплексных чисел a и b, результат возвращается в переменной c;
  • procedure razn(a,b:complex;var c:complex) — процедура вычитания двух комплексных чисел a и b, результат возвращается в переменной c;
  • procedure umn(a,b:complex;var c:complex) — процедура умножения двух комплексных чисел a и b, результат возвращается в переменной c;
  • procedure delenie(a,b:complex;var c:complex) — процедура деления двух комплексных чисел a и b, результат возвращается в переменной c;

Кроме того, в модуле будет процедура вывода комплексного числа на экран procedure vivod(a:complex).

Текст модуля приведен ниже.

UNIT compl;
INTERFACE
type
complex =record
x : real;
y : real;
end;
procedure sum( a, b : complex; var c : complex );
procedure razn ( a, b : complex; var c : complex );
procedure umn( a, b : complex; var c : complex );
procedure delenie ( a, b : complex; var c : complex );
procedure vivod ( a : complex );
IMPLEMENTATION
procedure sum( a, b : complex; var c : complex );
begin
c. x:=a. x+b. x;
c. y:=a. y+b. y;
end;
procedure razn ( a, b : complex; var c : complex );
begin
c. x:=a. x-b. x;
c. y:=a. y-b. y;
end;
procedure umn( a, b : complex; var c : complex );
begin
c. x:=a. x * b. x-a. y * b. y;
c. y:=a. y * b. x+a. x * b. y;
end;
procedure delenie ( a, b : complex; var c : complex );
begin
c. x :=( a. x * b. x+a. y * b. y ) / ( b. x * b. x+b. y * b. y );
c. y :=( a. y * b. x-a. x * b. y ) / ( b. x * b. x+b. y * b. y );
end;
procedure vivod ( a : complex );
begin
if a. y>=0 then writeln ( a. x : 1 : 3, ’+ ’, a. y : 1 : 3, ’ i ’ )
else writeln ( a. x : 1 : 3, ’- ’, -a. y : 1 : 3, ’ i ’ )
end;
end.

Для работы с модулем запустим Geany, введём текст модуля, сохраним егопод именем compl.pas. После этого выполним команду Собрать. В каталоге,где сохранен модуль, в результате компиляции появятся два файла — с расширением .o, и с расширением .ppu. Для использования нужен именно файл с расширением .o. Теперь скомпилированный файл модуля с расширением .o долженнаходиться либо в том же каталоге, что и программа, которая будет его вызывать, либо в том, где находятся стандартные модули вашего компилятора. Теперьможно написать программу, использующую этот модуль. Текст этой консольнойпрограммы приведён ниже.

program test;
uses compl;
var g, h, e : complex;
begin
	writeln ( ’Введите первое комплексное число ’ );
	read ( g. x, g. y );
	vivod ( g );
	writeln ( ’Введите второе комплексное число ’ );
	read ( h. x, h. y );
	vivod ( g );
	sum( g, h, e );
	writeln ( ’Сумма чисел ’ );
	vivod ( e );
	razn ( g, h, e );
	writeln ( ’Разность чисел ’ );
	vivod ( e );
	umn( g, h, e );
	writeln ( ’Произведение чисел ’ );
	vivod ( e );
	delenie ( g, h, e );
	writeln ( ’Частное чисел ’ );
	vivod ( e );
end.

Результаты работы программы представлены на рис. 4.12.

Введите первое комплексное число
3 4
3.000+4.000i
Введите второе комплексное число
8 -9
3.000+4.000i
Сумма чисел
11.000-5.000i
Разность чисел
-5.000+13.000i
Произведение чисел
60.000+5.000i
Частное чисел
-0.083+0.407i
Операции с комплексными числами

Рис. 4.12. Операции с комплексными числами
Юрий Шутиков
Юрий Шутиков

По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. 
 

Евгений Силуков
Евгений Силуков

Еще в декабре выполнил тест №1, а его все так и не проверили.