Модуль представляет собой совокупность программных ресурсов, предназначенных для использования другими программами. Стандартные модули включают в себя стандартные константы, переменные, процедуры и функции Турбо-Паскаля. Стандартный модуль можно рассматривать как библиотеку подпрограмм.
В составе Турбо-Паскаль 6.0 имеются 8 стандартных модулей:
Для использования процедур или функций данного модуля необходимо подключить его с помощью оператора
uses имя модуля1 [, имя модуля2, …];
Модуль system подключается автоматически.
Обеспечивают совместимость с программами, разработанными ранее для ТР 3.0
Предоставляет средства для разработки оверлейных программ (размер которых превышает объем доступной оперативной памяти, и которые загружаются в память по частям)
Содержит средства доступа к операционной системе DOS (процедуры и функции для работы с дисками, файлами, системной датой, временем).
Содержит процедуры и функции стандартного Паскаля и некоторые другие основные процедуры и функции.
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;
Делает доступным вывод результатов работы программы на печатающее устройство, связывая стандартную переменную LST с принтером.
Пример:
uses printer; var a: integer; begin a:=20; writeln(lst,'a=',a); {вывод на принтер a=20} end.
Содержит процедуры и функции управления экраном в текстовом режиме, управления звуком и работы с клавиатурой.
При работе в текстовом режиме весь экран разбивается на позиции (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.
Cодержит процедуры и функции, обеспечивающие работу с экраном в графическом режиме (создание изображений).
{Драйвер устройства – программа управления устройством.
Видеоадаптер – системное устройство, непосредственно управляющее монитором и выводом информации на экран. Основные части – видеоконтроллер, видеоBIOS, видеопамять и т.д.}
Процедуры и функции управления графическими режимами.
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.