Лабы / Создание программ построения графиков(лаб1)
.docнаправлением оси абсцисс.
Значение конечного угла восстанавливается до первоначального значения, что-
бы в дальнейшем не произошло ошибки при определении угла в выражении (17) для
выведения надписи.
Если для рисования диаграммы не используется процедура рисования заштрихо-
ванного сектора, то нарисованные сектора в дальнейшем штрихуются специальной
процедурой, что требует указания координат внутренней точки области штрихов-
ки. Удобно в качестве такой точки взять любую точку, лежащую на биссектрисе
сектора, т.е. использовать выражения (17) и (16), но в качестве R взять вели-
чину, меньшую радиуса, чтобы получить точку внутри области, а не на границе.
Пример программы построения круговой диаграммы
Program Diagr; { Построение круговой диаграммы }
Uses Crt,Graph;
const n=12; {размерность массива значений функции }
alfan=0; {нач.угол рисования сектора}
хn=320; {координаты центра диаграммы }
уn=300;
r=150; {радиус диаграммы }
ns=5; {кол-во позиций в записи числа при выводе его на экран }
ms=2; {кол-во в дробной части числа при выводе его на экран }
type m=array[1..n] of integer;
m1=array[1..n] of real;
var
f :m1; {массив значений функций }
alfa:m ; {массив значений углов }
driver,err, k, {кол-во секторов}
i, {параметр цикла }
bet, {центральный угол сектора }
у,х, {координаты центра дуги сектора }
x1.y1:integer; {координаты нач. точки поля вывода надписи }
s:real; {сумма значений функции }
st, {строковая переменная, в которую заносятся выводимые на экран
надписи }
Zagolovok:string; {строковая переменная для вывода на экран заголовка
круговой диаграммы }
{-------------------------------------------------------------------------}
Begin {ввод начальных данных }
Textbaekground(Red);
Clrsor;
Textcolor(Blue);
GotoXY(10,5);
Write(' Заголовок круговой диаграммы > '),
Readln(Zagolovok);
Clrsor;
GotoXY(10,5);
write (' Введите количество значений функции > ');
readln(k);
Clrscr;
GotoXY(10,5);
writeln (' Введите значения функции (положительные) ');
{нахождение суммы значений функции}
s:=0;
for i:=1 to k do
Begin
write(i:2,'значение функции > ');
readln(f[i]);
s:=s+f[i];
end;
driver:=detect;
InitGraph(driver,err,'c:\t_pascal\bgi');
Setbkcolor(LightBlue);
Setcolor(LightGray);
{ вычисление начального и конечного углов }
{ каждого сектора диаграммы }
alfa[1]:=alfan;
alfa[k+1]:=alfan+360;
for i:=2 to k+1 do
begin
Setcolor(LightGreen);
SetFillStyle(1,i);
alfa[i]:=alfa[i-1]+round(f[i-1]/s*360);
if alfa[i]>360 then alfa[i]:=alfa[i]-360;
if alfa(i-1)>360 then alfa[i-1]: =alfa{i-1]-360;
{ рисование сектора для случая }
{ когда конечный угол меньше начального }
if alfa[i]<alfa[i-1] then
begin
Pieslice(xn,yn,alfa[i-1],360,r);
Pieslice(xn,yn,0,alfa[i],r);
Setcolor(LightBlue);
Line(xn,yn,xn+r-1,yn);
Setcolor(LightGreen);
FloodFill(xn+1,yn,LightGreen);
alfa[i]:=alfa[i]+360;
end
{ рисование сектора для случая, }
{ когда конечный угол больше начального }
else Pieslice(xn,yn,alfa[i-1],alfa[i],r);
{ вывод надписей }
SetColor(LightGray);
bet:=alfa[i-1]+(alfa[i]-alfa[i-1]) div 2;
if bet>360 then bet:=bet-360;
x:=xn+round(r>cos(bet<pi/180));
y:=yn-round(r>sin(beti<pi/180));
if ((bet>=0)and(bet<=90))or((bet>=270)and(bet<=360))
then x1:=x+10
else x1:=x-8*ns-1O;
if ((bet>=0)and(bet<=180))
then y1:=y-15
else y1:=y+7;
str(f[i-1]:ns:ms,st);
OutTextXY(x1,y1,st);
end;
Setcolor(LightRed);
Settextstyle(0,Horizdir,2);
Outtextxy(400,480 ,' Нажмите Enter');
Setcolor(LightMagenta);
Settextstyle(0,Horizdir,3);
OuttextXY(100 ,30,Zagolovok);
readin;
CloseGraph;
end.
Приложение 1
Список процедур и функций модуля CRT, используемых в примерах программ.
CLrScr - очищает экран (окно) и помещает курсор в верхний левый угол;
GotoXY(X,Y:byte) - перемещает курсор в нужное место экрана (окна);
TextBackground(Color:byte) - устанавливает цвет фона;
TextColor(Color:byte) - устанавливает цвет символов;
Window(Xl,Yl,X2,Y2:byte) - определяет текстовое окно на экране;
X1,Y1 - координаты левого верхнего угла;
X2,Y2 - правого нижнего угла.
Константы цветов
Const
Black = 0; {ЧЕРНЫЙ}
Blue = 1; {СИНИЙ}
Green = 2; {ЗЕЛЕНЫЙ}
Cyan = 3; {ГОЛУБОЙ}
Red = 4; {КРАСНЫЙ}
Magenta = 5; {ФИОЛЕТОВЫЙ}
Brown = 6; {КОРИЧНЕВЫЙ}
LigntGray = 7; {СВЕТЛОСЕРЫЙ}
DarkGray = 8; {ТЕМНОСЕРЫЙ}
LightBlue = 9; {ЯРКОСИНИЙ}
LightGreen = 10; {ЯРКОЗЕЛЕНЫЙ}
LighfcCyan = 11; {ЯРКОГОЛУБОЙ}
LightRed = 12; {РОЗОВЫЙ}
LightMagenta = 13; {МАЛИНОВЫЙ}
Yellow = 14; {ЖЕЛТЫЙ}
White = 15; {БЕЛЫЙ}
Приложение 2
Список процедур и функций модуля Graph используемых в примерах программ.
CloseGraph - закрывает графический режим
InitGraph (var Driver,Mode:integer;Path; String) - инициализирует графичес-
кий режим. Переменные Driver и Mode должны содержать тип графи-
ческого драйвера и его режим работы. Параметр Path определяет
маршрут поиска файла графического драйвера;
Line (X1,Y1,X2,Y2: integer) - рисует линию от точки XI,Yl до точки X2,Y2;
OutTextXY (X,Y:integer; Text:String) - выводит текст в заданное место экра-
на;
PieSlice (X,Y: integer; StAngle, EndAngle, Radius:Word) - рисует и штрихует
сектор окружности радиусом Radius с центром X,Y от начального угла
StAngle к конечному углу EndAngle;
Rectangle (XI,Yl,X2,Y2:integer) - рисует прямоугольник, используя цвет и
тип линии;
SetBkColor ( Color:word) - устанавливает цвет фона;
SetColor (Color:word) - устанавливает основной цвет, которым будет осущест-
вляться рисование;
SetFillStyle (Pattern, Color:word) - устанавливает образец штриховки и цвет;
SetLineStyle (LineStyle, Pattern, Thickness:word) - устанавливает толщину и
стиль линии;
SetTextStyle (Faut, Direction, CharSize:word) - устанавливает текущий
шрифт, стиль и размер текста.
Константы типов и толщины линий
Const
SolidLn =0; { сплошная }
DottedLn = 1; {точечная }
CenterLn = 2; { штрихпунктирная }
DashedLn = 3; { пунктирная }
UserBitLn = 4; { тип определяется пользователем}
NormWidth = 1; { нормальная толщина }
ThickWidth = 3; { тройная толщина }
Константы управления шрифтом
Const
DefaultFout = 0; { матричный шрифт 8х8 }
HorizDir = 0; { горизонтальное направление }
VertDir = 1; { вертикальное направление }
UserCahrSize = 0; { размер символа, определяем пользователем}
Константы шаблона штриховки
EmtyFill =0; {нет штриховки}
SolidFill =1; {сплошная штриховка}
LineFill =2; {--- штриховка}
LtSlashFUl =3; {/// штриховка}
SlashFill =4; {/// штриховка (толстыми линиями)}
BkSlashFill =5; {то же (толстыми линиями)}
LtBkSlashFill =6; {/// штриховка}
HatchFill =7; {+++ штриховка}
xHatchFill =8; {ххх штриховка}
InterleaveFill=9; {штриховка в клетку}
WideDotFill =10; {штриховка редкими точками}
CloseDotFill =11; {штриховка частыми точками}
UserFill =12; {штриховка задается поьзователем}
Подготовка к лабораторной работе
1. Ознакомиться с описанием лабораторной работы.
2. Для своего варианта написать программу.
3. Проанализировать результаты, которые должны получиться в результате вы-
полнения программы.
Выполнение лабораторной работы
1. Перед началом выполнения лабораторного задания познакомьтесь с работой
небольшого программного комплекса, позволяющего воспроизвести на экране гра-
фик функции, гистограмму и диаграмму. Для этого на диске Е: запустите на вы-
полнение программу IGLR1.EXE
После выбора пункта:
а) "График функции", необходимо задать максимальное и минимальное значение
аргумента. Например, Хmах = -2; Xmin = 3. После этого программа строит график
функции у = sin2x + cosx на интервале [-2;З].
б) "Гистограмма", необходимо задать:
- заголовок гистограмы, например "продажа зерна"
- количество функций, например 4.
- значение функций, например: 10, 20, 30, 40
- наименование под столбцами: январь, февраль, март, апрель.
На основе этих данных программа построит гистограмму
в) "Диаграмма", необходимо задать:
- заголовок круговой диаграммы например, "рост прибыли"
- количество функций, например 5
- значения функций, например: 10, 20, 30, 40, 50
В результате обработки данных на экране появится круговая диаграмма.
После просмотра графической информации нажмите клавишу Enter.
Для выхода из комплекса" необходимо нажать клавишу Esc.
2. Войдите в систему Турбо-Паскаль и введите текст программы для своего ва-
рианта.
3. Отладьте программу.
4. Выполните программу.
5. Результаты занесите в отчет по лабораторной работе и покажите преподава-
телю.
6. Защитите лабораторную работу.
Контрольные вопросы
1. Каковы исходные данные для построения графика функции?
2. Каковы задачи построения графика функции?
3. Как определяются координаты точек графика?
4. Каким образом наносится координатная сетка и надписи на графике?
5. Что собой представляет гистограмма?
6. Каковы исходные данные для построения гистограммы?
7. Как вычисляются координаты вершин прямоугольников?
8. Что собой представляет круговая диаграмма?
9. Каковы исходные данные для построения круговой диаграммы
10. Как определяется начальный угол сектора?
11. Как определяется конечный угод сектора?
12. Каким образом можно получить поясняющую надпись для каждого сектора?
13. Что необходимо учесть для начального угла рисования не равного 0?
Требования к отчету
Отчет должен содержать:
1. название и цель лабораторной работы
2. конспект лабораторной работы
3. задание на лабораторную работу
4. исходный текст программы ( по вариантам )
5. результаты выполнения лабораторной работы
Лабораторное задание
___________________________________________________________________________
! N ! Построить график функции f(x) на интервале !
! варианта ! !
!----------!---------------------------------------------------------------!
! 1 ! |sinX| - |cosX| ; [0;PI] !
!----------!---------------------------------------------------------------!
! 4 ! 2*sinX + 3*cosX ; [-PI;PI] !
!----------!---------------------------------------------------------------!
! 7 ! sinX + cos(2*X); [-PI;PI] !
!----------!---------------------------------------------------------------!
! 10 ! 2 - cosX ; [0;3*PI/2] !
!----------!---------------------------------------------------------------!
! 13 ! sin(2*x) + cosX ;[0;2*PI] !
!----------!---------------------------------------------------------------!
! 16 ! 2*sin(2*X) + 1; [-PI/2;PI/2] !
!----------!---------------------------------------------------------------!
! 19 ! x^2+2 ; [-3;5] !
!----------!---------------------------------------------------------------!
! 22 ! 10/(1+x^2) ; [-3;3] !
!----------!---------------------------------------------------------------!
! 25 ! (X - 3)/(x^+2) [-1;4] !
!----------!---------------------------------------------------------------!
! 28 ! X^2* Е^(-x) [-1;3] !
!----------!---------------------------------------------------------------!
!-------------!-------------------------------------------!----------------!
! с помощью ! Отобразить на экране следующую ! с помощью круг.!
! гистограммы ! информацию ! диаграммы !
!-------------!-------------------------------------------!----------------!
! ! Рост доходов владельцев контрактов ! !
! 2 ! ! 3 !
! ! октябрь - 10000 май - 15000 ! !
! ! апрель - 13500 октябрь - 35000 ! !
!-------------!-------------------------------------------!----------------!
! ! Динамику роста цен на контракт- ! !
! 5 ! ную нефть ! 6 !
! ! июнь - 4000 за 1 т. ! !
! ! октябрь - 9000 январь - 12000 ! !
! ! апрель - 15000 ! !
!-------------!-------------------------------------------!----------------!
! ! Рост зарплаты в промышленности ! !
! 8 ! в отношении к предыдущему году ! 9 !
! ! январь 48.6 апрель 44.7 феврель 48.1 ! !
! ! май 45.5 март 50.1 июнь 51.7 июль 58.4 ! !
!-------------!-------------------------------------------!----------------!
! ! Рост зарплаты в бюджетной сфере ! !
! 11 ! в отношении к предыдущему году ! 12 !
! ! январь 35.2 апрель 27.4 авг.39.8 ! !
! ! февраль 32.7 май 39.7 сент.51.4. ! !
! ! март 27.9 июнь 47.9 июль 44.1 ! !
!-------------!-------------------------------------------!----------------!
! ! Объем продажи изделий ! !
! 17 ! январь 210 апрель 250 ! !
! ! февраль 150 май 183 ! !
! ! март 99 июнь 352 ! !
!-------------!-------------------------------------------!----------------!
! ! Доходы населения в дореволюци- ! !
! 20 ! онной России в % к пред. году ! 21 !
! ! 1901 - 100 1903 - 50 ! !
! ! март - 150 1904 - 300 ! !
!-------------!-------------------------------------------!----------------!
! ! Протяженность границ России с ! !
! 23 ! бывшими республиками СССР. ! 24 !
! ! с Эстонией - 437.5 км ! !
! ! с Латвией - 250 км ! !
! ! с Белорусией - 990 км ! !
! ! с Украиной - 1270.2 км ! !
! ! с Грузией - 250.4 км ! !
! ! с Азербайджаном - 367.2 км ! !
! ! с Казахстаном - 7.200 км ! !
!-------------!-------------------------------------------!----------------!
! ! Рост минимальной зар. платы ! !
! 26 ! 1964 - 50 руб. 1987 - 90 руб. ! 27 !
! ! 1978 - 70 руб. 1991 - 340 руб. ! !
! ! 1992 - 900 руб. ! !
!-------------!-------------------------------------------!----------------!
! ! Количество студентов на факультетах вуза ! !
! 29 ! МП - 250 ЭКТ - 200 МТ - 100 ЭМ - 150 ! 30 !
!-------------!-------------------------------------------!----------------!