3.11.1. Модуль graph
Представленные далее в пунктах 3.11.2 Ч 3.11.7 процедуры и функции включены в стандартный модуль graph.tpu и станновятся доступны только после объявления в программе uses graph.
В модуль входит более 70 процедур и функций, предоставнляющих пользователю разнообразные возможности управнления графическим экраном. Все процедуры и функции сгруппированы по функциональному назначению. Настройнка графических процедур на работу с конкретным адаптенром достигается за счет подключения нужного графическонго драйвера.
Драйвер Ч это специальная программа, осуществляющая управление теми или иными техническими средствами ПК. Графические драйверы разработаны фирмой Borland пракнтически для всех адаптеров. Обычно они располагаются на диске в отдельном подкаталоге bgi в виде файлов с расшинрением .bgi. Например, cga.bgi Ч драйвер для еда-адаптенра, egavga.bgi Ч драйвер для адаптеров еда и vga.
3.11.2. Настройка режимов
Стандартное состояние ПК к моменту запуска программы из среды Турбо-Паскаля соответствует работе экрана в текстонвом режиме, поэтому любая программа, использующая гранфические средства компьютера, должна определенным обнразом инициировать графический режим работы адаптера. После завершения работы графический режим должен быть закрыт и ПК возвращается в текстовый режим.
Основные процедуры группы настройки режимов
I. Процедура initgraph инициирует графический режим ранботы адаптера.
Формат обращения: initgraph (драйвер, режим, путь); Параметры имеют следующие значения:
Чдрайвер Ч переменная типа integer, задающая тип графического драйвера; определены следующие значенния этой переменной:
1) detect или 0 Ч автоматическое определение адаптера, в этом случае значение для режима не задается (он принимается наибольшим), но его имя в списке присутствует;
2) cga или 1 Ч адаптер cga, цветной, 320x200 точек;
3) еда или 3 Ч адаптер еда, цветной, до 640x350 точек;
4) vga или 9 Ч адаптер vga, цветной, до 640x480 точек;
Чрежим Ч переменная типа integer, определяющая ренжим работы графического адаптера; для любого драйнвера cga,ega,vga должно быть задано значение этой переменной, которое уточнит размеры экрана, палитнру и пр. Так, для драйвера vga могут быть заданы знанчения:
1) 0 Ч экран 640x200 точек;
2) 1 Ч экран 640x350 точек;
3) 2 Ч экран 640x480 точек;
Чпуть Ч выражение типа string, содержащее путь к файлу драйвера; пустая строка (") задается только в случае, если драйвер скопирован в текущий каталог (туда, где находится и программа).
К моменту обращения к процедуре на одном из дисконвых носителей информации должен находиться файл, содержащий нужный графический драйвер. Процедура загружает этот драйвер в оперативную память и перенводит адаптер в графический режим работы. Тип драйнвера должен соответствовать типу графического адапнтера.
II. Процедура closegraph прекращает работу адаптера в графическом режиме и восстанавливает текстовый ренжим работы экрана.
Формат обращения: closegraph;
III. Процедура restorecrtmode служит для кратковременнонго возврата в текстовый режим.
Формат обращения: restorecrtmode;
В отличие от процедуры closegraph, не сбрасываются установленные параметры графического режима и не освобождается память, выделенная для размещения графического драйвера. Выполнив необходимые дейстнвия в текстовом режиме (ввод, вычисления и пр.), можнно вернуться в графический процедурой setgraphmode (getgraphmode);
IV. Процедура cleardevice позволяет очистить графический экран.
Формат обращения: cleardevice;
V. Процедура graphdefaults сбрасывает все установленные пользователем типы линий, заполнения, шрифтов и пр. Формат обращения: graphdefaults;
3.11.3. Построение фигур
Почти во всех приведенных ниже процедурах цвет, толнщина, стили линий и заполнения назначаются с помощью процедур из пункта 3.11.5 или устанавливаются по умолнчанию.
I. Процедура putpixel выводит заданным цветом точку в указанные координаты х, у.
Формат обращения: putpixel(x,y,4BeT);
где х, у Ч выражения типа integer, определяющие коорндинаты по горизонтали и вертикали; цвет Ч выражение типа word, определяющее цвет.
Координаты задаются относительно левого верхнего угнла окна (0,0) или, если окно не установлено, относинтельно левого верхнего угла экрана.
II. Процедуры line, lineto, linerel вычерчивают линию. Формат обращения:
1) Iine(x1,y1,x2,y2);
где х1,у1,х2,у2 Ч выражения типа integer, задающие координаты начала (х1,у1) и конца (х2,у2) линии;
2) Iineto(x2,y2);
где х2,у2 Ч выражения типа integer, задающие конординаты конца линии; начальное положение линии определяет точка с текущими координатами;
3) linerel(dx,dy);
где dx,dy Ч выражения типа integer, задающие принращение конца линии от текущих координат.
III. Для назначения текущих координат используются процендуры mo vet о и moverel.
Формат обращения:
1) moveto(x1,y1);
где х1 ,у1 Ч выражения типа integer, задающие конординаты текущей точки экрана;
2) moverel(dx,dy);
где dx ,dy Ч выражения типа integer, задающие принращение координат текущей точки от предыдущего положения.
IV. Процедуры rectangle и bar вычерчивают прямоугольник. Формат обращения: rectangle(x1,y1,x2,y2); bаr(х1,у1,х2,у2); где х1,у1,х2,у2 Ч выражения типа integer, задающие конординаты левого верхнего (х1,у1) и правого нижнего (х2,у2) углов прямоугольника.
Прямоугольник, построенный процедурой bar, заполнянется текущим цветом и стилем.
V. Процедура barSd вычерчивает трехмерное изображение параллелепипеда и закрашивает его переднюю грань.
Формат обращения: bar3d(x1,y1,x2,y2,z,pr);
где х1,у1,х2,у2 Ч выражения типа integer, задающие конординаты левого верхнего (х1,у1) и правого нижнего (х2,у2) углов передней грани; z Ч выражение типа inteнger, задающее третье измерение изображения; рr Ч вынражение типа boolean, определяющее способ изображенния верхней грани.
Если параметр рr имеет значение true, верхняя грань параллелепипеда вычерчивается, в противном случае не вычерчивается (этот вариант используется для изобранжения поставленных друг на друга параллелепипедов). В качестве значения параметра рr может использоватьнся одна из следующих констант, определенных в модунле graph: const topon = true; topoff = false;
VI. Процедуры drawpoly, fillpoly вычерчивают произвольнную ломаную линию или многоугольник.
Формат обращения:
drawpoly(n,массив координат);
fillpoly(n,массив координат);
где п Ч выражение типа word, задающее количество вершин (ломаная, состоящая из пяти отрезков, отличанется от пятиугольника тем, что в первой Ч пять вершин, во втором Ч шесть, при этом координаты первой и шенстой вершин совпадают); массив координат должен быть объявлен с типом элементов pointtype; этот тип определен в модуле как
type pointtype = record x,y:word end;
т. е. координаты вершин задаются парой значений типа word: первое определяет горизонтальную, второе Ч вертикальную координату.
fillpoly может использоваться для построения только многоугольников, так как они заполняются текущим цвентом и стилем.
VII. Процедура circle вычерчивает окружность. Формат обращения: circle(x,y,r);
где х,у Ч выражения типа integer, задающие координаты центра;
r Ч выражение типа word, задающее радиус.
VIII. Процедуры arc, pieslice вычерчивают дугу или сектор окружности.
Формат обращения:
аrс(х,у,нач.угол,кон.угол,г);
рieslice(х,у,нач.угол,кон.угол,r);
где х, у Ч выражения типа integer, указывающие координнаты центра; нач.угол, кон.угол Ч выражения типа word, задающие начальный и конечный углы дуги (arc) или сектора (pieslice), углы отсчитываются против часовой стрелки и указываются в градусах; r Ч выражение типа word, задающее радиус.
Построенный сектор заполняется текущим цветом и стинлем.
IX. Процедуры ellipse, fillellipse, sector вычерчивают эллипсную дугу, эллипс или его сектор.
Формат обращения:
ellipse (х,у,нач.угол,кон.угол,rx,ry);
fillellipse (x,y,rx,ry);
sector (x,у,нач.угол,кон.угол,rx,ry);
где х,у, нач.угол, кон.угол Ч см. пояснения к VIII; rx, ry Ч выражения типа word, определяющие горизонтальный и вертикальный радиусы эллипса.
Эллипс, построенный процедурой fillellips, или его секнтор (sector) заполняется текущим цветом и стилем.
X. Процедура floodfill закрашивает текущим цветом и стинлем произвольную замкнутую фигуру.
Формат обращения:
floodfill(x,y^BeT границы); где х,у Ч выражения типа integer; координаты любой точки внутри замкнутой фигуры; цвет границы Ч выранжения типа word, задает цвет граничной линии. Если фигура не замкнута или неверно задан цвет гранинцы, закраска разольется по всему экрану.
3.11.4. Сохранение и последующая выдача изображений
I. Функция imagesize возвращает количество байт, необнходимых для размещения прямоугольного фрагмента изображения.
Формат обращения: imagesize (х1 ,у1 ,х2,у2); где х1,у1 и х2,у2 Ч выражения типа integer, определяюнщие координаты левого верхнего и правого нижнего угнлов прямоугольника, охватывающего изображение. Тип возвращаемого функцией значения Ч word.
II. Процедура getmem (модуль system) выделяет память для сохранения прямоугольной области.
Формат обращения: getmem(uk,b);
где uk Ч указатель на область памяти типа integer (аднрес! см. раздел 3.12); b Ч количество байт, которые ненобходимо выделить, это данное является результатом функции imagesize.
Процедура getmem вернет адрес uk, по которому будет размещаться b байт изображения.
III. Процедура getimage помещает в память копию прямонугольного фрагмента изображения.
Формат обращения:
getimage(x1,y1,x2,y2,содержимое по адресу uk); где х1,у1,х2,у2 Ч см. пояснение к I; содержимое по аднресу uk в Паскале записывается как uk".
IV. Процедура putimage выводит в заданное место экрана копию фрагмента изображения, ранее помещенную в память процедурой getimage.
Формат обращения:
рutimage(х,у,содержимое по адресу uk,pr); где х,у Ч выражения типа integer, определяющие коорндинаты левого верхнего угла того места на экране, кунда будет скопирован из динамической памяти фрагмент изображения; содержимое по адресу uk Ч см. поясненние к III; pr Ч выражение типа word, определяющее спонсоб копирования.
Параметр рr задает способ взаимодействия вновь разнмещаемой копии с уже имеющимся на экране изобранжением. Взаимодействие осуществляется путем применнения кодируемых этим параметром логических операций к каждому биту копии и изображения. Для уканзания применяемой логической операции можно иснпользовать одну из следующих предварительно опреденленных в модуле graph констант:
const normalput = 0; {переслать Ч mov}
xorput = 1; {исключающее ИЛИ Ч хог}
orput = 2; {логическая операция ИЛИ Ч or}
andput = 3; {логическая операция И Ч and}
notput = 4; {инверсия изображения НЕ Ч not}
Наиболее часто используются операции normalput, xorput, notput. Первая из них просто стирает часть экрана и на это место помещает копию из памяти. Операция notput делает то же самое, но копия выводится в инверсном виде, т. е. светлые точки заменяются на темные и наоборот. Повторнный вывод с аргументом xorput фрагмента изображения на то же место экрана, откуда была получена первая копия, сотрет эту часть экрана. Движение фигуры на экране можнно имитировать этим способом: задаем первые координанты и выставляем фигуру на экран с рr = 0, выполняем зандержку экрана (модуль crt, пункт 3.11.8), повторно выставляем фигуру в эту же точку с рr=1, повторяем эту понследовательность действий, изменив координаты.
3.11.5. Установочные процедуры
I. Процедуры setcolor, setbkcolor устанавливают текущий цвет для выводимых линий, символов и цвета фона.
Формат обращения: setcolor (цвет); setbkcolor (цвет); где цвет Ч выражение типа word, задающее текущий цвет символов (setcolor) или фона (setbkcolor). В модуле graph определены следующие константы для задания цвета:
const
black= 0; {черный}
blue = 1; {синий}
green= 2; {зеленый}
cyan= 3; {голубой}
red= 4; {красный}
magenta= 5; {фиолетовый}
brown= 6; {коричневый}
lightgrey= 7; {светло-серый}
darkgrey= 8; {темно-серый}
lightblue= 9; {ярко-синий}
lightgreen= 10; {ярко-зеленый}
lightcyan=11; {ярко-голубой}
lightred= 12; {розовый}
lightmagenta= 13; {малиновый}
yellow= 14; {желтый}
white= 15; {белый}
II. Процедура setlinestyle устанавливает стиль вычерчиванемых линий.
Формат обращения: setlinestyle (вид,образец,толщина); Здесь параметры имеют следующие значения:
Ч вид Ч выражение типа word, означающее вид линии. Вид линии определяется следующими константами:
const
solidln = 0; {сплошная линия}
dottedln = 1; {точечная линия}
centerln = 2; {штрихпунктирная линия}
dashedln = 3; {пунктирная линия}
userbitln = 4; {вид линии определяется пользовантелем};
Чобразец Ч выражение типа word, указывающее обранзец линии. Для всех видов линий от 0 до 3 это значенние задается равным нулю; для пользовательского вида задается собственный шаблон;
Чтолщина Ч выражение типа word, задающее толщину линии. Параметр толщина может принимать одно из двух значений:
const
normwidth = 1; {толщина в одну точку}
thickwidth = 3; {толщина в три точки}
III. Процедура setfillstyle устанавливает стиль (тип и цвет) заполнения фигур.
Формат обращения: setfillstyle (тип,цвет); Здесь параметры имеют следующие значения:
Ч тип Ч переменная типа word, определяющая тип занполнения.
Тип заполнения определяется следующими константами:
const
emptyfill = 0; {заливка цветом фона}
solidfill = 1; {заливка назначенным цветом}
linefill = 2; {штриховка линиями}
itslashfill = 3; {штриховка //////}
slashfill = 4; {штриховка утолщенными /////}
bkslashfill = 5; {штриховка \\\\\\}
itbkslashfill = 6; {штриховка утолщенными \\\\\\}
hatchfill = 7; {штриховка ++++++}
xhatchfill = 8; {штриховка хххххх}
interleavefill = 9; {штриховка в клетку}
widedotfill =10; {штриховка редкими точками}
closedotfill =1 1 ; {штриховка частыми точками}
userfill =12; {штриховка определяется пользователем}
Ч цвет Ч переменная типа word, задающая цвет заполннения.
Если параметр тип имеет значение 12, то рисунок узонра определяется программистом и задается в процедунре setfillpattern, которая может использоваться без setнfillstyle.
IV. Процедура setfillpattern устанавливает образец и цвет заполнения.
Формат обращения:
setfillpattern (тип, цвет); где цвет Ч переменная типа word, задающая цвет занполнения;
тип Ч переменная типа fillpatterntype, которая в модуле graph имеет описание: type fillpatterntype=array[1..8] of byte; Свой тип заполнения пользователь, таким образом, заданет в матрице 8x8 точек: восемь элементов массива, кажндый из которых задается двумя шестнадцатеричными цинфрами (10101010 Ч восемь двоичных цифр, задаются АА Ч двумя шестнадцатеричными). Следующий фрагмент пронграммы позволяет установить стиль лшахматной доски╗: ... const fk: fillpatterntype = ($AA,$55,$AA,$55,$AA,$55, $АА,$55); ... setbkcolor(...); ... setcolor(...); ... setfillpattern(fk,red);
V. Процедура setviewport устанавливает прямоугольное окно на графическом экране. Формат обращения: setviewport(x1,y1,x2,y2,pr); где х1,у1,х2,у2 Ч выражения типа integer, задающие конординаты левого верхнего и правого нижнего углов окна; рr Ч выражение типа boolean, определяющее лотсечку╗ не умещающихся в окне элементов изображения. Если аргумент рг задать равным true, элементы изображения, не умещающиеся в пределах окна, отсекаются, в пронтивном случае границы окна игнорируются.
VI. Процедура setwritemode устанавливает способ взаимондействия вновь выводимых линий для line, lineto, linerel, rectangle, drawpoly с существующим изображением.
Формат обращения: setwritemode (0 или 1); где 0 Ч обозначает лпереслать╗, а 1 Ч лисключающее или╗ (см. putimage). ...setwritemode(l);
x1: = 0; у1: = 200;
for i:=1 to 10 do
begin
rectangle(x1,y1,x1 + 100,y1 + 100);
delay(I000);
rectangle(x1,y1,x1 + 100,y1 + 100);
x1:=x1+50;
end;...{Прямоугольник будет двигаться от левого к правому краю экрана}
3.11.6. Информационные процедуры и функции
I. Процедура detectgraph возвращает тип драйвера и режим его работы.
Формат обращения: detectgraph (драйвер, режим); где драйвер Ч переменная типа integer, определяющая тип драйвера; режим Ч переменная типа integer, вознвращающая максимально возможный для данного адаптера номер графического режима.
II. Функция graphresult возвращает значение типа integer, в котором закодирован результат последнего обращенния к графическим процедурам.
Формат обращения: graphresult.
Если ошибка не обнаружена, значением функции будет нуль, в противном случае Ч отрицательное число, уканзывающее номер ошибки. После обращения к функции graphresult признак ошибки сбрасывается, поэтому понвторное обращение к ней вернет нуль.
III. Функция grapherrormsg возвращает значение типа string, в котором по указанному коду ошибки дается соответствующее текстовое сообщение.
Формат обращения: grapherrormsg (код); где код Ч это значение ошибки, возвращенной функнцией graphresult.
IV. Функции getmaxx, getmaxy, getx, gety возвращают значенния типа integer, содержащие максимальные или текущие координаты экрана или окна по горизонтали и вертикали. Формат обращения: getmaxx, getmaxy, getx, gety.
V. Процедура getaspectratio возвращает два числа, познволяющие оценить соотношение сторон экрана. Формат обращения: getaspectratio (x,y);
где х,у Ч переменные типа word, позволяющие вычиснлить отношение сторон графического экрана в точках. Этот коэффициент может использоваться при постронении правильных геометрических фигур.
VI. Функции getmaxcolor, getcolor, getbkcolor возвращанют значения типа word, содержащие код максимально допустимого, текущего цвета символа и фона. Формат обращения: getmaxcolor, getcolor, getbkcolor.
VII. Процедура getlinesettings возвращает текущий стиль линий.
Формат обращения: getlinesettings(стиль);
где стиль Ч переменная типа linesettingstype, которая определена в модуле graph как: type linesettingstype = record
linestyle:word;{вид линии}
pattern :word; {образец)
end;
Информация о виде, образце и толщине линии привендена в пункте 3.11.5(11).
VIII. Процедура getfillsettings возвращает текущий стиль заполнения.
Формат обращения: getfillsettings (стиль); где стиль Ч переменная типа fillsettingstype, который определен в модуле graph как: type fillsettingstype = record
pattern:word; {тип заполнения} colonword {цвет}
end;
Назначение полей тип и цвет приведены в пункте 3.11.5(111).
IX. Процедура getfillpattern возвращает образец заполненния, установленный ранее процедурой setfillpattern. Формат обращения: getfillpattern (образец);
где образец Ч переменная типа fillpatterntype, в котонром возвращается образец заполнения. Информация о назначении образца заполнения пользонвателя приведена в пункте 3.11.5(IV). Если пользовантель не установил свой образец, то массив лобразец╗ будет заполнен восемью байтами со значением FF шестнадцатеричное.
X. Процедура getarccoords возвращает координаты трех точек: центра, начала и конца дуги для фигур arc, ellipse и пр.; она позволяет, например, организовать вращение линий, параллелепипедов и других фигур. Формат обращения: getarccoords (переменная типа запись); где переменная типа запись должна иметь стандартнный тип arccoordstype, поля которого объявлены в мондуле graph как type arccoordstype = record x,y,xstart, ystart,xend,yend: integer end;
3.11.7. Вывод текста
I. Процедуры outtext, outtextxy выводят текст: первая Ч начиная с текущего положения указателя, вторая Ч с точки, заданной координатами х,у.
Формат обращения: outtext (текст); outtextxy(x,y,TeKCT); где текст Ч выражение типа string или char.
II. Процедура gettextsettings позволяет получить инфорнмацию о текущем шрифте, его размере, форматированнии строки.
Формат обращения: gettextsettings (стиль); где стиль Ч переменная типа textsettingstype. Паранметр стиль объявляется в модуле graph как: type textsettingstype = record font, direction, charsize, horiz, vert: word end; где:
Чfont Ч загружаемый шрифт, для которого должен существовать файл с типом .chr; возможные значения:
const
defaultfont = 0;{загружаемый по умолчанию}
triplexfont = 1;{утроенный шрифт}
smallfont = 2;{уменьшенный шрифт}
sanssertiffont = 3;{прямой шрифт}
gothicfont = 4;{готический шрифт};
Чdirection Ч направление выдачи символов с возможнными значениями:
const
horizdir =0;{выдача текста слева направо}
vertdir =1;{выдача текста снизу вверх};
Ч charsize Ч размер символа, может принимать знанчения от 1 до 30;
Ч horiz, vert определяет выравнивание строки по горинзонтали и вертикали. Для первого выравнивания опренделены константы:
const lefttext = 0;{левое выравнивание}
centertext = 1 ;{центрирование}
righttext = 2; {правое выравнивание}.
Для второго:
const
bottomtext = 0;{прижимается вниз}
toptext = 1 (прижимается вверх}.
III. Процедуры settextstyle и settextjustify позволяют устанновить все необходимые параметры для вывода текста. Формат обращения: settextstyle (font,direction,charsize);
settextjustify( horiz, vert);
Пояснения к спискам аргументов и их возможным знанчениям приведены выше.
IV. Функции texthight и textwidth возвращают максимальнную высоту и длину строки в точках.
Формат обращения: texthight(TeKCT), textwidth (текст)
V. Процедура setusercharsize позволяет для выбранного шрифта изменять ширину или высоту символов.
Формат обращения: setusercharsize(tx1 ,ty1 ,tx2,ty2); где tx1,ty1,tx2,ty2 Ч выражения типа word, причем на отношение tx1/tx2 будет умножена стандартная ширинна, а на отношение ty1/ty2 Ч стандартная высота. Чтобы получить буквы текста в два раза шире, следует задать: setusercharsize(2,1,1,1 );outtextxy(300,170,'ЛИМА');
3.11.8. Модуль crt
Приведенные ниже процедуры и функции, расширяющие возможности текстового режима экрана, находятся в станндартном модуле crt.tpu и будут доступны в программе понсле объявления uses crt.
I. Функция без параметров keypressed возвращает true, если на клавиатуре была нажата любая символьная клавиша, и false Ч в противном случае. Не задерживанет выполнение программы.
II. Функция без параметров readkey возвращает символ нажатой клавиши без эха повтора на экране. Приостаннавливает выполнение программы до нажатия на люнбую клавишу.
III. Функции без параметров wherex, wherey возвращают горизонтальную или вертикальную координату текущей позиции курсора относительно текущего окна.
IV. Процедура без параметров cireol удаляет все символы от текущей позиции курсора до конца строки без пенремещения курсора.
V. Процедура без параметров delline удаляет строку, на которой находится курсор, и перемещает все стронки ниже этой строки на строку вверх. Нижняя строка очищается.
VI. Процедура без параметров clrscr очищает экран и понмещает курсор в верхний левый угол.
VII. Процедура delay приостанавливает работу программы на указанное число миллисекунд (t): delay(t);
VIII. Процедура gotoxy перемещает курсор в точку с заданнными координатами х,у текстового экрана или окна, если оно задано: gotoxy(x,y);
IX. Процедура без параметров insline вставляет пустую строку в позицию курсора.
X. Процедуры без параметров highvideo, lowvideo, norm-video устанавливают высокую, низкую, нормальную ярнкость символов.
XI. Процедура sound включает звуковой генератор с часнтотой hz, заданной в герцах: sound(hz);
XII. Процедура без параметров nosound выключает звуконвой генератор. Обязательная последовательность действий для вклюнчения звука: ...sound(...);delay(...); nosound;...
XIII. Процедуры textcolor, textbackground устанавливают цвет символов и цвет фона в текстовом режиме:
textcolor(цвет); textbackground(цвет);
Допустимые значения для цвета приведены в пункте 3.11.5(1).
XIV. Процедура window определяет текстовое окно на экнране:
window(x1,y1,x2,y2); где х1 ,у1 ,х2,у2 Ч координаты левого верхнего угла и правого нижнего угла экрана 0< = х< = 80,0< = у< = 25.
Пример 1
В случайных точках экрана появляется по десять окружнонстей, закрашенных случайным цветом сначала радиуса 30, потом 40 и 50 точек. Затем по очищенному экрану переменщается огненный шар из верхнего левого в нижний правый угол экрана.
program P11а;
uses graph,crt;
var x,y,r,c,dr,mo,i,b: integer;
uk: ^integer;
begin
randomize;
dr:= detect;
initgraph(dr,mo,'c:\tp7\bgi');
r:=30;
while r< = 50 do
begin
cleardevice;
for i:=1 to 10 do
begin
x: = random(getmaxx- 2*r) + r; y:= random(getmaxy- 2*r) + r;
c:=random(getmaxcolor) + 1; setcolor(c); setfillstyle(8,c);
circle(x,y,r); floodfill(x,y,c); delay(SOO);
end;
delay(IOOO); inc(r,10)
end;
cleardevice;
setbkcolor(BLUE); {заглавные буквы Ч для вашего вниманния!}
setcolor(YELLOW); setfillstyle(1,RED);
circle(r,r,r); floodfill(r,r,YELLOW);
b:=imagesize(0,0,2*r,2*r); getmem(uk,b);
getimage(0,0,2*r,2*r, ukA);
cleardevice;
x:=0; y:=0;
while(x< = getmaxx-2*r) and (y< = getmaxy-2*r) do
begin
putimage(x,y,uk^,0); delay(500); putimage(x,y,uk^,1);
inc(x,10); inc(y,10);
end;
closegraph;
end.
Пример 2
Построение графика функции у=1/(х2-х+1) для 1<=х< = 3 (а< = х< = Ь) не более чем в п< = 40 точках текстового экрана. От левого края отступаем на m позиций, ось х направлена сверху вниз (если точек много, то можно выполнять задержку экрана либо выводить график во внешний файл), ось у направлена слева направо; на значения функции от минимума до максимума отводится w позиций (m + w<80 позиций). Переменная k определяет положение оси х относительно отступа m, a L Ч положение *, для значения функции.
program P11Ь;
uses crt;
const m = 10; w = 61 ;
var y: array[1..41] of real;
c: string[71];
i,k,L,n: integer;
a,b,x,h,ymax,ymin,my: real;
begin
clrscr;
readln(a,b,n); ymax:=-maxint; ymin:=maxint; h:=(b-a)/n;
x: = a;
for i:=1 to n do
begin
y[i]:=1/(x*x-x+1);
if y[i]>ymax then ymax:=y[i];
if y[i]<ymin then ymin:=y[i]; x:=x + h;
end;
my:=(ymax-ymin)/(w- 1); {масштаб по оси у}
k:=round(abs(ymin)/my) + m; {положение оси х}
writeln(СГрафик функции':35);
writeln(' .................................................... ЦxТ:71
for i:=1 to m + w do
c[i]:=' '; {строка из 71 пробела}
c[k]:=T;
for i:=1 to n do
begin
if(i-1) mod 20 = 0 then begin
writeln('После анализа нажми клавишу ENTER');
readln
end;
L:=round((y[i]-ymin)/my) + m;
c[L]:='*'; writeln(c);
c[L]:=' '; {пробел убирает * в позиции L}
if k = L then c[k]:=T;
end;
c[k]:='V; writeln(c);
c[k]:='Y'; writeln(c);
end.
Пример 3
Для построения графика в графическом режиме используется весь экран за исключением отступов в 20 точек слева и снизу. Ось х идет слева направо, а ось у Ч снизу вверх.
program P11с;
uses graph, crt;
var y: array[1..101] of real;
i,k,L,n,mx,dr,mo: integer;
a,b,x,h,ymax,ymin,my: real;
xs: string[5];
begin
clrscr;
readln(a,b,n);
ymax:=-maxint; ymin:=maxint; h:=(b-a)/n;
x:=a;
for i:=1 to n do
begin
if y[i]>ymax then ymax:=y[i];
if y[i]<ymin then ymin:=y[i];
x: = x + h;
end;
dr:= detect; initgraph(dr,mo, 'c:\tp7\bgi');
mx:=round((getmaxx-50)/n); {масштаб по оси х}
my:=(ymax-ymin)/(getmaxy-20); {масштаб по оси у}
k:=round(abs(ymin)/my); {положение оси х}
line(20,20,20,getmaxy-20);
outtextxy(18,20,Т^Т); outtextxy(10,10,'Y');
line(20,getmaxy - 20 - k.getmaxx- 20,getmaxy - 20 - k);
outtextxy(getmaxx-20,getmaxy-22-k,'>');
outtextxy(getmaxx - 20,getmaxy - 1 5- k, 'X' );
outtextxy(getmaxx Ц 100,getmaxy- 1 0, 'Y=xA2 - x + 1 '); x:= a;
for i:= 1 to n do
begin
str(x.xs); L:= round((y[i]-ymin)/my);
if (i-1) mod 5 =0 then outtextxy((i-1)*mx+20,getmaxy-15-k,xs);
outtextxy((i-1)*mx+20,getmaxy-20-L,'*'); x:=x + h
end;
repeat until keypressed;
closegraph
end.
Пример 4
На экране организованы два окна: одно для ввода, другое для вывода данных. program P11d; uses crt;
var a,b,c: integer;
begin
textbackground(white); textcolor(black); clrscr;
window(1,20,30,25); textbackground(green); clrscr; read(a,b,c);
window(1,1,30,15); textbackground(blue); clrscr;
writeln(a:5, b:5,c:5);
end.