Как сделать модуль в паскале

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Модуль - это автономно компилируемая программная единица.
Модуль может быть подключен к любой паскаль-программе или к другому
модулю (программной единице).
Модуль включает в себя различные разделы описаний (типов, констант,
переменных, процедур и функций).
Модуль делится на две основные части: интерфейсную (interface) и
исполняемую (implementation). В интерфейсной части даются описания,
которые могут использоваться в программной единице, к которой подключен
модуль. В исполняемой части приводятся описания, доступные только внутри
модуля.
Кроме описаний, модуль может содержать некоторые операторы,
подготавливающие условия для использования модуля (например,
присваивание переменным начальных значений или установление связи
между программными и физическими именами файлов). Такие операторы
содержатся в части модуля, которая называется инициализирующей. Эта
часть не является обязательной.
В Объектном Паскале модуль также может иметь завершительную часть
(finalization), состоящую из операторов, обеспечивающих грамотное
завершение программной единицы, использующей модуль.

3. Модули языка Pascal

Структура модулей Паскаля
Unit ;

interface ;
implementation ;
begin
;
end .
.
Interface – зарезервированное слово (интерфейс), начинает
интерфейсную часть модуля;
implementation – зарезервированное слово (выполнение); начинает
исполняемую часть модуля;
begin – зарезервированное слово; начинает инициирующую часть
модуля;
конструкция begin необязательна;
Таким образом, модуль Паскаля состоит из заголовка и трех составных
частей, любая из которых может быть пустой.

4. Стандартные модули языка Pascal

Pascal имеет восемь стандартных модулей
SYSTEM входят все процедуры и функции авторской версии языка Pascal,
подпрограммы стандартного Паскаля, а также много дополнительных
подпрограмм общего характера, ориентированные на конкретную операционную
среду.
DOS содержит средства доступа к операционной системе.
CRT обеспечивает практически полный спектр возможностей для доступа к
экрану дисплея в текстовом режиме.
PRINTER содержит единственный интерфейсный элемент - переменную Lst.
Использование этой переменной в стандартных процедурах Write и WriteLn
приводит к выводу информации на печать.
OVERLAY предоставляет средства для организации так называемых оверлейных
программ, позволяющих обеспечить достаточно эффективное выполнение
больших программных систем, размер которых превышает объем доступной
оперативной памяти.
GRAPH объединяет многочисленные программные средства управления
графическим режимом работы дисплея. позволяет создавать разнообразные и
эффективные графические программы.
TURBO3 И GRAPH3 обеспечивают совместимость с данной версией
системы Pascal тех программ, которые были разработаны для ранней версии 3.0.

5. Модули языка Pascal

Информация, выводимая на экран видеодисплея, может быть двух
видов:
• текстовая, т.е. состоящая из знаков алфавита, цифр и
специальных символов,
• графическая, т.е. чертежи, рисунки, графики, различные
шрифты.
Поэтому выделяются два режима работы видеотерминала
текстовый и графический.
CRT обеспечивает практически полный спектр возможностей для
доступа к экрану дисплея в текстовом режиме.
GRAPH объединяет многочисленные программные средства
управления графическим режимом работы дисплея. позволяет
создавать разнообразные и эффективные графические программы.

6. Управление экраном в текстовом режиме

7. Модуль Crt

Модуль Сrt содержит подпрограммы
предназначенные:
– для задержки экрана и его очистки,
– для вывода текста в цвете,
– для вывода его в заданном местоположении,
– для считывания данных с нажатой клавиши,
– для вывода звукового сигнала
– и многое другое, предназначенное для вывода
информации в текстовом режиме.

8. Модуль Crt

В текстовом режиме единицей
вывода информации служит символ.
На экране каждый символ занимает
одно знакоместо — прямоугольный
участок размером
8х16 пикселей (зёрен экрана).
Во весь экран помещается
80х25 знакомест.
Курсор (мигающий прямоугольник)
помечает то место на экране, куда по
умолчанию будет осуществлён
вывод очередного символа, —
текущую позицию.
Для определения текущей позиции
курсора предназначена сетка
координат, мысленно накладываемая
на экран.
Левое верхнее знакоместо имеет
координаты (1,1),
правое верхнее — (1,80),
левое нижнее — (25,1) и правое
нижнее — соответственно (25,80).

