- •«Утверждаю»
- •Учебно-методический комплекс
- •Астана 2010 График выполнения и сдачи заданий по дисциплине
- •Карта учебно-методической обеспеченности дисциплины Учебники, учебные пособия
- •Конспект лекционных занятий
- •Тема 1. Введение в программирование на Си. Структура программы. Директивы препроцессора. Типы данных.
- •Основные операции в языке Си.
- •Преобразование типов
- •Тема 2. Управляющие структуры. Выбор вариантов. Структура выбора If, If – Else, логические операции, операция условия, множественный выбор.
- •Тема 3. Управляющие структуры. Структуры повторения While, do – While, For. Управляющие операторы break и continue.
- •Тема 4. Массивы. Разработка программ с использованием одномерных и двумерных массивов.
- •Тема 5. Функции в Си. Создание и использование функций.
- •Тема 6. Классы памяти и разработка программ.
- •Тема 7. Указатели в Си.
- •Тема 8. Использование указателей при обработке одномерных и двумерных массивов.
- •Тема 9. Символы и строки в Си.
- •Функции сравнения из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 6.
- •Функции поиска из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 7.
- •Другие функции из библиотеки обработки строк. В таблице 8 приведены прототипы и краткое описание остальных функций из библиотеки обработки строк.
- •Ниже приведены примеры программы, использующих функции работы со троками.
- •Тема 11. Структуры данных в Си.
- •Тема 12. Динамические структуры данных.
- •Тема 13. Работа с файлами в Си.
- •Тема 14. Графика в Си.
- •Тема 15. Объектно-ориентированное программирование.
- •Методические рекомендации по выполнению лабораторных заданий
- •Лабораторная работа № 3. Использование операторов цикла при решении задач.
- •Лабораторная работа №4. Разработка программ с использованием одномерных массивов.
- •Лабораторная работа №5. Разработка программ с использованием двумерных массивов.
- •Лабораторная работа № 6. Программирование задач с использованием нескольких функций на языке Си.
- •Лабораторная работа № 8. Программирование задач обработки структур данных.
- •Лабораторная работа № 9. Разработка программ с использованием файловых переменных.
- •Лабораторная работа № 10. Разработка программ с использованием графических функций языка Си.
- •Содержание отчета по выполнению лабораторной работы
- •1 Задание
- •Тема 1. Запись констант, стандартных функций, выражений, операторов присваивания. Запись программ линейных структур алгоритмов.
- •Тема 2. Алгоритмическое описание, запись программ линейных, разветвляющихся.
- •Тема 3. Алгоритмическое описание, запись программ циклических структур алгоритмов.
- •Тема 4. Алгоритмическое описание, составление программ обработки одномерного массива.
- •Тема 5. Алгоритмическое описание, составление программ обработки двумерного массива.
- •Тема 6-7. Составление программ решения задач с использованием функции.
- •Рекомендуемая литература:
- •Тема 8-9. Составление программ решения задач обработки массивов с использованием указателей.
- •Тема 10-11. Программирование задач обработки символьных и стрковых данных.
- •Рекомендуемая литература.
- •Тема 12. Методы сортировки.
- •Тема 13. Составление программ решения задач с использованием структур данных.
- •Тема 14. Составление программ решения задач с использованием файла произвольного доступа.
- •Рекомендуемая литература.
- •Тема 15. Алгоритмизация графических построений.
- •Варианты заданий:
- •Сведения
- •Перечень экзаменационных вопросов по пройденному курсу
- •Глоссарий
Тема 14. Графика в Си.
Для инициализации графической библиотеки служит функция
void far initgraph (int far drive, int far mode, char far path);
Первый параметр задаст библиотеке тип адаптера, с которым будет вестись работа. В соответствии с этим параметром будет загружен драйвер указанного видеоадаптера и произведена инициализация всей библиотеки. Определен ряд констант, задающих набор стандартных драйверов: CGA, EGA. VGA, DETECT и другие.
Значение DETECT сообщает библиотеке о том, что тип имеющегося видеоадаптера надо определить ей самой и выбрать для него режим наибольшего разрешения.
Второй параметр mode – определяет режим.
Параметр Режим
CGACO. CGAC1, CGAC2, CGAC3 320 на 200 точек на 4 цвета
CGAH1 640 на 200 точек на 2 цвета
EGALO 640 на 200 точек на 16 цветов
EGAH1 640 на 350 точек на 16 цветов
VGALO 640 на 200 точек на 16. цветов
VGAMED 640 на 350 точек на 16 цветов
VGAHI 640 на 480 точек на 16 цветов
Если в качестве первого параметра было взято значение DETECT, то параметр mode не используется.
В качестве третьего параметра выступает имя каталога, где находится драйвер адаптера – файл типа BGI (Borland's Graphics Interface):
CGA.BGI – драйвер адаптера CGA;
EGAVGA.BGI – драйвер адаптеров EGA и VGA;
HERC.BGI – драйвер адаптера Hercules.
Графические примитивы в языках программирования:
Функция graphresult возвращает код завершения предыдущей графической операции int far graphresult ( void );
Успешному выполнению соответствует значение grOk. Для окончания работы с библиотекой необходимо вызвать функцию closegraph:
void far closegraph ( void );
#include <conio.h>
#include <graphics.h>
#include <process.h>
#include <stdio.h>
main () {
int mode; int res; int driver = DETECT;
initgraph ( &driver, &mode, """ );
if ( ( res = graphresult () ) != grOk ) {
printf("\nGraphics error: %s\n", grapherrormsg ( res) );
exit ( 1 );
}
line ( 0, 0, 0, getmaxy () );
line ( 0, getmaxy (), getmaxx (), getmaxy () );
line ( getmiaxx (), getmaxy (), getmaxx (), 0 );
line ( getmaxx (), 0, 0, 0 );
getch ():
closegraph (};
}
Программа переходит в графический режим и рисует по краям экрана прямоугольник. В случае ошибки выдается стандартное диагностическое сообщение. После инициализации библиотеки адаптер переходит в соответствующий режим, экран очищается и на нем устанавливается следующая координатная система. Начальная точка с координатами (0, 0) располагается в левом верхнем углу экрана.
int far getmaxx ( void );
int far getmaxy ( void,):
Узнать, какой именно режим в действительности установлен, можно при помощи функции getgraphmode:
int far getgraphmode ( void );
Для очистки экрана удобно использовать функцию clearviewport:
void far clearviewport ( void );
Работа с отдельными точками. Функция putpixel ставит пиксел заданного цвета Color в точке с координатами (х, у):
void far putpixel ( int х, int у, int Color );
Функция getpixel возвращает цвет пиксела с координатами (х, у):
unsigned far getpixel ( int х, int у );
Рисование линейных объектов. При рисовании линейных объектов основным инструментом является перо, которым эти объекты рисуются. Перо имеет следующие характеристики:
- цвет (по умолчанию белый);
- толщина (по умолчанию 1);
- шаблон (по умолчанию сплошной).
Шаблон служит для рисования пунктирных и штрихпунктирных линий. Для установки параметров пера используются следующие функции выбора.
Процедура setcolor устанавливает цвет пера:
void far setcolor ( int Color );
Функция setlinestyle определяет остальные параметры пера:
void far setlinestyle ( int Style, unsigned Pattern, int Thickness );
Первый параметр задает шаблон линии. Обычно в качестве этого параметра выступает один из предопределенных шаблонов:
SOLID_LINE, DOTTED_LINE, CENTER_LINE, DASHED_LINE, USERBIT_LINE и другие. Значение USERBIT_LINE означает, что шаблон задается (пользователем) вторым параметром. Шаблон определяется 8 битами, где значение бита 1 означает, что в соответствующем месте будет поставлена точка, а значение 0 - что точка ставиться не будет.
Третий параметр задает толщину линии в пикселах. Возможные значения параметра - NORM_WIDTH и THICK_WIDTH (1 и 3).
При помощи пера можно рисовать ряд линейных объектов -прямолинейные отрезки, дуги окружностей и эллипсов, ломаные.
Рисование прямолинейных отрезков Функция line рисует отрезок, соединяющий точки (x1,y1) и (х2, y2):
void far line ( int x1, int y1, int x2, int y2 );
Рисование окружностей. Функция circle рисует окружность радиуса r с центром в точке (х, y):
void far circle ( int х, int у, int г );
Рисование дуг эллипса. Функции arc и ellipse рисуют дуги окружности (с центром в точке (х, y) и радиусом г) и эллипса (с центром (х, у), полуосями rх и rу, параллельными координатным осям), начиная с угла StartAngle и заканчивая углом EndAngle.
Углы задаются в градусах в направлении против часовой стрелки:
void far arc(int x, int y, int StartAngle, int EndAngle, int r);
void far ellipse (int х, int y, int StartAngle, int EndAngle, int rx, int ry);
Закрашивание объектов. С понятием закрашивания тесно связано понятие кисти. Кисть определяется цветом и шаблоном - матрицей 8 на 8 точек (бит), где бит, равный 1, означает, что нужно ставить точку цвета кисти, а 0 - что нужно ставить черную точку (цвета 0).
Для задания кисти используются следующие функции:
void far setfillstyle ( int Pattern, int Color );
void far setfillpattern (cnar far * Pattern, int Color );
Функция setfillstyle служит для задания кисти. Параметр Style определяет шаблон кисти либо как один из стандартных (EMPTY_FILL, SOLID_FILL, LINE_FILL, LTSLASHJ4LL), либо как шаблон, задаваемый пользователем (USER_FILL). Пользовательский шаблон устанавливает процедура setflllpattern первый параметр в которой и задает шаблон - матрицу 8 на 8 бит, собранных по горизонтали в байты. По умолчанию используется сплошная кисть (SOLID_FILL) белого цвета.
Процедура bar закрашивает выбранной кистью прямоугольник с левым верхним углом (х1,у1) и правым нижним углом (х2,y2):
void far bar ( int x1, int y1, int x2, int y2 );
Функция fillellipse закрашивает сектор эллипса:
void far fillellipse (int х, int y, int StartAngle, int EndAngle, int rx, int ry);
Функция floodfill служит для закраски связной области, ограниченной линией цвета BorderColor и содержащей точку (х, у) внутри себя:
void far floodfill ( int х,. int у, int BorderColor );
Функция fillpoly осуществляет закраску многоугольника, заданного массивом значений х- и у-координат:
void far fillpoly ( int numpoints, int far * points );
Дополнительная литература:10доп[54-62],11доп[24-29]
Контрольные вопросы:
1. Какая функция позволяет выполнять обработку ошибок графического режима?
2. Какие значения могут принимать константы цвета для символов и для фона?
3. Какой процедурой выполняется установка типа линий, закраски?
4. Какой вид имеет система координат экрана в графическом режиме?
5. Какая процедура предназначена для инициализации графического режима и какие параметры она имеет?