Автор работы: Пользователь скрыл имя, 09 Ноября 2013 в 12:54, курсовая работа
В качестве написания программного обеспечения используется среда программирования Visual Studio 2012 с использованием стандартных компонентов. Для создания программных продуктов используется принцип структурно-модульного программирования. Задание курсовой работы состоит реферата по двум теоретическим вопросам с номерами 8 и 28, а также создания четырех программ, которые решают поставленные задачи с номерами 8, 28, 48 и 68.
Язык Си не связан с какими-либо определенными аппаратными средствами или системами, и на нем легко писать программы, которые можно пропускать без изменений на любой ЭВМ, имеющей Си-компилятор.
Календарний план 2
Реферат 3
Введение 5
Теоретическое задание № 1 6
Теоретическое задание № 2 25
Описание решения для задания 1 35
Описание решения для задания 2 36
Описание решения для задания 3 38
Описание решения для задания 4 39
Вывод 41
Список использованной литературы: 42
Приложения 43
Приложение № 1 (код программы 1) 43
Приложение № 2 (код программы 2) 45
Приложение № 3 (код программы 3) 46
Приложение № 4 (код программы 4) 46
При смешивании в выражении указателей разных типов явное преобразование типов требуется для всех указателей, кроме void*. Указатель может неявно преобразовываться в значение тина booд (например, в выражении условного оператора), при этом ненулевой указатель преобразуется в true, а нулевой в false.
Присваивание без явного приведения типов допускается в двух случаях:
Таким образом, неявное преобразование выполняется только к типу void*. Значение 0 неявно преобразуется к указателю на любой тип. Присваивание указателей на объекты указателям на функции (и наоборот) недопустимо. Запрещено и присваивать значения указателям-константам, впрочем, как и константам любого типа (присваивать значения указателям на константу и переменным, на которые ссылается указатель-константа, допускается).
Арифметические операции с указателями (сложение с константой, вычитание, инкремент и декремент) автоматически учитывают размер типа величин, адресуемых указателями. Эти операции применимы только к указателям одного типа и имеют смысл в основном при работе со структурами данных, последовательно размещенными в памяти, например, с массивами.
Инкремент перемещает указатель к следующему элементу массива, декремент — к предыдущему. Фактически значение указателя изменяется на величину sizeof (тип). Если указатель на определенный тип увеличивается или уменьшается на константу, его значение изменяется на величину этой константы, умноженную на размер объекта данного типа, например:
short * р = new short [5];
p++; // значение р увеличивается
на 2
long * q = new long [5];
q++; // значение q увеличивается
на 4
Разность двух указателей — это разность их значений, деленная на размер типа в байтах (в применении к массивам разность указателей, например, на третий и шестой элементы равна 3). Суммирование двух указателей не допускается.
При записи выражений с указателями следует обращать внимание на приоритеты операций. В качестве примера рассмотрим последовательность действий, заданную в операторе
*р++ = 10;
Операции разадресации и инкремента имеют одинаковый приоритет и выполняются справа налево, но, поскольку инкремент постфиксный, он выполняется после выполнения операции присваивания. Таким образом, сначала по адресу, записанному в указателе р, будет записано значение 10, а затем указатель будет увеличен на количество байт, соответствующее его типу. То же самое можно записать подробнее:
*р = 10; p++;
Выражение (*р)++. напротив, инкрементирует значение, на которое ссылается указатель.
Унарная операция получения адреса
& применима к величинам, имеющим
имя и размещенным в
Классы хранения данных.
Класс представляет
собой главное инструментальное
средство C++ для объектно-ориентированного
программирования. Как вы узнаете
из данного урока, класс очень
похож на структуру, в которой
сгруппированы элементы, соответствующие
данным о некотором объекте, и
оперирующие этими данными
• Для определения класса программа должна указать имя класса, элементы данных класса и функции класса (методы).
• Определение класса обеспечивает шаблон, с помощью которого ваши программы могут создать объекты типа этого класса, подобно тому, как программы создают переменные типа int, char и т. д.
• Программа присваивает значения элементам данных класса, используя оператор точку.
• Программа вызывает функцию-элемент класса, используя оператор точку.
Класс памяти определяет порядок размещения объекта в памяти. Различают автоматический и статический классы памяти. C++ располагает четырьмя спецификаторами класса памяти:
auto
register
static
extern
по два для обозначения принадлежности к автоматическому и статическому классам памяти.
В свою очередь, статический класс памяти может быть локальным (внутренним) или глобальным (внешним).
Следующая таблица иллюстрирует иерархию классов памяти.
Динамический класс памяти |
Статический класс памяти | ||
Автоматический |
Регистровый |
Локальный |
Глобальный |
auto |
register |
static |
Extern |
Спецификаторы позволяют определить класс памяти определяемого объекта:
Выбор класса памяти, помимо явных спецификаторов, зависит от размещения определения или объявления в тексте программы. Модуль, функция, блок могут включать соответствующие операторы объявления или определения, причём всякий раз определяемый объект будет размещаться в строго определённых областях памяти.
Библиотечные функции
Библиотечные средства низкоуровневого программирования для поддержания механизмов работы графикой и мультимедиа.
1. Анализ графического модуля “graphics.h”
Как было уже сказано, данный модуль используется для работы с графикой под ОС MS-DOS. Функции, используемые в нём, для работы с графикой, да и как и сама графика, довольно примитивны. Итак, начнём.
Для инициализации модуля
требуется подключить, так называемый,
заголовочный файл (#include <graphics.h>). В
этом файле описаны все функции,
которые требуются для
1.1 Анализ функции модуля
initgraph( &grdriver, &grmode, “path”); – функция инициализации графического режима, где &grdriver, &grmode, “path” – параметры загружаемого режима;
grdriver и grmode – переменные типа integer;
“path” – путь к загружаемому драйверу графического режима.
Функция закрытия графического режима: closegraph(); – данная функция без каких либо параметров и закрывает текущий графический режим.
Функция определения графического драйвера и видео режима: detectgraph( &grdriver, &grmode);
Функция, возвращающая структуру определения палитры: getdefaultpalette(); – возвращает указатель на заданную по умолчанию структуру палитры для текущего драйвера инициализированного по initgraph.
getdrivername(); – функция возвращает
имя текущего графического
getgraphmode(); – функция возвращает текущий графический режим.
getmoderange( grdriver, &low, &high); – функция возвращает диапазон режимов для данного графического драйвера, где grdriver, low, high – переменные типа integer.
graphdefaults(); – сбрасывает текущие настройки в настройки по умолчанию.
_graphgetmem(); – функция выделения
памяти. Эту функцию вызывают
подпрограммы в графической
_graphfreemem(); – функция освобождения памяти. Используется в сочетании с _graphgetmem().
setgraphbufsize(); – функция изменяет
внутренний размер
graphresult(); – возвращает
код ошибки для последней
installuserdriver( int *name, int huge( *detect)); – функция устанавливает драйвер определённый программистом. *name – название нового драйвера, *detect – указатель на дополнительную функцию авто определения, которая может сопровождать новый драйвер. Эта функция (авто определения) не берёт ни каких параметров и возвращает целочисленное значение.
registerbgidriver( *grdriver) – Функция сообщает графической системе, что драйвер устройства, на который указывает *grdriver был включён во время “линковки”.
registerbgifont( *font) – Функция информирует графическую систему, что шрифт, на который указывает *font был включен во время “линковки”.
restorecrtmode() – Функция восстанавливает
режим, существовавший до
arc( int x, int y, int stangle, int endangle, int radius); – Функция рисует дугу, по заданным координатам x, y, начальным и конечным углом stangle, endangle и заданным радиусом radius.
bar( int left, int top, int right, int bottom); – Функция рисует прямоугольник начиная от левого верхнего угла с координатами left, top до правого нижнего угла с координатами right, bottom.
bar3d( int left, int top, int right, int bottom, int depth); – Функция рисует “трёхмерный прямоугольник” или, так сказать, подобие параллелепипеда, начиная от верхнего левого угла, до правого нижнего угла и с указанием глубины depth.
circle( int x, int y, int radius); – Функция рисует окружность с центром в точке с координатами ( x, y) и радиусом radius.
cleardevice(); – Функция очищает
экран в графическом режиме
и возвращает текущую позицию
указателя в точку с
clearviewport(); – Функция стирает
область просмотра и
drawpoly( int numpoints, int *polypoints); – Функция рисует полигон с количеством вершин numpoints и координатами вершин *polypoints. *polypoints является одномерным массивом.
ellipse( int x, int y, int stangle, int endangle, int xradius, int yradius); – Функция рисует эллипс с координатами в точке ( x, y), начальным и конечным углами stangle, endangle, и радиусами xradius, yradius по осям x и y.
fillpoly( int numpoints, int *polypoints); – Функция рисует и закрашивает заданным цветом полигон.
fillelipse( int x, int y, int xradius, int yradius); – Функция рисует закрашенный эллипс.
floodfill( int x, int y, int border); – Область, ограниченная цветной границей закрашивается установленным образцом и цветом.
getarccoords( &arcinfo); – Функция возвращает координаты последней точки, на которую был переведён указатель, где параметр &arcinfo объявлен как struct arccoordstype arcinfo.
getaspectratio( &xasp, &yasp); – Получает значения коэффициента сжатия в &xasp, &yasp, где xasp, yasp являются переменными типа integer.
getbkcolor() – Возвращает значение типа integer текущего цвета фона.
getcolor() – Возвращает значение типа integer установленного на данный момент цвета.
getdefaultpalette() – ( дополнение) Возвращает структуру определения палитры в переменную объявленную как struct palettetype far *<имя_переменной>=(void *) 0;.
getfillpattern( char far *pattern); – Копирует определённый пользователем заполненный образец в память.
getfillsetting( &fillinfo); – Получает информацию о текущих настройках стиля и цвета, где параметр &fillinfo объявлен как struct fillsettingstype fillinfo.
getimage( int left, int top, int right, int bottom, void far *bitmap); – Сохраняет картинку в специально отведённой области памяти, где left, top, right, bottom координаты картинки, а *bitmap указатель на область памяти.
getlinesettings( &lineinfo); – Получает текущий тип линии, образец и толщину, где параметр &lineinfo объявлен как struct linesettingstype lineinfo.
getmaxcolor(); – Возвращает значение типа integer, которое соответствует номеру цвета.
getmaxmode(); – Возвращает
значение типа integer, которое соответствует
максимальному номеру
getmaxx(); – Возвращает значение
типа integer, которое соответствует
максимальному количеству
getmaxy(); – Возвращает значение
типа integer, которое соответствует
максимальному количеству
getmodename( int mode_number); – Возвращает значение типа integer, которое соответствует указанному графическому режиму.
getpalette( &palette); – Получает информацию о текущей палитре, где параметр &palette объявлен как struct palettetype palette.
getpalettesize(); – Функция возвращает значение типа integer, соответствующее количеству цветов палитры для текущего графического режима.
getpixel( int x, int y); – Функция возвращает номер цвета точки, находящейся по координатам ( x, y).
gettextsettings( &textinfo); – Функция возвращает текущие настройки фонта для текущего графического режима, где параметр &textinfo определён как struct textsettingstype textinfo.
getviewsettings( &viewinfo); – Получает информацию о текущей области просмотра, где параметр &viewinfo определяется как struct viewporttype viewinfo.
getx(); – Функция типа integer
возвращает текущую позицию
gety(); – Функция типа integer
возвращает текущую позицию
grapherrormsg( int errorcode); – Возвращает код ошибки в виде переменной errorcode типа intger.
imagesize( int left, int top, int right, int bottom); – Определяет размер области памяти, необходимый для сохранения двоичного образа.
installuserfont( char far *name); – Функция типа intger возвращает номер идентификатора шрифта, который можно передать функции settextstyle для выбора данного шрифта. Параметр *name это путь к файлу шрифта. Одновременно данной функцией можно подключить до двадцати шрифтов.
line( int x0, int y0, int x1, int y1); – Функция рисует линию от точки с координатами x0, y0 до точки с координатами x1, y1. Не обновляет текущую позицию.
linerel( int dx, int dy); – Функция рисует линию от текущей позиции до точки, находящейся на относительном расстоянии от текущей позиции, затем передвигает текущую позицию.