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

В составе Турбо-Паскаль 6.0 имеются 8 стандартных модулей:

  • system
  • dos
  • crt
  • printer
  • overlay
  • graph
  • Турбо3
  • graph3
  • strings      - (модули Турбо-Паскаль 7.0. используются для совместимости с другими )
  • windows     (языками и средой Windows)

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

uses имя модуля1 [, имя модуля2, …];

Модуль system подключается автоматически.

 

7.1 Модули ТУРБО3 и GRAPH3

Обеспечивают совместимость с программами, разработанными ранее для ТР 3.0

 

7.2 Модуль OVERLAY

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

 

7.3 Модуль DOS

Содержит средства доступа к операционной системе DOS (процедуры и функции для работы с дисками, файлами, системной датой, временем).

 

7.4 Модуль SYSTEM

Содержит процедуры и функции стандартного Паскаля и некоторые другие основные процедуры и функции.

inc (x[,n]) – увеличение значения переменной x на n единиц (инкремент).

dec (x[,n]) – уменьшение значения переменной x на n единиц (декремент).

Пример:

 x:=x+1;inc(x);
 x:=x+5; inc(x,5); 
 y:=y-1; dec(y); 
 y:=y-6; dec(y,6);

high(x) – получение максимального значения величины х; если х – массив, то максимального значения индекса.

Пример:

 var y: word; 
 … 
 writeln(high(y));     { 65535  }

low(x) – получение минимального значения величины х; если х – массив, то минимального значения индекса.

Пример:

 var  y: integer; 
 … 
 writeln(low(y));      { -32768 }

exit – немедленный выход из подпрограммы.

halt – прекращение выполнения программы и передача управления операционной системе.

 

Пример:

 writeln('Введите x>0'); 
 readln(x); 
 if x<=0 then halt; 

7.5 Модуль PRINTER

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

 

Пример:

uses printer;
 var  a: integer; 
begin 
  a:=20; 
  writeln(lst,'a=',a); {вывод на принтер a=20} 
end.

7.6 Модуль CRT

Содержит процедуры и функции управления экраном в текстовом режиме, управления звуком и работы с клавиатурой.

При работе в текстовом режиме весь экран разбивается на позиции (25 строк по 80 позиций в каждой). Для каждой позиции можно задать цвет фона и цвет символа, символ можно сделать мерцающим.

Координаты 1 позиции (верхний левый угол) – (1,1), последней позиции (нижний правый угол) – (80,25).

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

Процедуры и функции модуля CRT (управление звуком и клавиатурой)

keypressed: boolean; - возвращает true, если была нажата любая клавиша (кроме ^, shift, alt…) и false в противном случае. Не останавливает программу в ожидании нажатия клавиши, поэтому можно repeat…until keypressed; (вместо readln;)

readkey: char; - считывает символ нажатой клавиши (без отображения на экране). Приостанавливает выполнение программы до нажатия любой клавиши, кроме служебных (ctrl, alt, shift…)

if keypressed then ch:=readkey:

Код обычных клавиш (цифры, алфавит) хранится в 1 байте, коды функциональных клавиш (F1…F12) – в двух байтах: первый = 0, второй – код клавиши. Поэтому, чтобы считать код функциональной клавиши, надо 2 раза вызвать функцию readkey: при первом вызове она считает 0, при втором – непосредственно код клавиши.

Пример:

uses Crt; 
var ch:char; 
begin 
  writeln('Нажмите клавишу'); 
  ch:=readkey; 
  if ch <>#0 then writeln('Клавиша ', ch) 
  else begin 
         ch:=readkey; 
         writeln('функциональная клавиша ', ord(ch)); 
       end;
end.

delay (t); - приостанавливает работу программы на время t (милисекунд).

sound (f); - включает звук заданной частоты (в Гц).

nosound; - выключает звук

 

Пример:

sound(440); delay(500); nosound;

Пример: Имитация музыкального инструмента.

uses crt;
const m: array [1..8] of integer = (262,294,330,350,392,440,494,523); 
var  i: integer; 
    ch: char; 
begin 
  writeln('Играйте на клавишах 1-8; 0 - выход'); 
  while true do 
  begin 
    ch:=readkey; 
    case ch of 
     #49: i:=1; 
     #50: i:=2; 
           …
     #56: i:=8; 
     #48: halt; 
    end; 
   sound(m[i]); 
   delay(1000); 
   nosound; 
  end; 
