русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Вспомогательные средства


Дата добавления: 2013-12-23; просмотров: 776; Нарушение авторских прав


Необходимо упомянуть еще две темы: объявления typedef и перечисляемые типы enum. При правильном использовании оба средства, typedef и enurn, упрощают текст программы.

Использование typedef

При помощи typedef вы можете связать новые типы данных с существующими. К примеру, в математической программе может возникнуть необходимость в использовании типов данных fixed, whole, real или complex.

Пример: создание двух новых типов

#include <stdio.h>

typedef int whole;

typedef float real;

int main (void)

{

whole wvalue=123;

real rvalue=5.6789;

/* Целое число */

printf("The whole number is %d.\n",wvaiue);

/* Вещественное число */

printf ("The real number is %f. \n", rvalue);

return (0) ;

}

Объявление typedef можно использовать для упрощения объявлений.

Пример:

struct stboat {

char sztype [iSTRING15 + iNULL_CHAR];

char szmodel[iSTRING15 + iNULL_CHAR];

char sztitle[iSTRING20 + iNULL_CHAR];

int iyear;

long int lmotor_hours;

float fsaleprice;

} stused_boat;

typedef struct {

char sztype [iSTRING15 + iNULL_CHAR];

char szmodel[iSTRING15 + iNULL_CHAR];

char sztitie[iSTRING20 + iNULL__CHAR];

int iyear;

long int lmotor_hours;

float fsaleprice;

} STBOAT;

Имеют место три главных отличия:

1. Исчезло необязательное поле тега. (Хотя поле тега вместе с typedef

можно использовать по-прежнему; просто оно избыточно.)

2. Поле тега stboat превратилось в новый тип STBOAT и располагается там, где традиционно описывалась структурная переменная.

3.Объявление переменной stused_boat теперь отсутствует.

Достоинство описаний typedef — в способе их использования. После приведенного описания по всей программе можно описывать переменные типа STBOAT при помощи более простой синтаксической конструкции:

STBOAT STused_boat;




Введение в графику borland C++

 

Второй режим, который может устанавливаться на экране IBM-совместимого компьютера, графический режим. Управление экраном в графическом режиме производится с помощью набора функций, прототипы которых находятся в заголовочном файле GRAPHICS.H. Там же объявлены константы и макросы. Файл GRAPHICS.H должен быть подключен с помощью директивы include препроцессора языка С ко всем модулям, использующим графические подпрограммы.

Все графические функции оперируют окнами. В терминологии Borland C++ окно называется viewport. Левый верхний угол окна имеет координаты (0, 0). По умолчанию графическое окно занимает весь экран.

Прежде чем использовать графические функции, необходимо установить видеоадаптер в графический режим. Для установки (инициализации) видеоадаптера служит функция initgraph(). Ее прототип -

void far initgraph(int far *driver, int far *mode, char far *path);

В состав графического пакета входят заголовочный файл GRAPHICS.H, библиотечный файл GRAPHICS.LIB, драйверы графических устройств (*.BGI) и символьные шрифты (*.CHR).

Функция initgraph() считывает в память соответствующий драйвер, устанавливает видеорежим, соответствующий аргументу mode, и определяет маршрут к директории, в которой находится соответствующий драйвер *-BGI. Если маршрут не указан, то предполагается, что этот файл расположен в текущей директории.

Заголовочный файл определяет макросы, соответствующие драйверам.

При использовании initgraph() можно указать или конкретный драйвер, или задать автоматическое определение (детектирование) типа видеоадаптера и выбора соответствующего драйвера уже во время выполнения программы (макрос DETECT). Это позволяет переносить без изменения программы на компьютеры с другими видеоадаптерами.

Чтобы выйти из графического режима и вернуться в текстовый режим, необходимо использовать функции

void far closegraph(void);

и

void far restorecrtmode(void);

Функция closegraph() используется, если программа дальше будет работать в текстовом режиме. Эта функция освобождает память, используемую графическими функциями, и устанавливает текстовый режим, который был до вызова функции initgraph(). Если программа завершает работу, то можно использовать функцию restorecrtmode(), которая устанавливает видеоадаптер в текстовый режим, который предшествовал первому вызову функции initgraph().

Установка цвета фона производится функцией

void far setbkcolor(int color);

а изменение палитры - функцией

void far setpalette(int index, int color);

причем эта функция неприменима для видеоадаптера CGA за исключением цвета фона, который всегда имеет index, равный нулю.

Графический экран представляет собой массив пикселей. Каждый пиксель соответствует одной точке на экране и может иметь свой цвет. Установить цвет пикселя в точке экрана с координатами (х, у) можно с помощью функции

void far putplxel(int x, int у, int color);