9. Процедуры модуля Crt

Активная область ввода / вывода
Процедура Window(x1, y1, x2, y2 : Byte) создаст на экране окно с
координатами левого верхнего угла в точке (x1, y1) и координатами
правого нижнего угла в точке (x2, y2). Теперь активная область экрана
будет ограничена этим окном. Текущие координаты курсора будут
отсчитываться не от левого верхнего угла экрана, а от левого верхнего
угла этого окна.
Очистка
Процедура ClrScr очистит весь экран (или активное окно),курсор
будет помещён в верхний левый его угол.
Процедура ClrEol очистит текущую строку, начиная с текущей
позиции курсора и до правого края экрана (окна).
Процедура DelLine удалит строку, в которой находится курсор.
Процедура InsLine очистит текущую строку целиком. Курсор
останется на прежней позиции.

10. Процедуры модуля Crt

Цвета
Процедура TextBackground(color : Byte) установит цвет фона.
Процедура TextColor(color : Byte) установит цвет выводимого текста.
Замечание: Количество доступных цветов (для экрана и символов) всего 16. Они
кодируются числами от 0 до 15. Вместо номера цвета возможно использовать
соответствующую констант

11. Процедуры модуля Crt

Звук
Процедура Sound(hz : Word) включит звуковой сигнал с частотой hz Герц.
Процедура NoSound выключит звуковой сигнал.
Позиционирование
Процедура GotoXY(x, y : Byte) переместит курсор в заданную позицию в
пределах текущего окна (экрана).
Функция WhereX : Byte вычислит положение курсора в текущем окне (или на
экране): его горизонтальную составляющую. Напомним, что
координата X отсчитывается от левого края экрана (окна).
Функция WhereY : Byte вычислит положение курсора в текущем окне (или на
экране): его вертикальную составляющую. Напомним, что
координата Y отсчитывается от верхнего края экрана (окна).
Ожидание
Процедура Delay(ms : Word) приостановит исполнение программы
на ms миллисекунд.
Функция KeyPressed : Boolean отслеживает нажатия клавиш (на клавиатуре).
Функция ReadKey : Char возвращает код символа, чья клавиша (или комбинация
клавиш) была нажата.

14. Пример №3 Построение графика (y = -x)

15. Пример №3 Построение графика (y = -x)

17. Прочитать строку символов и опустить символы строки по очереди на строку с указанным номером

Uses CRT;
var S: string;
X, Y, N, L: integer;
begin
Обозначим:
Textcolor(7);
строку символов переменной S,
Window(1, 1, 80, 25);
номер строки для размещения результата программы
Clrscr;
- L,
Writeln('задайте номер строки');
длину строки - N,
Readln(L);
Writeln('задайте строку символов');
номер текущего символа в строке - X,
Readln(S);
номер текущей вертикальной координаты - Y.
N := Length(S);
for X := 1 to n do
begin
Алгоритм:
Y := 1;
читать номер L;
repeat
Gotoxy(X, Y);
читать строку символов S;
Textcolor(0); определить длину строки N;
совпадающий с цветом фона>
для x:=1 до N повторять
Write(S[x]);
Y := Y + 1;
повторять
Gotoxy(X, Y);
Textcolor(7); стереть символ в позиции (x,y);
цвет символов>
увеличить y координату;
Write(S[X]);
выдать символ в позиции (x,y);
Delay(1000);
выдержать паузу
until Y = L
до y=L >
end;
Readln
Будем использовать стандартные цвета: цвет
end.
символов – белый, цвет фона – чёрный.

Написать простейший скрин–
сейвер (screen saver) — программу,
предохраняющую монитор от
пережигания.
Его основными чертами должны
стать:
• преобладание чёрного фона;
• регулярная смена позиций
цветовых пятен;
• прекращение работы при
нажатии произвольной клавиши
на клавиатуре.