end.

Константы модуля CRT (коды цветов и режимов)

 

Процедуры и функции управления экраном

clrscr; - очистка активного окна и перевод курсора в верхний левый угол.

clreol; - очистка строки активного окна от текущей позиции курсора до конца строки.

insline; - вставляет новую пустую строку в позицию курсора, заполняет ее цветом фона.

delline; - удаляет строку, на которой стоит курсор. Остальные строки сдвигаются (↑ или ↓).

highvideo; - переход к более яркому цвету символов (0→8, 1→9,…, 7→15).

lowvideo; - переход к менее яркому цвету символов (8→0, 9→1,…, 15→7).

normvideo; - переход к стандартному цвету символов (7)

textmode (m); - установка текстового режима. По умолчанию - СО80.

textbackground (col); - установка цвета фона (col = 0-7).

textcolor (col); - установка цвета символов (col = 0-15).

window (x1,y1,x2,y2); - определяет текстовое окно на экране.

gotoxy (x,y); - переводит курсор в заданную позицию окна. (х,у) – координаты нового положения курсора.

whereX: byte; - возвращает координату х текущей позиции курсора.

whereY: byte; - возвращает координату у текущей позиции курсора.

 

Пример 1: Сформировать на экране текстовое окно другого цвета и напечатать в середине окна приветствие.

uses crt; 
begin 
  textmode(3); 
  textbackground(2); 
  clrscr; 
  textcolor(14); 
  window(20,10,60,15); 
  textbackground(6); 
  clrscr; 
  gotoxy(15,3); 
  writeln('Hello'); 
  delay(1000); 
  textmode(3); 
end.

Пример 2: Программа выводит на экран последовательность цифр 0..9, стрелками ← → выбирает и подсвечивает любую цифру.

uses crt;
var x,y,i: integer;
    ch: char;
procedure Put(x,y,i,col: integer);
begin
  textbackground(col);
  gotoxy(x+i*3,y);
  write(' ',i,' ');
  gotoxy(x+i*3+1,y);
end;
begin
  textmode(3);
  clrscr;
  y:=13; x:=25;
  for i:=0 to 9 do put(x,y,i,1);
  i:=0; put(x,y,i,2);
  repeat
    ch:=readkey;
    put(x,y,i,1);
    if ch = #75 then dec(i);
    if ch = #77 then inc(i);
    if i<0 then i:=9;
    if i>9 then i:=0;  
    put(x,y,i,2);
  until ch=#27; {esc}
  textmode(3);
end.

Вариант без процедуры:

uses crt;
var  x,y,i: integer;
     ch: char;
procedure Put(x,y,i,col: integer);
begin
  gotoxy(x+i*3,y);
  write(' ',i,' ');
  gotoxy(x+i*3+1,y);
end;
begin
  textmode(3);
  clrscr;
  y:=13; x:=25;
  textbackground(1);
  for i:=0 to 9 do
  begin
    gotoxy(x+i*3,y);
    write(' ',i,' ');
  end; 
  i:=0;
  textbackground(2); 
  gotoxy(x+i*3,y);
  write(' ',i,' ');
  gotoxy(x+i*3+1,y);
  repeat
     ch:=readkey;
     if ch = #0 then
       begin
        ch:=readkey;
        textbackground(1);{}
        gotoxy(x+i*3,y);{стирает подсветку}
        write(' ',i,' ');{}
        if ch = #75 then dec(i);
        if ch = #77 then inc(i);
        if i<0 then i:=9;
        if i>9 then i:=0;
        textbackground(2);
        gotoxy(x+i*3,y); //подсвечивает другую цифру
        write(' ',i,' '); 
        gotoxy(x+i*3+1,y);
      end;
   until ch=#27; {esc}
   textmode(3);
end.

7.7 Модуль GRAPH

