Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6_10__лабы.doc
Скачиваний:
3
Добавлен:
06.09.2019
Размер:
133.63 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

(ГОУВПО «ВГТУ»)

Кафедра конструирования и производства радиоаппаратуры

ОТЧЕТ

О выполнении лабораторных работ №6-11 курса информатики

Выполнил: студент гр. РК-081

Вырыпаев М.О.

Проверил: Хорошилов В.Н.

Воронеж 2009

1 Лабораторная работа №6

Организация графического интерфейса и построение графиков в языке Pascal с помощью модуля Graph

Цель: Научиться организовывать графический интерфейс и строить графики в языке Pascal помощью модуля Graph.

1.1 Домашнее задание

Модуль Graph представляет собой мощную библиотеку графических подпрограмм универсального назначения, расчитанную на работу с наиболее распространёнными графическими адаптерами IBM – совместимых ПК. Подпрограммы модуля Graph обеспечивают различные режимы работы многорежимных адаптеров, полностью используют их цветовые возможности и разрешающую способность.

При исполнении графических программ требуется автономный драйвер графического адаптера (BGI – файл). Если программа использует штриховые шрифты, то кроме того нужен один или несколько шрифтовых файлов (CHR – файлов). При необходимости драйвер и шрифты могут быть включены в тело программы ещё на этапе компиляции.

Во время выполнения программы процедура InitGraph автоматически распознаёт графический адаптер, установленный на ПК, загружает и инициализирует соответствующий графический драйвер, переводит адаптер в графический режим и возвращает управление вызывающей программе. Процедура CloseGraph выгружает драйвер из памяти и восстанавливает текстовый режим работы адаптера.

Подпрограммы модуля Graph позволяют адресоваться к любому элементу (пикселю) растрового графического экрана и управлять светимостью этого элемента. Для указания пикселя используется следующая система координат: верхний левый угол графического экрана имеет координаты 0,0; горизонтальная координата X увеличивается слева направо, вертикальная координата Y увеличивается сверху вниз.

Некоторые графические подпрограммы используют понятие текущего указателя. Указатель содержит координаты того пикселя, начиная с которого будет строиться изображение подпрограммами LineTO, LineRel, OutText и др. В этом смысле указатель подобен текстовому курсору, но, в отличии от него, не имеет видимого изображения на экране.

Для вывода текстовых сообщений на графический экран модуль Graph предоставляет один матричный и 4 штриховых шрифтов. Каждый символ матричного шрифта на экране реализуется в виде матрицы из 8х8 пикселей. Штриховые шрифты для каждого символа определяют набор штрихов (векторов), с помощью которых на экране создаётся (вычерчивается) соответствующий символ. Штриховые шрифты позволяют изменять размеры текстовых надписей в широких пределах без существенного ухудшения качества изображения символов. Однако стандартные штриховые шрифты не содержат символы кириллицы.

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

Процедура SetViewPort создаёт на экране графическое окно. Если окно определенно, весь дальнейший графический вывод осуществляется относительно координат этого окна и отсекает его границами.

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

Лабораторные задания.