Randomize; <активизация генератора случайных чисел>
while not KeyPressed do
begin
y := Random(24) + 1;
x := Random(79) + 1;
z := Random(220) + 33;
c := Random(14) + 1;
GotoXY(x, y);
// переместит курсор в заданную позицию в пределах текущего окна
//(экрана), где x, y сгенерированы случайным образом
TextColor(c);
// установит цвет выводимого текста.
Delay(n);
// приостановит исполнение программы на ms миллисекунд
Write(Chr(z));
//выводит символ на экран
TextColor(Black); // установит цвет выводимого текста - черный

В этом разделе я расскажу, как создать свой модуль и как использовать его в своей программе. Структуру модуля вы уже знаете. Если забыли, то см. здесь: Модули.

Итак, создаём программу обычным уже известным нам способом.

Затем выбираем в меню ФАЙЛ команду СОЗДАТЬ МОДУЛЬ.

Сохраняем модуль под именем, например, myunit. Для этого выбираем меню ФАЙЛ - СОХРАНИТЬ.

Всё. Модуль готов и сохранён. Для верности можете сохранить весь проект.

При создании модуля в Lazarus структура его формируется автоматически, то есть в редакторе исходного кода сразу появляются основные разделы модуля. И вам остаётся только добавить свой код.

Итак, добавляем свои подпрограммы в модуль и получаем примерно следующее:

Обратите внимание на комментарии. Вы уже изучили немало, поэтому должны понимать смысл этих комментариев. Более подробно описывать не буду.

А теперь посмотрим, как использовать функции нашего модуля в нашей программе.

Первым делом нужно подключить модуль к программе. Вы уже знаете, как это сделать. Если вы создавали этот модуль из этой же программы, то модуль будет подключен автоматически.

Ну а дальше, надеюсь, всё понятно. Мы не объявляем в программе переменную х, так как она объявлена в модуле myunit в разделе глобальных переменных, следовательно, видна из нашей программы.

В программе мы вызываем функцию MyFunc, а результат выводим на экран. Если же вы попробуете вызвать из программы функцию MyFunc100, которая также имеется в нашем модуле, то это приведёт к ошибке компиляции, так как функция MyFunc100 не объявлена в интерфейсном разделе, то есть не видна из других модулей и программ.

В этом разделе мы немного коснулись темы видимости переменных. Более подробно об этом я расскажу в следующем разделе.

A Unit - это файл исходного кода (или двоичный, скомпилированный из этого файла), который был написан с использованием языка программирования Pascal и разработан как отдельный модуль в Приложении или Объектном модуле. Слово Unit - это зарезервированное слово.

Contents

Назначение

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

Двоичный модуль может использоваться, когда автор модуля желает предоставить определенные функции для использования в программе языка Паскаль, но не желает предоставлять исходный код, который выполняет эти функции.

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

Модуль, которому требуется доступ, например, процедуры и типы данных в другом модуле, должен указывать те модули, к которым он должен получить доступ, в разделе uses (но связывание выполняется без необходимости писать make-файл, как в C).

Модуль также можно использовать для объявления серии глобальных констант или переменных для использования всем приложением без фактического содержания исполняемого кода. Это похоже на ключевое слово common в языке программирования Fortran.

Формат

где часть после раздела interface соответствует public -части других языков и раздел implementation делает это для private .

Более продвинутая базовая структура:

Необязательные разделы initialization и finalization могут следовать за кодом, который выполняется в начале/конце программы.

Подробный пример модуля

Чтобы подключить модуль, просто используйте оператор uses .

При компиляции FPC проверяет эту программу на зависимости модулей. Он должен быть в состоянии найти модуль "randomunit".

Самый простой способ удовлетворить это - иметь модуль, имя которого совпадает с именем файла, в котором он записан (добавление .pas - это нормально и приветствуется). Файл модуля может находиться в том же каталоге, где находится исходник программы, или в пути к модулю, по которым FPC ищет модули.

Приоритетность модуля

Если вы хотите добиться другого поведения, вы можете явно добавить unitname.identifier, чтобы указать модуль, который вы хотите использовать, или изменить порядок модулей. Первый вариант часто оказывается наиболее очевидным.

Явное указание объявленного модуля:

unit
Секция interface
связи uses ;

Секция implementation
реализации uses ;