Основными "рисующими" функциями являются line() и circle(). Их прототипы -

void far line(int x, int у, int x1, int y1);

void far circle(int x, int y, int radius);

Функция line() чертит на экране прямую линию от точки с координатами (х, у) до точки с координатами (x1, y1) текущим цветом.

Функция circle() рисует на экране окружность с центром в точке с координатами (х, у) и радиусом radius (единица измерения - пиксель) также текущим цветом. По умолчанию текущий цвет устанавливается WHITE. Изменить текущий цвет, т. е. цвет, которым рисуются линии, можно обратившись к функции setcolor() с прототипом

void far setcolor(int color);

К другим "рисующим" функциям относятся:

агс() рисует дугу окружности;
drawpoly() рисует контур многоугольника;
ellipse() рисует эллипс;

linerel() рисует линию из текущей точки в точку,

задаваемую, относительным расстоянием;

lineto() рисует линию из текущей точки в точку с

координатами (х, у);
moveto() перемещает текущую точку в точку с координатами

(x, y);

rectangle() рисует прямоугольник;

setaspectratio() изменяет коэффициент сжатия, установленный по

умолчанию;

setlinestyle() устанавливает ширину и стиль линии.

 

В качестве примера описания прототипа приведем прототип функции rectangle()

void far rectangle(int left.int top, int right, int bottom);

Для закрашивания (заполнения) замкнутого контура служит функция floodfill(), которая закрашивает область заданным цветом по заданному шаблону. Ее прототип -

void far floodfill(int x,int y, int bordecolor);

где х и у - координаты точки внутри контура,

bordecolor - цвет контура.

Цвет и шаблон заполнения устанавливаются функцией:

void far setfillstyle(int pattern,int color);

 

Есть также набор функций, которые чертят контур и закрашивают область внутри контура:

bar() -заполненный прямоугольник.

bar3d() - заполненный столбик.

fillelipse() - заполненный эллипс.

filJpoly() - заполненный многоугольник.

pieslice() - заполненный сектор круга.

sector() - заполненный эллиптический сектор.

setullpattern() - задает шаблон, определяемый пользователем;

getfillpatern() - возвращает тип шаблона заполнения;

getfulsetting() - возвращает информацию о шаблоне и цвете

заполнения;

getlmesetting() - возвращает информацию о текущем стиле, толщине и

цвете линии;

getpixel() - сообщает о цвете пикселя в точке (х, у).

Создать графическое окно можно, используя функцию setviewport(). Ее прототип -

void far setviewport(int left, int top, int right, int bottom, int flag);

параметры left, top, right и bottom задают местоположение и размер окна в абсолютных координатах, т. е. координатах экрана. Параметр flag устанавливает режим выхода за границу окна. Если flag не нулевой, то происходит автоматическое прерывание выдачи при выходе за границу окна. В случае, когда flag равен нулю, может происходить вывод за границами окна. И в том и в другом случае ошибка не фиксируется.

Для работы с экраном, окнами и образами (image) служат следующие функции:

cleardevice() - очищает активную страницу;

setactivepage() - устанавливает номер активной страницы;

setvisualpage() - устанавливает номер видимой страницы;

cleanviewport() - очищает активное окно:

getviewsetting() - возвращает информацию об активном окне;

getimage() - записывает образ в заданный участок памяти:

imagesize() - определяет в байтах размер памяти, требуемый для

хранения

- информации о прямоугольной области экрана;
putimage() - помещает на экране ранее записанный в память

образ.

Функция cleardevice() очищает весь экран, устанавливает текущей точкой левый верхний угол экрана, но оставляет неизменными все установки графического экрана: стиль линии, текущий цвет и т. д.

Функция cleanviewportO очищает текущее окно и устанавливает текущую точку в левый верхний угол окна.

В зависимости от типа видеоадаптера и установленного видеорежима система может иметь от одной до четырех буферных страниц. Каждая из страниц может быть указана как активная, в которую происходит вывод, и визуальная (видимая), которая отображается на экране. Если они совпадают, то каждый вывод будет тут же отображаться на экране. По умолчанию активная и визуальная страницы совпадают.

Для создания движения образа по заданному шаблону на экране служат функции getimage(), imagesize() и putimage(); с помощью функции getimage() взять часть экранного образа, вызвать imagesize() для определения размера памяти, необходимой для хранения этого образа, а затем вернуть его на экран в любую желаемую позицию с помощью функции putimage().

Для осуществления вывода текста в графическом режиме на экран используются функции

outtext() - выводит строку на экран с текущей позиции;
outtextxy() - выводит строку на экран с заданной позиции;

settextjustify() - устанавливает режим выравнивания текста;

