По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. |
Подпрограммы
4.8 Разработка модулей
Модуль — это автономная программная единица, включающая в себя различные компоненты: константы, переменные, типы, процедуры и функции. Мы использовали модули при разработке визуальных приложений в Lazarus. Теперь рассмотрим, как создавать личный модуль.
Модуль имеет следующую структуру:
UNIT имя модуля;
INTERFACE
интерфейсная часть
IMPLEMENTATION
исполняемая часть
BEGIN
инициирующая часть
end.
Заголовок модуля состоит из служебного слова UNIT и следующего за ним имени. Причём имя модуля должно совпадать с именем файла, в котором он хранится. Модуль EDIT должен храниться в файле edit.pas.
Интерфейсная часть начинается служебным словом INTERFACE, за которым находятся объявления всех глобальных объектов модуля: типов, констант, переменных и подпрограмм. Эти объекты будут доступны всем модулям и программам, вызывающим данный модуль.
Исполняемая часть начинается служебным словом IMPLEMENTATION и содержит описания подпрограмм, объявленных в интерфейсной части. Здесь же могут объявляться локальные объекты, которые используются только в интерфейсной части и остаются недоступными программам и модулям, вызывающим данный модуль.
В инициирующей части размещаются исполняемые операторы, содержащие некоторый фрагмент программы. Эти программы исполняются до передачи управления основной программе и обычно используются для подготовки её работы. Инициирующая часть может отсутствовать вместе с начинающим её словом begin.
В качестве примера создадим модуль работы с комплексными числами, в котором будут представлены подпрограммы, реализующие основные операции5Суммой двух чисел и является число , разностью этих чисел является число , произведением — число , частным — число . с комплексными числами:
- 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