Секция Begin
инициализации
End.

Модуль обязательно начинается с ключевого слова unit, за которым следует идентификатор – имя модуля.
Замечание.
Имя модуля обязательно должно совпадать с именем файла с расширением .pas, в котором хранится модуль.
Пример.
unit my_library хранится в файле my_library.pas
Завершается модуль, так же, как и главная программа, ключевым словом END с точкой.
Имя модуля служит для организации связи модуля с главной программой и другими модулями. Связь между модулями устанавливается с помощью оператора USES.

1. Секция связи.
Секция связи начинается с оператора USES, следом за которым должны размещаться так называемые внешние объявления. Внешние объявления описывают элементы, которые считаются известными за пределами модуля. К ним относятся объявления типов, констант, переменных и подпрограмм. Таким образом, после uses мы должны указать имена стандартных или пользовательских модулей, с которыми данный модуль установит связь. Ресурсы этих модулей будут доступны в любой точке данного модуля.
При объявлении подпрограмм, т. е. процедур и функций, в секции связи указываются только их заголовки. Полные тексты процедур и функций, заголовки которых находятся в секции связи, размещаются в секции реализации.
Пример.
unit my_library;
interface
uses crt;
const n=5, m=6;
type mass = array [1..m] of integer;
matr = array [1..n] of mass;
procedure gen_1(a,b:integer; k:byte; var t:mass);
procedure gen_2(a,b:integer; k,l:byte; var tt:matr);
function prostoe(x: longint): boolean;


При таком описании из главной программы и из любого модуля, который подключает к себе модуль my_library, а кроме того, в любой точке модуля my_library будут доступны:

ü константы n и m;
ü типы mass и matr;
ü процедуры gen_1 и gen_2;
ü функция prostoe.
Секция реализации начинается с ключевого слова IMPLEMENTATION и обязательно включает полные тексты подпрограмм, описанных в секции связи.
Секция реализации может содержать оператор USES с набором внутренних объявлений модуля. Как обычно, в операторе USES указываются имена модулей. Внешние объявления этих модулей доступны в секции реализации: во-первых, они могут участвовать в формировании внутренних объявлений модуля и, во-вторых, могут использоваться при описании процедур и функций.
В секции реализации в области внутренних объявлений можно описывать константы, типы, переменные, процедуры и функции. Эти объекты считаются известными во всех объектах секции реализации. Но внутренние объявления являются локальными, т. е. действуют только внутри того модуля, в котором они размещаются. Однако эти недоступные извне элементы могут использоваться глобальными процедурами и функциями, заголовки которых присутствуют в секции связи.
Замечание.
Заголовок процедуры или функции в секции реализации должен либо полностью совпадать с заголовком этой же процедуры или функции в секции связи, либо содержать только имя процедуры или функции.
Пример .
implementation
uses graph;
const z=200; z1=300; z2=400;
var str:string[20];
function prostoe;
var q:boolean; i, r: longint;
begin
q:=true;
if x mod 2 =0 then q:=false;
r:= trunk(sqrt(x));
i:=3;
while q and (i

3. Секция инициализации.
Заключительной секцией модуля, которая, впрочем, чаще всего отсутствует, является секция инициализации. Она начинается с ключевого слова BEGIN. Далее обычно следует последовательность операторов языка Паскаль.
Секции инициализации всех модулей, входящих в программу, выполняются один раз перед началом работы главной программы. Они используются для подготовки главной программы и модулей к началу работы и могут включать операторы, осуществляющие присваивание начальных значений переменным, открытие файлов, дополнительные проверки паролей пользователей и т.п.
В секции инициализации известными считаются внешние объявления секции связи, внутренние объявления секции реализации и внешние объявления всех модулей, имена которых присутствуют в операторах USES этого модуля.
Пример.
unit readfile;
interface
var t: text;
procedure display;
implementation
var fn:string;
procedure display;
var a:string;
begin
readln(t,a);
wr1teln(a)
end;
Begin
writeln(' Введите имя файла ');
readin(fn);
assign(t,fn);
reset(t)
End.

Пример главной программы :
Program P_1;
uses readfile;
Begin
display;
End.

Читайте также: