- •“Київський політехнічний інститут” обчислювальна техніка та програмування - 1
- •Обчислювальна техніка та програмування - 1
- •Символи кодової таблиці ascii
- •Умовні переходи на мові "паскаль"
- •1: Begin
- •Цикли на мові "паскаль"
- •Підпрограми на мові "паскаль"
- •Function Alfha(a,b:real; c:byte):real;
- •Function Beta:integer;
- •Procedure Sorter (a,b:real; c:byte; Var X,y:real);
- •Procedure Beep;
- •Uses crt;
- •Window (x1,y1,x2,y2);
- •Window (10,5,45,15);
- •Window (1,1,80,25);
- •TextColor (yellow);
- •TextColor (14);
- •Текстові та типізовані файли мови "паскаль"
- •Assign (f1, ’Data.Pas’);
- •Reset (f2);
- •Rewrite (f2);
- •Seek (f2, 7);
- •FileSize (f2),
- •FilePos (f2).
- •Побудова графіків функцій на мові "паскаль"
- •MoveTo (200, 100);
- •SetLineStyle (0,0,1);
- •OutText (’Текст для виводу’);
- •OutTextXy (200,100,’Текст для виводу’);
- •SetTextStyle (0,0,0);
- •SetTextJustify (1,1);
- •PutPixel (150,50,green);
- •ClearDevice;
- •Бібліотечний модуль на мові "паскаль"
- •Interface
- •Implementation
- •Динамічні змінні мови "паскаль"
- •SetFillStyle (1, white);
- •Об’єктно-орієнтоване програмування на мові "паскаль"
- •New (Person, Init);
- •Destructor Done; Virtual;
- •Dispose (Person, Done);
- •Форматований ввід та вивід даних на мові “cі”
- •Printf(“керуючий рядок”,аргумент1,аргумент2, ...);
- •Scanf(“керуючий рядок”,аргумент1,аргумент2,...);
- •Scanf(“%d %f %c %s”,&I,&j,&k,l);
- •Scanf(“%d %*d %d”, &I,&j);
- •Scanf(“%d,%d”,&n,&m);
- •Оператори організації переходів на мові "сі"
- •1.2. Для організації умовного переходу по одному із багатьох варіантів доцільно використовувати оператор switch. Він має наступний формат:
- •Організація циклів на мові "сі"
- •Одновимірні та двовимірні масиви на мові "сі"
- •Char b[30];
- •Char a[10][20];
- •Записи, вкладені записи, масиви записів на мові "сі"
- •Int month;
- •Int year;};
- •Int class, age;};
- •Робота із бінарними та текстовими файлами
- •File *lst;
- •Int fflush (вказівник_на_файл);
- •Int fgetc(вказівник_на_файл);
- •Int fputc(вказівник_на_файл);
- •Int fread (вказівник_на_масив, розмір_об’єкта, кількість_об’єктів , вказівник_на_файл);
- •Int fwrite(вказівник_на_масив, розмір_об’єкта, кількіст_об’єктів , вказівник_на_файл);
- •Int fseek(вказівник_файла, зміщення, поч. Значення);
- •3. Контрольні запитання
- •Робота з функціями на мові “сі”
- •Тип_функції назва_функції(тип1 параметр1, ..., тип_n параметр_n);
- •Int main(int argc, char *argv)
- •3.1. Який синтаксис функцій у мові “сі”.
- •Комп’ютерний практикум № 17 графічний режим екрану на мові “ci”
- •Initgraph(int *driver, int *mode, char *path);
- •Void *pimage;
- •Void *malloc(об'єм_пам’яті_в_байтах);
- •Imagesize(x1,y1,x2,y2);
- •Putimage(x1, y1, вказівник, вид_вставки);
- •Вирішення диференційних рівнянь методом ейлера
- •Основи роботи в середовищі “turbo pascal 7.0” та “turbo c 3.0”
- •Комп’ютерний практикум № 17. Графічний режим екрану
3.1. Який синтаксис функцій у мові “сі”.
3.2. Для чого слугує ключове слово return.
3.3. Які функції називаються рекурсивними.
3.4. Як передавати у основну програму аргументи із командного рядка.
3.5. Яким чином можна змінити змінні основної програми, використовуючи функції.
Комп’ютерний практикум № 17 графічний режим екрану на мові “ci”
Мета практикуму – вивчення методів роботи у графічному режимі екрана та побудова графіків функцій на мові “СІ”.
ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ
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: