- •Int main() /* головна обов’язкова функція, де ключове слово int означає, що функція main() повертатиме у точку виклику результат цілого типу*/ 6
- •Засоби розробки с програм
- •Директиви препроцесора.
- •Using namespace std; // вказуємо, що будемо працювати з іменами із стандартної бібліотеки
- •Запитання
- •Тема 2. Данні
- •Команда присвоєння. Правила узгодження типів.
- •Запитання
- •Тема 3. Операції та вирази
- •Тема 4. Потоки. Введення - виведення даних
- •Форматування даних
- •Введення-виведенні засобами бібліотеки сstdіo
- •Тема 5. Адреси даних. Вказівники. Динамічна пам’ять
- •Тема 6. Файли
- •Тема 7. Розгалуження
- •Логічні вирази та логічні операції.
- •Команда ?
- •Тема 8. Цикли
- •Команда циклу з післяумовою do-while має вигляд
- •Тема 9. Функції (1)
- •Тема 10. Функції (2)
- •Тема 11. Масиви
- •Тема 12. Рядки
- •Тема 13. Структури, списки, стеки, черги, об’єднання
- •Тема 14. Виняткові ситуації
- •Http://www.Rate1.Com.Ua/strannosti/2633/ Самі фатальні помилки в програмному забезпеченні
- •Помилки під час виконання (виняткові ситуації, виключення) Exceptions - це помилки, що виникають у випадку, коли програма намагається виконати неприпустиму операцію.
- •Тема 15. Графіка
- •Написание простых графических программ
- •Http://www.Rsdn.Ru/article/opengl/ogltut2.Xml Графическая библиотека OpenGl
Тема 15. Графіка
Графічний режим. Розглянемо, як виконувати графічні побудови у середовищах C++ для операційної системи DOS, зокрема, у середовищі компілятора Turbo C++ 3.0.
http://kaf401.rloc.ru/Informatics/localdevcpp.html
Написание простых графических программ
Для того, чтобы подключить модуль для работы с графикой, сделайте следуюшее:
Скачайте архив, содержащий файлы graphics.h (заголовочный файл) и libbgi.a (библиотека). Размер архива 53 Кб.
Скопируйте файл graphics.h в папку C:\Dev-Cpp\include.
(C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include і при установке дева это указать или подключить editor options\code completion)
C:\Program Files
(x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib32
Скопируйте файл libbgi.h в папку C:\Dev-Cpp\lib.
Запустите оболочку Dev-C++ и войдите в меню Сервис-Параметры компилятора.
Перейдите на вкладку Компилятор, включите флажок Добавить эти команды к командной строке компоновщика и добавьте в окно под этим флажком строчку
-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32
как на рисунке:
После выполнения этих действий вы можете использовать команды для рисования графических примитивов (отрезков, прямоугольников, окружностей и т.д.), так же, как раньше в Turbo C и Borland C++. Полное описание команд (на английском языке) можно найти на странице Михаэля Майна.
Вот так выглядит простейшая программа, которая выводит на экран отрезок из точки (0,0) (это левый верхний угол окна) в точку (50,50) и ждет нажатия на любую клавишу:
#include <graphics.h>
int main()
{
initwindow(400,300); // открыть окно для графики
// размером 400 на 300 пикселей
moveto(0,0); // курсор в точку (0,0)
lineto(50,50); // отрезок в точку (50,50)
getch(); // ждать нажатия на любую клавишу
closegraph(); // закрыть окно с графикой
return 0;
}
|
В программах, которые не работают с графикой, флажок Добавить эти команды к командной строке компоновщика нужно отключать, иначе при завершении программы будет появляться сообщение об ошибке. |
Http://www.Rsdn.Ru/article/opengl/ogltut2.Xml Графическая библиотека OpenGl
http://valera.asf.ru/cpp/scpp/cppd_graphics.h.htm
С Windows в отличии от DOS и так работает в графическом режиме. Для работы с графикой используйте специальные библиотеки OpenGL DirectX etc...
Графічний екран дисплея складається з точок, які можна посвічувати певним кольором чи гасити, у результаті чого на екрані утворюється деяке зображення. Точки називаються пікселями. Кількість точок на екрані може бути різною. Це належить від характеристик і налаштування монітора. Розглянемо екран, який має 640 точок у горизонтальному (х) напрямку і 480 у вертикальному (у). Відлік точок ведуть з лівого верхнього кута екрана. Кожна точка характеризується двома координатами (х, у). Приклади розташування деяких точок на екрані показані на рис. 2.
Визначити кількість точок уздовж осей 0Х та 0Y можна відповідно за допомогою команд getmaxx ( ) і getmaxy ( ).
Програми, що виконують графічні побудови, переважно є лінійними і складаються з викликів стандартних графічних функцій, які описані у бібліотечному файлі graphics.h.
Рис. 2. Координати точок на графічному екрані 640x480
Для того, щоб створити зображення, спочатку треба задати графічний режим. Це виконують так:
// Для опису характеристик дисплея
int gdriver = DETECT, gmode, errorcode;
// Задания графічного режиму
initgraph(&gdriver, &gmode, errorcode = graphresult();
if (errorcode != grOk)
{
cout << " графічний режим задати не вдалося\n";
cout << "Помилка:" << grapherrormsg(errorcode);
cout << "\n Для виходу натисніть на будь-яку клавішу";
getch();
exit(1);
}
Функції для графічних побудов. Розглянемо функції бібліотеки graphics.h, які використовуються як команди.
іпіІдгарГі(<драйвер>, <режим>, <шлях до драйвера») - задає графічний режим. Шлях до драйвера зазначають у лапках; detectgгaph(<дpaйвep>, <режим>) - повертає значення характеристик дисплея;
зе1соіог(<колір>) - задає колір майбутнього зображення;
8еІЬксоІог(<колір>) - задає колір тла;
рігіріхеі(х, у, <колір>) - висвітлює точку (х,у) заданим кольором;
Ііпе(х1, у1, х2, у2) - рисує лінію між двома точками;
ІіпеК)(х, у) - рисує лінію від поточної точки до точки (х, у);
ІіпегеІ^х, йу) - рисує лінію від поточної точки із заданими приростами;
Ьаг(х1, у1, х2, у2) - рисує зафарбований прямокутник;
ЬагЗй(х1, уі, х2, у2, <об'ємна глибина>, n) - рисує паралелепіпед; гесіапдіе(х1, у1, х2, у2) - рисує прямокутник із заданими координатами діагонально протилежних вершин (лівої верхньої та правої нижньої);
8еМе\лфоП(х1, уі, х2, у2, n) - задає координати нового графічного вікна. Цілочисельна змінна n задає режим відсікання зображення, яке виходитиме за межі вікна; сігсІе(х, у, И) - рисує коло з радіусом (Ч і центром у точці (х, у); агс(х, у, «початковий кут>, <кінцевий кут>, <радіус>) - рисує дугу; ріевІісе(х, у, «початковий кут>, «кінцевий кут>, <радіус>) - рисує зафарбований сектор; еІІірве(х, у, «початковий кут>, «кінцевий кут>, «горизонт, радіуо, «вертик. радіус>) - рисує еліпс чи дугу еліпса; 5еІГіІІзІуІе(«заповнення>, <колір>) - задає спосіб заповнення замкнутої області залежно від значення параметра заповнення: 0 -
заповнення кольором фону, 1 - суцільне заповнення, 2 - заповнення товстими горизонтальними лініями, 3 - заповнення нахиленими
лініями 10 - заповнення точками,11- щільне заповнення
точками;
НоосШІІ (х, у, «колір межі>) - заповнює замкнену область, що містить точку
(х.у);
сІоєедгарИО - закриває графічний режим; оийех1(«текст>) - виводить заданий текст із поточної позиції; оиНехІху(х, у, <текст>) - виводить текст у заданому місці; 5ейехІ8Іуіе(«шрифт>, <напрям>, «розмір») - задає вигляд символів, напрямок виведення: 0 - горизонтально чи 1 - вертикально, а також розміри символів 1,2,3
Розглянемо деякі функції, які використовуються у виразах.
graphresult() |
- повертає код помилки, якщо неможливо задати графічний |
|
режим; 0-у разі задання; |
getmaxx() |
- повертає значення розміру екрана вздовж осі 0Х; |
getmaxy() |
- повертає значення розміру екрана вздовж осі 0У; |
getcoior() |
- повертає значення поточного кольору; |
getxQ, getyO |
- повертають координати поточного пікселя |
К
DARKGRAY = 8 - темно-сірий;
LIGHTBLUE = 9 - яскраво-синій LIGHTGREEN = 10 - яскраво-зелений; LIGHTCYAN = 11- яскраво-блакитний; LIGHTRED = 12 - яскраво-червоний; LIGHTMAGENTA = 13 - яскраво-фіолетовий; YELLOW = 14-жовтий;
WHITE = 15-білий.
ольори. Кольори задають числами або англійськими назвами:
BLACK = 0 - чорний;
BLUE = 1 - синій;
GREEN = 2 - зелений;
CYAN = 3 - блакитний;
RED = 4 - червоний;
MAGENTA = 5 - фіолетовий;
BROW = 6 - коричневий;
LIGHTGRAY = 7 - світло-сірий;
Задача 1 (про концентричні кола). Нарисувати різними кольорами десять концентричних кіл, які мають спільний центр посередині екрана (в точці з графічними координатами (320; 240)), і описати навколо кіл червоний прямокутник.
«include <stdlib.h> // Кола
«include <iostream.h>
«include <conio.h>
«include «graphics.h> int main()
{
int gdriver = DETECT, gmode, errorcode; intx, y, radius = 10;
initgraph{&gdriver, &gmode,""); errorcode = graphresultQ; if (errorcode != grOk)
{
cout « "Помилка:" « grapherrormsg(errorcode); cout « "\n Натисніть на будь-яку клавішу"; getch(); exit(1);
}
x = getmaxx() /2; у = getmaxy() / 2; while (radius <= 100)
{
setcolor(radius / 10); circle(x, y, radius); radius +=11;
}
setcolor(RED);
rectangle(220,140, 420, 340);
getch();
closegraph();
return
0;
Задача 2 (про емблему). Нарисувати емблему. У верхній лівій частині графічного екрана на чорному фоні нарисувати блакитний квадрат, а в ньому - чорне коло, зафарбоване жовтим кольором. У центрі емблеми чорними літерами написати слово “Львів”.
«include <stdlib.h> «include <iostream.h> «include <conio.h> «include «graphics.h> int main()
{
int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, “"); errorcode = graphresult(); if (errorcode != grOk)
{
cout« "Помилка:" « grapherrormsg(errorcode); cout « "\n Натисніть на будь-яку клавішу";
// Емблема
getch();
exit(1);
}
setbkcolor(O);
setcolor(3);
rectangle(100, 0, 300, 200);
setfillstyle(1, 3);
floodfill(200, 100, 3);
setcolor(14);
circle(200, 100, 100);
setfillstyle(1, 14);
floodfill(200, 100, 14);
setcolor(O);
circle(200, 100, 100);
settextstyle(0, 0, 3);
outtextxy(140, 95, "Львів");
getch();
closegraph();
return 0;
}
Задача 3 (про графік функції). Нарисувати графік функції у = 2sin2x + 1 на проміжку [0; 2л], табулюючи функцію з кроком h = 0,1. У результаті експериментів, змінюючи значення амплітуди в пікселях (за допомогою множника М), нобразити графік на екрані якнайкраще.
«include <stdlib.h> // roacpix
«include <iostream.h>
«include <math.h>
«include <conio.h>
«include <graphics.h> float f(float x); void mainQ
const float a = 0, b = 2 * 3.14, h = 0.1; const int hi = 5, xO = 60, yO = 240, M = 50; int gdrivar = DETECT, gmode, errorcode; int x1, y1; float x, y;
initgraph(&gdriver, &gmode,""); errorcode = graphresult(); if (errorcode != grOk)
{
cout« "Помилка " « grapherrormsg(errorcode); cout« "\n Натисніть на будь-яку клавішу"; getch(); exit(1);
)
setbkcolor(l); setcolor(14); line(20, yO, 600, yO);
Iine(x0, 440, xO, 20); x = a;
x1 = xO + M * x;
y = f(x);
y1 = yO - M * y; moveto(x1, y1); setcolor(15); do
I
{,
У т f(x): y1 = yO - (M * y); lineto(x1, y1); x1 += hi; x=x+h;
)
while (x <= b); settextstylef 0, 0, 1); outtextxy(60, 245, ”0"); outtextxy(360, 245, "6.3"); settextstyle( 0, 0, 2);
outtextxy(100, 380, "Графік функції y=2sin2x+1"); getch(); closegraph();
}
float f(float x)
{
float func;
func = 2 * sin (2 * x) + 1; return func;
}
Імітація руху об’єкта на екрані. Для імітації руху зоб раження об’єкта на екрані необхідно виконати такий алго ритм:
Нарисувати об’єкт у заданфй точці.
Витерти об’єкт, зарисувавши його кольором тла.
Змінити координати об’єкта.
Перейти до пункту 1.
Задача 4 (про динамічний ефект). Зобразити на чорному тлі екрана рух зеленого кола вверх-вниз.
«include <stdlib.h> //Ефект руху
«include <iostream.h>
«include <conio.h>
«include «graphics.h>
«include <dos.h> void main()
{
int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, "*); errorcode = graphresultQ; if (errorcode != grOk)
{
cout « "Помилка" « grapherrormsg(errorcode); cout « “\n Натисніть на будь-яку клавішу"; getch(); exit(1);
}
setbkcolor(BLACK); setcolor(GREEN); int у = 60, sy = 4, r = 50; int x = getmaxx() / 2; do
{
circle (x, y, r); delay(30); setcolor(BLACK); circle (x, y, r); setcolor(GREEN);
У += sy;
if (y < 60 II у > getmaxyO - 60) sy = -sy;
}
while(!kbhit()); // Доки не натиснута будь-яка клавіша getch(); closegraphQ;
}
Функція delay(n), яка описана у бібліотеціі dos.h, призначена для затримки на екрані результатів виконання програми на n мікросекунд.
Функції kbhit() повертає значення хибність (або 0), якщо натиснута будь-яка клавіша на клавіатурі, або істина (дові ньне ціле число) у протилежному випадку. Вона описана у Гіібліотеці conio.h.
Вправи
Намалюйте в центрі екрана правильну чотирикутну піраміду.
Зобразіть рух сонця на блакитному небі.
Розв’яжіть задачі № 21, 22, 23 вашого варіанта з розділу "Задачі".
http://habrahabr.ru/post/172091/
90 рекомендаций по стилю написания программ на C++
