МАТЕМАТИЧЕСКИЕ ОСНОВЫ ИНФОРМАТИКИ
Среда, 17.04.2024, 01:13
ГлавнаяРегистрацияВход Приветствую Вас Гость | RSS

Меню сайта

Категории раздела
Типы данных [1]
Операторы [1]
Математические функции [1]
Графика [2]
Модули [1]

Наш опрос
Какой язык программирования Вы изучаете
Всего ответов: 1027

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа


Главная » Статьи » Знакомство с Паскаль » Модули

Стандартные модули Паскаль
Стандартные модули Паскаль

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

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

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

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


Описание модулей

Исходный текст каждого модуля хранится в отдельном файле с расширением .pas. Общая структура модуля:

unit имя;      { заголовок модуля }

interface      { интерфейсная секция модуля }

{ описание глобальных элементов модуля (видимых извне) }

implementation { секция реализации модуля }

{ описание локальных (внутренних) элементов модуля }

begin          { секция инициализации }

{ может отсутствовать }

end.

ВНИМАНИЕ Имя файла, в котором хранится модуль, должно совпадать с именем, заданным после ключевого слова unit.

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

В интерфейсной секции модуля определяют константы, типы данных, переменные, а также заголовки процедур и функций.

В секции реализации описываются подпрограммы, заголовки которых приведены в интерфейсной части. Заголовок подпрограммы должен быть или идентичным указанному в секции интерфейса, или состоять только из ключевого слова procedure или function и имени подпрограммы. Для функции также указывается ее тип.

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

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

Для сохранения скомпилированного модуля на диске требуется установить значение пункта Destination меню Compile в значение Disk. Компилятор создаст файл с расширением .tpu.

Пример №1.

Пример описания модуля. Оформим в виде модуля подпрограмму вычисления среднего арифметического значения элементов массива.

unit Average;

interface

const n = 10;

type mas = array[1 .. n] of real;

procedure average(x : mas; var av : real);

implementation

procedure average(x : mas; var av : real);

var i : integer;

begin

av := 0;

for i := 1 to n do av := av + x[i];

av := av / n;

end;

end.

Использование модулей

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

program example;

uses Average, Graph, Crt;

Поиск модулей выполняется сначала в библиотеке исполняющей системы, затем в текущем каталоге, а после этого - в каталогах, заданных в диалоговом окне Options/Directories.

Если в программе описана величина с тем же именем, что и в модуле, для обращения к величине из модуля требуется перед ее именем указать через точку имя модуля.

Стандартные модули Паскаля

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

Модуль System

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

Модуль Crt

Модуль предназначен для организации эффективной работы с экраном, клавиатурой и встроенным динамиком. При подключении модуля Crt выводимая информация посылается в базовую систему ввода-вывода (ВIОS) или непосредственно в видеопамять.

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

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

Модуль Crt позволяет:

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

Работа с экраном

Текущие цвета символа и фона задаются с помощью процедур TextColor и TextBackGround и действуют на следующие за ними процедуры вывода. Вывод выполняется в текущую позицию курсора. Для ее изменения служит процедура GotoXY.

Окно определяется с помощью процедуры Window. Оно задается координатами левого верхнего и правого нижнего угла.

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

Пример №1.

Программа "угадай число".

program luck;

uses crt;

const max = 10;

var

i, k, n : integer;

begin

clrscr;    { очистить экран }

randomize;

i := random(max);   { загадать число }

window(20, 5, 60, 20);  { определить окно }

TextBackGround(Blue); { цвет фона - синий }

clrscr; { залить окно фоном }

TextColor(LightGray); { цвет символов - серый }

k := -1;      { счетчик попыток }

GotoXY(12, 5);

writeln(' Введите число : ');

repeat  { цикл ввода ответа }

GotoXY(20, 9);  { установить курсор }

readln(n);   { ввести число }

inc(k);

until i = n;

window(20, 22, 60, 24);   { определить окно результата }

TextAttr := 2 shl 4 + 14;   { желтые символы за зеленом фоне }

clrscr;   { залить окно фоном }

GotoXY(6, 2);  { установить курсор }

writeln(' Коэффициент невезучести : ', k / max :5:1);

readkey;  { ждать нажатия любой клавиши }

TextAttr := 15;   { белые символы на черном фоне }

clrscr;  { очистить после себя экран }

end.

Работа с клавиатурой

Модуль Crt позволяет работать с управляющими клавишами и комбинациями клавиш. Нажатие каждой клавиши преобразуется либо в ее ASCII-код, либо в так называемый расширенный код (scan-код) и записывается в буфер клавиатуры, из которого затем и выбирается процедурами ввода. Под каждый код отводится два байта. Если нажатие клавиш соответствует символу из набора ASCII, в первый байт заносится код символа. Если нажата, к примеру, клавиша курсора, функциональная клавиша или комбинация клавиш с CTRL или ALT, то первый байт равен нулю, а во втором находится расширенный код, соответствующий этой комбинации.

Для работы с клавиатурой модуль Crt содержит функции ReadKey и KeyPressed.

Модули Dos и WinDos

Модули Dos и WinDos содержат подпрограммы, реализующие возможности операционной системы MS-DOS - например, переименование, поиск и удаление файлов, получение и установку системного времени, выполнение программных прерываний и так далее. Эти подпрограммы в стандартном Паскале не определены. Для поддержки подпрограмм в модулях определены константы и типы данных.

Модуль Dos использует строки Паскаля, а WinDos - строки с завершающим нулем.

Модуль Graph

Модуль обеспечивает работу с экраном в графическом режиме.

Экран в графическом режиме представляется в виде совокупности точек - пикселов. Цвет каждого пиксела можно задавать отдельно. Начало координат находится в левом верхнем углу экрана и имеет координаты (0, 0). Количество точек по горизонтали и вертикали (разрешение экрана) и количество доступных цветов зависят от графического режима. Графический режим устанавливается с помощью служебной программы - графического драйвера.

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

Модуль Graph обеспечивает:

  • вывод линий и геометрических фигур заданным цветом и стилем;
  • закрашивание областей заданным цветом и шаблоном;
  • вывод текста различным шрифтом, заданного размера и направления;
  • определение окон и отсечение по их границе;
  • использование графических спрайтов и работу с графическими страницами.

В отличие от текстового режима, в графическом курсор невидим.

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

Эти параметры устанавливаются с помощью соответствующих процедур. Возможные значения параметров определены в модуле Graph в виде многочисленных констант.

Структура графической программы

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

  • подключение модуля Graph;
  • перевод экрана в графический режим;
  • установку параметров изображения;
  • вывод изображения;
  • возврат в текстовый режим.

Пример №2.

Программа, выводящая на экран серию приятных глазу разноцветных линий, движущийся смайлик и текст "The end".

program lines;

uses Graph, Crt;                                             { 1 }

const

grDriver : integer = Detect;

size = 40;

s2 = size div 2;

s4 = size div 4;

margin = 40;

var

grMode : integer;

ErrCode: integer;

HalfX, HalfY : integer;

x, y, x1, y1, x2, y2, i : integer;

begin

randomize;

{ ---------------------------инициализация графики ----- }

InitGraph(grDriver, grMode, 'd:\tp\bgi');                 { 2 }

ErrCode := GraphResult;                                   { 3 }

if ErrCode <> GrOK then

begin

writeln('Ошибка графики: ', GraphErrorMsg(ErrCode));

exit  end;

{ ------------------------------------ вывод линий ----- }

HalfX := GetMaxX div 2;                                   { 4 }

HalfY := GetMaxY div 2;

x := HalfX; x1:= x;

y := HalfY; y1:= y;

for i := 1 to 450 do begin                                { 5 }

x2 := round(cos(0.05 * i) * HalfY) + HalfX;

y2 := round(sin(0.02 * i) * HalfY) + HalfY;

if (i mod 10) = 0 then SetColor(random(15) + 1);

Line(x1, y1, x2, y2);

Line(x,  y,  x2, y2);

x1 := x2; y1 := y2;

delay(5);

end;

{ --------------------------- формирование спрайта ----- }

SetColor(Cyan);

x := margin; y := x;

Circle(x + s2, y + s2, s2);

SetFillStyle(InterLeaveFill, Green);                      { 6 }

FillEllipse(x + s4,y + s4, s4, s4 div 2);

FillEllipse(x + 3 * s4,y + s4, s4, s4 div 2);

SetLineStyle(SolidLn, 0, ThickWidth);                     { 7 }

Line(x + s2, y + s4, x + s2, y + s2);