setusercharsize() - устанавливает шрифт, стиль и коэффициент увеличения

текста;

textheight() - возвращает высоту строки в пикселях;

textwith() - возвращает ширину строки в пикселях.

 

Во время работы программы могут возникать ошибки при выполнении графических операций. Например, указан недопустимый тип видеоадаптера. Для обработки ошибок, чтобы избежать аварийного прекращения работы программы, служат функции

graphresult() - возвращает код ошибки выполнения для последней

графической операции;

grapherrormsg() - возвращает строку с сообщением об ошибке, по заданному

коду ошибка.

Если ошибка произошла при вызове графической библиотечной функции (например, не задан шрифт, запрошенный функцией settextstyle()) устанавливается внутренний код ошибки. Функция graphresult() возвратит код ошибки, а вызов функции grapherrormsg(graphresult()) выдаст сообщение об ошибке. Приведем фрагмент программы, использующей рекомендуемый способ инициализации графического режима:

void main ( )

{/* Запрос автоопределения максимально возможного режима работы видеоадаптера*/

int driver = DETECT, gmode, errorcode; /* инициализация графики */ initgraph(&graphdriver,&gmode,””);

/* получение результата инициализации */

errorcode = graphresult();

if (errorcode != grOk) /* если произошла ошибка */

{

printf("Ошибкаa:%s\n",grapherrormsg(errorcode));

printf (“ Для останова нажмите любую клавишу. \n");

getch();

exit(1); /* завершение работы программы */

}//end if

} // end main

Пример:

#include <stdio.h>

#include <conio.h>

#include <graphics.h>

main(void)

{ int driver, mode,errorcode;

register int i;

driver=DETECT;

initgraph(&driver,&mode,"");

errorcode = graphresult();

if(errorcode != grOK) /* если произошла ошибка */

{ printf(“Ошибка:%s\n",grapherrormsg(errorcode));

printf("Для останова нажмите любую клавишу. \n);

getch();

exit(1); /* завершение работы программы */

}

rectangle(0,0,639,349);

setcolor(RED);

line(0,0,639,349);

line(0,349,639,0);

setfillstyle(5,GREEN);

bar(50,50,300,300);

setviewport( 100,100,200,200,1);

getch();

clearviewport();

for(i=3;i<83;i+=3)

circle(50,50,i);

getch();

restorecrtmode();

return 0;

}

Пример построения графика функции R = sin (Сj); в псевдополярных координатах х = R sin (Аj), у = R cos(Bj);

Здесь А, В, С - целочисленные значения.

В случае А = В =1 мы получим график в полярных координатах. Выбирая различные значения А, В, и С мы будем получать различные "замечательные картинки".

/* График в псевдополярных координатах */

#include<iostream.h>

#include<math.h>

#include<stdlib.h>

#include<conio.h>

#include<graphics.h>

#define PI 3.141593

void main(void)

{ int A,B,C,M;

double step=0.01;

int x, y, r;

M=100; /* Масштабирующий множитель*/

printf(" Введите целые числа: \nА = ");

scanf("%d",&A);

printf("B = “);

scanf("%d",&B);

printf("C = ");

scanf("%d",&C);

int gd=DETECT,gm; /* Инициализация графика */

initgraph(&gd,&gm,"");

setbkcolor(BLUE);

cleardevice();

setcolor(YELLOW);

setlinestyle(SOLID_LINE,0,NORM_WIDTH);

/* Построение графика */

moveto(320,160);

for (double fi=0;fi<2*PI;fi+=step)

{ r=M*sin(C*fi);

x=320+r*sin(A*fi);

y=160+r*cos(B*fi);

lineto(x,y);

}

getch(); closegraph();

}

 

Пример: Окружности. Работа с палитрами.

#include<graphics.h>

#include<conio.h>

#include<stdio.h>

#include<dos.h>

void main(void)

{

int gd=DETECT,gm;

initgraph(&gd,&gm,"d:\\BC31\\BGI");

struct palettetxpe save,palette;

getpalette(&save);

getpalette(&palette);

for (int i=0;i<10;i++)

{

setfillstyle(SOLID_FILL,6+i);

setcolor(6+i);

fillellipse(getmaxx()/2,getmaxy()/2,(10-i)*10,(10-i)*lO);

}

while(!kbhit()) {

int temp=palette.colors[6];for(int i=7;i<16;i++)

// Shift palette

palette.colors[i-1]=palette.colors[i];

palette.colors[15]=temp;

setallpalette(&palette);

delay(100);

}

getch();

closegraph();

}




<== предыдущая лекция | следующая лекция ==>
Синтаксис и правила | Побайтная запись в файл и функция fputco


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.625 сек.