Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_OT-1.doc
Скачиваний:
14
Добавлен:
17.03.2016
Размер:
1.15 Mб
Скачать

3.1. Який синтаксис функцій у мові “сі”.

3.2. Для чого слугує ключове слово return.

3.3. Які функції називаються рекурсивними.

3.4. Як передавати у основну програму аргументи із командного рядка.

3.5. Яким чином можна змінити змінні основної програми, використовуючи функції.

Комп’ютерний практикум № 17 графічний режим екрану на мові “ci”

Мета практикуму – вивчення методів роботи у графічному режимі екрана та побудова графіків функцій на мові “СІ”.

  1. ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ

1.1 Стандартні функції мови “СІ” для роботи у графічному режимі знаходяться у бібліотечному файлі graphics.h, який необхідно під’єднати на початку програми за допомогою директиви #include

#include <graphics.h>

Для переходу до графічного режиму екрана необхідно спочатку виконати його ініціалізацію за допомогою функції initgraph, яка має наступний формат:

Initgraph(int *driver, int *mode, char *path);

Аргумент driver визначає тип графіного драйвера. В більшості випадків доцільно застососовути його автоматичне визначення, задавши як константу detect (0).

Використовуваний графічними функціями відеорежим (роздільна здатність та кількість кольорів) задається у вигляді числа, на яке вказує параметр mode. У лабораторній роботі рекомендується приймати mode=0. Path визначає шлях до відеодрайвера (до каталога bgi).

Для виходу з графічного режиму використовують функції closegraph() або restorecrtmode().

Розглянемо деякі графічні функції.

arc(int x, int y, int start, int end, int radius) будує дугу кола навколо центру в точці (x,y) радіусом radius від кута start до кута end, які задаються в градусах.

bar(int left, int top, int right, int bottom) - рисує прямокутник на основі координат верхньої лівої (left,top) та нижньої правої (right,bottom) вершин прямокутника без контурної лінії, і заповнює поточним кольором зразка заповнення.

rectangle (int left, int top, int right, in bottom) - рисує прямокутник.

bar3d(int left, int top, int right, int bottom, int depth, int topflag) - рисує паралелепіпед, який обводиться по контуру поточним кольором. Перші чотири параметри такі ж як і для функції bar. Параметр depth визначає товщину паралелепіпеда. Параметр topflag – наявність верхньої грані (1) або її відсутність (0).

circle(int x, int y, int radius) - рисує коло з центром в точці (x,y) радіусом radius.

cleardevice() - очищає екран і встановлює курсор в точку (0,0).

clearviewport() - очищує поточну область перегляду і встановлює курсор в точку (0,0) області).

drawpoly(int numpoints, int *points) - рисує багатокутник з кількістю вершин, рівною numpoints. *points – масив координат вершин.

fillpoly(int numpoints, int *points) - рисує багатокутник і зарисовує його поточним кольором заповнення зразка.

line(int x1, int y1, int x2, int y2) - з’єднує точки (x1,y1), (x2,y2) відрізком.

lineto(int x, int y) - рисує відрізок від поточної точки до точки (x,y).

linerel(int deltax, int deltay) - рисує відрізок від поточної точки до точки, зміщеної по х на deltax і по y на deltay.

moveto(int x, int y) - робить поточною точку (x,y).

outtext(char *str) - виводить на екран текстовий рядок.

outtextxy(int x, int y, char *str) - виводить на екран текстовий рядок str, координати початку рядка (x,y).

getbkcolor() - повертає поточний колір фону.

getcolor()- повертає поточний колір рисування.

getmaxcolor() - повертає найбільше допустиме значення кольору для поточного відеорежиму.

getmaxx() - повертає максимально-можливе значення x.

getmaxy() - повертає максимально-можливе значення y.

getx() - повертає поточне значення x.

gety() - повертає поточне значення y.

ellipse(int x, int y, int start, int end, int xr, int yr)- рисує сектор еліпса з центром у точці (x,y), з радіусами по осях xr, yr. Сектор визначається кутами start та end в градусах.

fillellipse(int x, int y, int xr, int yr) - рисує повний еліпс з використанням поточного кольору рисування і зарисовує еліпс поточним кольором зразку заповнення.

floodfill(int x, int y, int border) - заповнює замкнений об’єкт поточним кольором і зразком заповнення. (x,y)- координати точки всередині об’єкта. Параметр border задає колір границі.

putpixel(int x, int y, int color) - рисує точку (x,y) кольором color.

setbkcolor(int color) - змінює колір фону на колір color.

setcolor(int color) - встановлює поточний колір рисування. Колір задається цілими числами 0, 1, 2, 3, ...,15 або відповідними константами:

BLACK=0

BLUE=1

GREEN=2

CYAN=3

RED=4

MAGENTA=5

BROWN=6

LIGHTGRAY=7

DARKGRAY=8

LIGHTBLUE=9

LIGHTGREEN=10

LIGHTCYAN=11

LIGHTRED=12

LIGHTMAGENTA=13

YELLOW=14

WHITE=15

setfillstyle(int pattern, int color) - встановлює стиль pattern і колір color заливки. Параметр pattern може приймати значення від 0 до 12 (0- кольором фону, 1- суцільна, 2- лініями, 3- тонкими побічними діагоналями, 4- побічними діагоналями, 5- головними діагоналями, ...).

setlinestyle(int style, unsigned pattern, int width) - задає стиль і товщину лінії.

Можливі варіанти параметру style: SOLID_LINE – неперервна лінія, DOTTED_LINE – точкова лінія, CENTER_LINE – штрих-пунктирна лінія, DASHED_LINE – пунктирна лінія, USERBIT_LINE – лінія, яка визначається користувачем (pattern). Можливі варіанти width (товщина): NORM_WIDTH – товщина 1 піксель, THICK_WIDTH – товщина 3 пікселя. Параметр pattern враховується тільки при стилі USERBIT_LINE, та являє собою двобайтне число, записане у шістнадцятковій формі. Воно визначає послідовність заштрихованих (1) та не заштрихованих (0) ділянок прямої. Наприклад, для отримання суцільної лінії параметр pattern=0xFFFF, штрих-пунктирної – 0x00FF;

settextstyle(int font, int direction, int size) - задає стиль і розмір тексту. Параметр font визначає тип шрифту (від 0 до 10), direction – напрямок виводу тексту зліва направо (0 або HORIZ_DIR) або знизу вверх (1 або VERT_DIR), size – множник, на який збільшується шрифт (від 0 до 10).

setviewport(int left, int top, int right, int bottom, int clip) - встановлює поточну область перегляду. Верхня ліва вершина області - (left,top), нижня права – (right,bottom). Якщо clip=1, то та частина, яка виходить за межі області, автоматично відсікається.

Приклад 1. Вивести на екран графік функції y=10sin(x)-0.2x2cos(x)+5x+7 на проміжку від -10 до 10.

#include <stdio.h>

#include <graphics.h>

#include <conio.h>

#include <math.h>

#include <float.h>

#include <stdlib.h>

void koordsystem();

/*Оголошення функції виводу системи координат*/

int graphik(float x,float xmax,float y,float ymax,int color);

/*Оголошення функції виводу точки на екран; (x,y)- координата поточної точки; xmax- максимально-можливе значення x;ymax- максимально-можливе значення y; color- колір*/

void main(void)

{int driver, mode;

float y,x;

driver=DETECT;

mode=0;

initgraph(&driver,&mode,"c:\\borlandc\\bgi");

/*Ініціалізація графічного режиму*/

setbkcolor(WHITE);

/*Встановлення кольору фону*/

koordsystem();

/*Виведення системи координат*/

x=-10;

while(x<10)

/*Організація циклу розрахунків та виведення точок графіку на екран*/

{y=10*sin(x)*x-0.2*x*x*cos(x)+5*x+7;

graphik(x,10,y,200,CYAN);

/*Виведення точки на екран*/

x=x+0.0001;}

getch();

/*Організація зависання екрану*/

restorecrtmode();

/*Відновлення текстового режиму екрану*/

}

void koordsystem()

{setcolor(RED);

line(10,getmaxy()/2,getmaxx()-10,getmaxy()/2);

line(getmaxx()/2,10,getmaxx()/2,getmaxy()-10);

/*Рисування координатних осей*/

outtextxy(getmaxx()/2+10,10,"y");

outtextxy(getmaxx()-20,getmaxy()/2+10,"x");

outtextxy(getmaxx()/2-10,getmaxy()/2+10,"0");

/*Виведення маркувань осей*/

}

int graphik(float x,float xmax,float y,float ymax,int color)

{float d,f;

d=x*(getmaxx()/2-10)/xmax;

f=y*(getmaxy()/2-10)/ymax;

putpixel(int(d+getmaxx()/2),int(-f+getmaxy()/2),color);

/*Функція int перед змінною типу float перетворює її в тип int*/

return 0;

}

1.2 Для побудови рухомих зображень зручно використовувати функції getimage() та putimage(). Функція getimage() має наступний формат:

getimage(x1,y1,x2,y2,вказівник_на_зображення);

Вона зберігає частину зображення, обмежену координатами x1,y1,x2,y2 (верхнього лівого та нижнього правого кутів), в область пам’яті, на яку вказує вказівник_на_зображення. Так як розмір зображення, а тому і необхідний об’єм памяті, заздалегідь не відомий, потрібно використовувати вказівник невизначеного типу void:

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