1. Построить графический интерфейс с помощью модуля граф, который бы состоял из 2-х пунктов меню (Выполнить, Выход). При нажатии на клавиш вверх и вниз (коды клавиш #72 и #80 соответственно) должен происходить поочередный выбор одного из пунктов меню (Выполнить, Выход). При нажатии клавиши Esc (код клавиши #27) должен происходить выход из программы. При нажатии клавиши Enter (код клавиши #13) если активно меню «Выход», то должен произойти выход из программы, если активно меню «Выполнить», цвет этого меню должен поменяться от 1 до 15 c небольшой задержкой.

Построить в координатных осях график функции (sin (x/2))² с шагом 0.1 и в промежутке от (-2;2).

Program Grafik;

uses crt, graph;

const x0=320;

y0=240;

Dx=1.55;

Dy=1;

delDx=50;

delDy=50;

var

y,x:real;

ky,kx:real;

GD, GM:integer;

ch: char;

TekDeystvie,i,X1,Y1: integer;

s:String;

BEGIN

GD:=Detect;

initGraph(GD,GM,' ');

TekDeystvie:=1;

setColor(Red);

OutTextXY(40,40,'vipolnite');

setColor(Blue);

OutTextXY(560,440,'vixod');

repeat

ch:=ReadKey;

case ch of

#13:Begin

case TekDeystvie of

1:begin

setColor(7);

line (320,16,320,450);

line (80,240,560,240);

line (315,25,320,15);

line (x0,15,325,25);

line (550,235,560,240);

line (560,240,550,245);

For i:=-2 to 2 Do

Begin

line (x0+i*delDx,y0-5,x0+i*delDx,y0+5);

str(i,s);

OutTextXY(x0+i*delDx+3,y0+15,s);

line (x0-5,y0+i*delDy,x0+5,y0+i*delDy);

str(-i,s);

OutTextXY(x0+15,y0+i*delDy+3,s);

End;

Setcolor(Green);

x:=-6.2;

y:=sin(x/2)*sin(x/2);

ky:=delDy/Dy;

kx:=delDx/Dx;

X1:=x0+trunc(x*kx);

Y1:=Y0-trunc(y*ky);

Moveto(X1,Y1);

Setcolor(Green);

Repeat

x:=x+0.1;

y:=sin(x/2)*sin(x/2);

ky:=delDy/Dy;

kx:=delDx/Dx;

X1:=x0+trunc(x*kx);

Y1:=Y0-trunc(y*ky);

LineTo (X1,Y1);

Until x>6.2;

end;

2:begin

ch:=#27;

end;

end;

end;

#80:begin

case TekDeystvie of

1:begin

TekDeystvie:= TekDeystvie+1;

setColor(15);

OutTextXY(40,40,'vipolnite');

setColor(7);

OutTextXY(560,440,'vixod');

end;

2:begin

TekDeystvie:=1;

setColor(7);

OutTextXY(40,40,'vipolnite');

setColor(Red);

OutTextXY(560,440,'vixod');

end;

end;

end;

#72:begin

case TekDeystvie of

1:begin

TekDeystvie:= TekDeystvie+1;

setColor(7);

OutTextXY(40,40,'vipolnite');

setColor(7);

OutTextXY(560,440,'vixod');

end;

2:begin

TekDeystvie:=1;

setColor(7);

OutTextXY(40,40,'vipolnite');

setColor(15);

OutTextXY(560,440,'vixod');

end;

end;

End;

end;

Until ch=#27;

CloseGraph;

END.

2. Реализовать в предыдущем задании возможность изменения масштаба.

Program Grafik;

uses crt, graph;

const x0=320;

y0=240;

Dx=1.55;

Dy=1;

delDx=50;

delDy=50;

var

y,x:real;

ky,kx:real;

GD, GM:integer;

ch: char;

TekDeystvie,X1,Y1,i,rk: integer;

s:String;

BEGIN

write('vvedite znachenie rk 1 ili 3, esli rk=1 to mashtab=0.5'); readln (rk);

GD:=Detect;

initGraph(GD,GM,' ');

TekDeystvie:=rk;

setColor(Red);

OutTextXY(40,40,'vipolnite');

setColor(Blue);

OutTextXY(560,440,'vixod');

setColor(Blue);

OutTextXY(500,400,'mashtab 0.5');

repeat

ch:=ReadKey;

case ch of

#13:Begin

case TekDeystvie of

3:begin

setColor(7);

line (320,16,320,450);

line (80,240,560,240);

line (315,25,320,15);

line (x0,15,325,25);

line (550,235,560,240);

line (560,240,550,245);

For i:=-5 to 5 Do

Begin

line (x0+i*delDx ,y0-5,x0+i*delDx ,y0+5);

str(i,s);

OutTextXY(x0+i*delDx +3,y0+15,s);

line (x0-5,y0+i*delDy ,x0+5,y0+i*delDy );

str(-i,s);

OutTextXY(x0+15,y0+i*delDy +3,s);

End;

Setcolor(Green);

x:=-6.2;

y:=sin(x/2)*sin(x/2);

ky:=delDy/Dy;

kx:=delDx/Dx;

X1:=x0+trunc(x*kx);

Y1:=Y0-trunc(y*ky);

Moveto(X1,Y1);

Setcolor(Green);

Repeat

x:=x+0.1;

y:=sin(x/2)*sin(x/2);

ky:=delDy/Dy;

kx:=delDx/Dx;

X1:=x0+trunc(x*kx);

Y1:=Y0-trunc(y*ky);

LineTo (X1,Y1);

Until x>6.2;

end;

1:begin

setColor(7);

line (320,16,320,450);

line (80,240,560,240);

line (315,25,320,15);

line (x0,15,325,25);

line (550,235,560,240);

line (560,240,550,245);

For i:=-10 to 10 Do

Begin

line (x0+i*delDx div 2 ,y0-5,x0+i*delDx div 2,y0+5);

str(i,s);

OutTextXY(x0+i*delDx +3,y0+15,s);

line (x0-5,y0+i*delDy div 2,x0+5,y0+i*delDy div 2);

str(-i,s);

OutTextXY(x0+15,y0+i*delDy+3,s);

End;

Setcolor(Green);

x:=-6.2;

y:=sin(x/2)*sin(x/2);

ky:=delDy/Dy;

kx:=delDx/Dx;

X1:=x0+trunc(x*kx);

Y1:=Y0-trunc(y*ky);

Moveto(X1,Y1);

Setcolor(Green);

Repeat

x:=x+0.1;

y:=sin(x/2)*sin(x/2);

ky:=delDy/Dy;

kx:=delDx/Dx;

X1:=x0+trunc(x*kx);

Y1:=Y0-trunc(y*ky);

LineTo (X1,Y1);

Until x>6.2;

end;

2:begin

ch:=#27;

end;

end;

end;

#80:begin

case TekDeystvie of

1:begin

TekDeystvie:= TekDeystvie+1;

setColor(15);

OutTextXY(40,40,'vipolnite');

setColor(7);

OutTextXY(560,440,'vixod');

setColor(7);

OutTextXY(500,400,'mashtab 0.5');

end;

2:begin

TekDeystvie:=1;

setColor(7);

OutTextXY(40,40,'vipolnite');

setColor(Red);

OutTextXY(560,440,'vixod');

setColor(11);

OutTextXY(500,400,'mashtab 0.5');

end;

end;

end;

#72:begin

case TekDeystvie of

1:begin

TekDeystvie:= TekDeystvie+1;

setColor(7);

OutTextXY(40,40,'vipolnite');

setColor(7);

OutTextXY(560,440,'vixod');

setColor(7);

OutTextXY(500,400,'mashtab 0.5');

end;

2:begin

TekDeystvie:=1;

setColor(7);

OutTextXY(40,40,'vipolnite');

setColor(15);

OutTextXY(560,440,'vixod');

setColor(12);

OutTextXY(500,400,'mashtab 0.5');

end;

end;

End;

end;

Until ch=#27;

CloseGraph;

END.

Вывод: Научились организовывать графический интерфейс и строить графики в языке Pascal помощью модуля Graph.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]