Язык СИ. Использование символьного массива. Сравнение операндов. Сообщения об ошибках компилятора

Страницы работы

Фрагмент текста работы

графический драйвер, 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', а при записи - символ новой строки заменяется парой символом

Похожие материалы

Информация о работе