SetColor(Red);

Arc(x + s2, y + s2, 200, 340, s4);

Getmem(image, imagesize(x, y, x + size, y + size));       { 8 }

GetImage(x, y, x + size, y + size, image^);               { 9 }

PutImage(x, y, image^, XorPut);

{ ------------------ вывод движущегося изображения ----- }

while x < GetMaxX - margin - size do begin             { 10 }

PutImage(x, y, image^, XorPut);

delay(20);

PutImage(x, y, image^, XorPut);

inc(x, 5);

end;

PutImage(x, y, image^, XorPut);

{ ----------------------------------- вывод текста ----- }

SetColor(Cyan);

SetTextStyle(GothicFont, HorizDir, 4);                    { 11 }

OuttextXY(HalfX + margin, HalfY - margin, 'The end');

readln;

CloseGraph                                                { 12 }

end.

Графическая библиотека подключается в операторе 1. В графический режим экран переводится в операторе 2 вызовом процедуры InitGraph. Ей надо передать три параметра: номер графического драйвера (grDriver), его режим grMode и путь к каталогу, в котором находятся драйверы.

Если параметр grDriver равен константе Detect, заданной в модуле Graph, выбор режима выполняется автоматически.

Если графический режим выбирался автоматически, для позиционирования изображений на экране необходимо получить доступное количество точек по X и по Y с помощью функцийGetMaxX и GetMaxY (оператор 4). В данной программе с помощью этих функций формируются координаты центра экрана.

В цикле (оператор 5) выводится серия линий с небольшой задержкой. Цвет линий изменяется случайным образом через каждые 10 итераций.

Следующий фрагмент программы демонстрирует работу с графическими спрайтами, которые применяются для вывода движущихся изображений. Для увеличения скорости отрисовки изображение формируется один раз, после чего заносится в память с помощью процедуры GetImage (оператор 9). Объем памяти, необходимый для размещения спрайта, определяется с помощью процедуры ImageSize, выделение памяти выполняет процедура GetMem (оператор 8).

При формировании изображения использована процедура установки стиля закраскиSetFillStyle (оператор 6). Он используется процедурой рисования закрашенного эллипсаFillEllipse. Стиль линии, задающий повышенную толщину линии, устанавливается процедурой SetLineStyle (оператор 7). Этот стиль действует при выводе отрезка (Line) и дуги (Arc).

Для вывода спрайта используется процедура PutImage. Ее четвертый параметр задает способ сочетания выводимого изображения и фона. Операция исключающего ИЛИ (она задается константой XorPut), примененная дважды, позволяет оставить неизменным фон, по которому движется изображение (цикл 10).

Перед выводом текста устанавливается его стиль (оператор 11). Стиль текста состоит из имени шрифта, его расположения (горизонтальное или вертикальное) и масштаба. В модуле Graph имеется один растровый шрифт и несколько векторных. Каждый символ растрового шрифта определяется точечной матрицей 8 х 8, символ векторного шрифта задается набором кривых.

В конце программы восстанавливается исходный режим экрана (оператор 12).

Модуль Strings

Модуль предназначен для работы со строками, заканчивающимися нуль-символом, то есть символом с кодом 0 (их часто называют ASCIIZ-строки). Модуль содержит функции копирования, сравнения, слияния строк, преобразования их в строки типа string, поиска подстрок и символов.

В модуле System определен тип pChar, представляющий собой указатель на символ (^Char). Этот тип можно использовать для работы со строками, заканчивающимися #0. Эти строки располагаются в динамической памяти, и программист должен сам заниматься ее распределением.

Кроме того, для хранения ASCIIZ-строк используются массивы символов с нулевой базой, например:

var  str : array[0 .. 4000] of char;

p: pChar;

Массивы символов с нулевой базой и указатели на символы совместимы.

Категория: Модули | Добавил: i_elf (11.12.2012)
Просмотров: 9034 | Комментарии: 3 | Рейтинг: 2.0/1
Всего комментариев: 1
1 димас  
0
ХУЙНЯ ЕБАННАЯ!!!1

Имя *:
Email *:
Код *:
Поиск

Друзья сайта
  • Творческий учитель
  • Сайт ООАКМР
  • Школьный сайт
  • Информатика учебник
  • МОИ

  • Copyright MyCorp © 2024 Сделать бесплатный сайт с uCoz