графический драйвер, gm - графический режим, path - путь к графическому драйверу. Если драйвер графики egavga.bgi находится в каталоге из которого вы запускали Borland C, то инициализация графики может быть проведена следующей командой:
int gd=0, gm=0;
initgraph(gd,gm,"");
При такой установке включается графический режим, в котором 640 точек (пикселов) по горизонтали и 480 по вертикали. Начало координат (точка 0,0) находится в верхнем левом углу экрана.
Элементарные функции графики:
Установка цвета: setcolor(cvet); cvet - число, определяющее цвет (0 - черный, 1 - синий, 2 - зеленый и т.д.)
Линия: line(xn,yn,xk,yk); xn,yn - координаты начальной точки,
Прямоугольник rectangle(xn,yn,xk,yk); xk,yk - координаты конечной точки,
Окружность circle(xn,yn,R) R - радиус окружности,
Текст outtextxy(xn,yn,TEXT) TEXT - строка текста (вывод в позицию c с координатами xn,yn),
Текст outtext(TEXT) (вывод в текущую позицию)
Установка цвета для bar setfillstyle(fon,cvet) fon - число определяющее заполнение фигуры,
Закрашенный прямоугольник bar(xn,yn,xk,yk);
Пример: программа движения 5 случайных окружностей по случайным траекториям на экране
#include<graphics.h>
#include<stdlib.h>
#include<dos.h>
#include<bios.h>
void main()
{ int gd=0, gm=0, i, K=5, x[5], y[5], r[5], dx[5], dy[5], c[5];
randomize(); initgraph(&gd,&gm,"");
for(i=0; i<K; i++) { r[i]=10+random(25); c[i]=9+random(6);
x[i]=r[i]+random(550); y[i]=r[i]+random(400);
dx[i]=1+random(2); dy[i]=1+random(2); }
while(bioskey(1)==0) {
for(i=0; i<K; i++) { setcolor(c[i]); circle(x[i],y[i],r[i]); }
delay(2);
for(i=0; i<K; i++) { setcolor(0); circle(x[i],y[i],r[i]); }
for(i=0; i<K; i++) { x[i]+=dx[i]; y[i]+=dy[i];
if(y[i]+r[i]>479 || y[i]-r[i]<0) { dy[i]*=-1; c[i]=c[i]++>14?c[i]=9:c[i];
sound(70); delay(30); nosound(); }
if(x[i]+r[i]>639 || x[i]-r[i]<0) { dx[i]*=-1; c[i]=c[i]++>14?c[i]=9:c[i];
sound(150); delay(50); nosound(); }
} } }
Понятие о массивах
Заполнение массивов данными случайными данными
int M[20], k=20, i;
for(i=0; i<k; i++) M[i]=5+random(5);
int M[25][80], X=25, Y=80, i, j;
for(i=0; i<X; i++) for(j=0; j<Y; j++) M[i][j]=2.0* rand()/RAND_MAX;
void main() { //Программа посимвольного вывода
char str[14]="Базовый класс"; int k=13, i, cv;
clrscr(); gotoxy(30,12); randomize();
for(i=0; i<k; i++) { cv=1+ 14.0* rand()/RAND_MAX; textcolor(cv); cprintf("%c",str[i]); }
getch(); }
Структуры
Массивы и указатели позволяют вам создавать список элементов одного типа. Если необходимо использовать объекты, содержащее элементы различного типа, то применяются структуры.
Структура - это конгломерат элементов различного типа. Допустим, вы хотите сохранить информацию о звезде: ее имя, спектральный класс, координаты и прочее. Вы можете описать это следующим образом:
typedef struct { char name[25]; char class;
short subclass; float decl,RA,dist; } star ;
Здесь определена структура (struct) типа star. Сделав такое описание в начале своей програмы, вы можете дальше использовать этот определенный вами тип данных:
main()
{ star mystar;
strcpy(mystar.name,"Эпсилон Лебедя");
mystar.class = 'N'; mystar.subclass = 2; mystar.decl= 3.5167;
mystar.RA= -9.633; mystar.dist= 0.303; }
Вы обращаетесь к каждому элементу структуры, используя его составное имя, состоящее из имени структуры (на первом месте) и, в порядке иерархической подчиненности, имен ее образующих элементов, разделенных точками (.). Конструкция вида: varname.memname (имя переменной.имя элемента) считается эквивалентной имени переменной того же типа, что и memname, и вы можете выполнять с ней те же операции.
Структуры и указатели
Вы можете описывать указатели на структуры точно так же, как и указатели на другие типы данных. Это необходимо для создания связных списков и других динамических структур данных элементами которых, в свою очередь, являются структуры данных.
Фактически указатели на структуры так часто используются в Си, что существует специальный символ для ссылки на элемент структуры, аресованной указателем. Рассмотрим следующий вариант предыдущей программы:
#include <alloc.h>
main() { star *mystar;
mystar = (star *) malloc(sizeof(star)); strcpy(mystar -> name,"Эпсилон Лебедя");
mystar -> class = 'N'; mystar -> subclass = 2;
mystar -> decl= 3.5167; mystar -> RA= -9.633;
mystar -> dist= 0.303; }
В этом варианте mystar объявляется как указатель типа star, а не как переменная типа star. Память для mystar резервируется путем обращения к функции malloc. теперь, когда вы ссылаетесь на элементы mystar, используйте ptrname -> memnane. Символ -> означает, что "элемент структуры направлен в ..."; это сокращенный вариант от обозначения (*ptrname).memnane принятый в Си.
Обмен информацией с файлами.
Библиотечные функции для работы с файлами можно разделить на две группы: потоковые и префиксные. Для всех функций возможны два режима доступа к файлу: текстовый и двоичный. В текстовом режиме производится трансляция символов CR LF (0Dh 0Ah). При чтении информации из файла в этом режиме пара символов CR LF преобразуется в один символ новой строки '\n', а при записи - символ новой строки заменяется парой символом
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.