Cодержит процедуры и функции, обеспечивающие работу с экраном в графическом режиме (создание изображений).

  1. В графическом режиме весь экран разбивается на точки (пиксели – от англ. pixel). Каждую точку можно закрасить в любой цвет, таким образом из различных комбинаций точек создается изображение.
  2. Каждая точка имеет координаты (х, у), х увеличивается по горизонтали слева направо, у – по вертикали сверху вниз. Верхний левый угол имеет координаты (0, 0), количество пикселей зависит от типа видеоадаптера и режима его работы. Для адаптера VGA – 640х480 (стандартный режим). Чем больше пикселей (точек), тем выше качество изображения.
  3. {Драйвер устройства – программа управления устройством.

    Видеоадаптер – системное устройство, непосредственно управляющее монитором и выводом информации на экран. Основные части – видеоконтроллер, видеоBIOS, видеопамять и т.д.}

  4. В графическом режиме можно выделить на экране графическое окно, тогда координаты отсчитываются внутри окна, верхний левый угол считается точкой (0,0).
  5. В графическом режиме, в отличие от текстового, курсор невидим на экране, но также можно переместить его в любую точку экрана, получить его текущие координаты.

Процедуры и функции управления графическими режимами.

initgraph (gd, gm, path); - процедура инициализации графического режима.

gd – код драйвер графического адаптера:

  для CGA gd=1 или CGA

  для EGA gd=3 или EGA

  для VGA gd=9 или VGA

для автоматического определения драйвера gd=0 или Detect;

gm – код графического режима, устанавливается процедурой.

gd, gm – переменные целого типа!

path – строка, содержащая путь к драйверу: ‘c:\tp6\bgi’, т.е. вам надо сначала найти файл GRAPH.TPU и

          здесь указать путь до этого файла.

closegraph; - процедура завершения графического режима и перехода в текстовый режим.

graphresult: integer; - возвращает код ошибки последней графической операции (0 – успешное выполнение).

grapherrormsg (cool: intrger):string; - возвращает сообщение об ошибке для заданного кода ошибки.

restorecrtmode; - процедура восстановления текстового режима.

setgraphmode (gm); - процедура установления графического режима.

Пример 1.

uses crt, graph;
var  gd, gm: integer;
begin
  gd:=detect;
  initgraph (gd, gm, 'c:\tp6\bgi'); {укажите правильный путь до bgi}
  if graphresult <> 0 then
  begin
    write ('ошибка графики:', grapherrormsg (graphresult));
    halt;
  end;
  …
  closegraph;
end.

Процедуры управления экраном и окном.

cleardevice; - процедура очистки графического экрана, заполнения его цветом фона, установления курсора в (0,0).

setviewport (x1, y1, x2, y2: integer; clip: boolean); - процедура установки графического окна.

x1, y1 – верхний левый угол,

x2, y2 – нижний правый угол,

clip – ограничитель фигур. Если clip=true, то построение фигур происходит только в пределах окна, в противном случае фигуры могут выходить за пределы окна.

clearviewport; - процедура очистки графического окна (заполняет цаетом фона, курсор в (0,0)).

Процедуры и функции работы с точками.

GetmaxX: integer; - возвращает максимальное значение координаты x экрана.

GetmaxY: integer; - возвращает максимальное значение координаты y экрана.

GetX: integer; - возвращает координату x текущей позиции на экране.

GetY: integer; - возвращает координату y текущей позиции на экране.

GetPixel (x,y): word; - возвращает цвет точки с заданными координатами.

PutPixel (x,y,color); - процедура закрашивает точки с координатами (x,y) в цвет color.

Процедуры работы с линиями

line (x1, y1, x2, y2); - проводит прямую между точками (x1,y1) и (x2,y2).

moveto (x,y); - перемещает курсор в точку (х,у).

lineto (x,y); - проводит прямую из текущей точки в точку с координатами (x,y).

linerel (dx,dy); - проводят прямую из текущей точки в точку, сдвинутую на dx и dy: (x+dx, y+dy).

moverel (dx,dy); - перемещает курсор в точку, сдвинутую на dx, dy.

Процедуры построения фигур из линий.

bar (x1, y1, x2, y2); - построение закрашенного прямоугольника

 

bar3d (x1, y1, x2, y2, gr, top); - построение закрашенного параллелепипеда, gr – ширина боковой грани (отсчитывается по горизонтали), top = true – рисовать верхнюю грань

 

rectangle (x1, y1, x2, y2); - построение контура прямоугольника

arc (x, y, st, end, r); - построение дуги окружности, (х,у) – координаты центра, st – угол начала, end – угол конца дуги, r – радиус. Отсчет идет против часовой стрелки от горизонтальной оси справа от центра.

circle (x, y, r); - построение окружности, (х,у) – центр, r – радиус.

ellipse (x, y, st, end, xr, yr); - построение дуги эллипса, (x,y) – центр, st, end – углы начала и конца, xr, yr – радиусы по оси х и у.

fillellipse (x, y, xr, yr); - построение закрашенного эллипса.

pieslice (x, y, st, end, r); - построение закрашенного сектора круга.

sector (x, y, st, end, xr, yr); - построение закрашенного сектора эллипса.

Пример:

 x1:=10; y1:=10; x2:=100; y2:=50; dx:=40; dy:=20;
 for i:=1 to 10 do
 begin
   bar(x1, y1, x2, y2);
   x1:=x1+dx; x2:=x2+dx;
   y1:=y1+dy; y2:=y2+dy;
 end;

Процедуры установки цветов и стилей.

setcolor (color); - устанавливает текущий цвет рисования (для линий и текста).

setbkcolor (color); - устанавливает цвет фона экрана.

setlinestyle (sl, p,t); - установка стиля и толщины линии (sl – стиль, p – шаблон при sl=4, t – толщина линии).

floodfill (x, y, colline); - закрашивает замкнутую область, ограниченную непрерывной линией. (х,у) – координаты любой точки внутри области, colline – цвет линии, до которой закрашивается.

 

Пример: Построить спираль с начальной точкой (хс,ус), n витками и начальным углом α.

uses  crt, graph; 
const  n=10; alf=pi; dt=pi/45;
var  gd, gm, x, y, xc, yc, i, j: integer;
procedure Spi(xc,yc,n: integer; dt,alf: real);
begin
  moveto(xc,yc);
  t:=alf;
  for i:=1 to n do
   for j:=1 to 90 do
   begin
    t:=t+dt; r:=2*t;
    x:=round(r*cos(t)+xc);//x=r*cos(t)окружность, t-угол.
    y:=round(r*sin(t)+yc);//y=r*sin(t)r увеличиваем, получаем
    lineto(x,y);спираль.
   end;
end;
begin
 gd:=detect;
 initgraph (gd, gm, 'L:\tp6\bgi');
 if graphresult <> 0 then
 begin
  write ('ошибка графики:', grapherrormsg (graphresult));
  halt;
 end;
 xc:=getmxx div 2;
 yc:=getmaxy div 2;
 spi(xc,yc,n,dt,alf);
 readln;
 closegraph;
end.

Процедуры работы с текстом.

outtext (text: string); - выводит на экран текстовую строку, начиная с текущей позиции.

outtext(‘hello’);

outtextxy (x, y, text); - выводит на экран текстовую строку, начиная с заданных координат (х,у).

outtextxy(100,100,‘hello’);

settextstyle (font, dir, size); - устанавливает стиль текста

font – шрифтdir – направлениеsize – размер символов

0 – стандартный0 – слева направо(0-30)

1 – утроенный1 – сверху вниз

2 – маленький

3 – прямой

4 – готический

settextjustify (horiz, vert); - устанавливает выравнивание текста на экране (horiz-горизонтальное, vert-вертикальное).

0 – слева (снизу)

1 – по центру

2 – справа (сверху)

Процедуры обмена с памятью

getimage (x1, y1, x2, y2, M); - копирует в массив М прямоугольную область экрана, заданную координатами (х1,у1) и (х2,у2).

putimage (x, y, M, bit); - выводит изображение из массива М на экран. (х,у) – координаты точки, в которой будет левый верхний угол изображения, М – массив, в котором было сохранено изображение, bit – операция объединения выводимого изображения с имеющимся на экране.

0 – mov экран + массив - старое изображение исчезает

1 – xor + - стираются точки пересечения

2 – or + - оба изображения

3 – and + - остаются точки пересечения

 

Пример1: Программа перемещения по экрану графического объекта

uses crt, graph;
var  gd, gm, x, y: integer;
     m: array [1..1500] of byte;
begin
 gd:=detect;
 initgraph (gd, gm, 'c:\tp6\bgi');
 if graphresult <> 0 then
 begin
   write ('ошибка графики:', grapherrormsg (graphresult));
   halt;
 end;
 circle(20,20,20);
 getimage(0,0,40,40,m);
 x:=0; y:=0;
 readln;
 while x<600 do
 begin
   putimage(x,y,m,1);
   x:=x+2; y:=y+1;
   putimage(x,y,m,1);
   delay(100);
 end;
 closegraph;
end.