+-------------+-------------+-------------+------> ось x
| array[0][0] | array[0][1] | array[0][2] | ...
+-------------+-------------+-------------+
| array[1][0] | array[1][1] | array[1][2] | ...
+-------------+-------------+-------------+
| array[2][0] | array[2][1] | array[2][2] | ...
+-------------+-------------+-------------+
| ... ... ...
V
ось y
Пока, на данной стадии знания Си,
я рекомендую вам объявлять двумерные массивы как глобальные
и не пытаться передавать их имена в функции как аргументы.
*/
/* Приведем пример, который заводит двумерный массив букв,
рисует в нем некую геометрическую фигуру,
и печатает этот массив.
Здесь мы приводим алгоритм Брезенхема для рисования прямых,
объяснения КАК он это делает мы опустим. Пардон.
*/
#define LINES 31 /* число строк */
#define COLUMNS 79 /* число столбцов */
char field[LINES][COLUMNS];
/* В данной программе массив НЕ является параметром,
мы работаем с ним как с глобальной переменной.
Функция рисования прямой линии, алгоритм Брезенхема.
*/
void line(int x1, int y1, int x2, int y2, char sym){
int dx, dy, i1, i2, i, kx, ky;
int d; /* "отклонение" */
int x, y;
int flag;
dy = y2 - y1;
dx = x2 - x1;
if (dx == 0 && dy == 0){
field[y1][x1] = sym; /* единственная точка */
return;
}
kx = 1; /* шаг по x */
ky = 1; /* шаг по y */
/* Выбор тактовой оси */
if( dx < 0 ){ dx = -dx; kx = -1; } /* Y */
else if(dx == 0) kx = 0; /* X */
if(dy < 0) { dy = -dy; ky = -1; }
if(dx < dy){ flag = 0; d = dx; dx = dy; dy = d; }
else flag = 1;
i1 = dy + dy; d = i1 - dx; i2 = d - dx;
x = x1; y = y1;
for(i=0; i < dx; i++){
field[y][x] = sym; /* нарисовать точку */
if(flag) x += kx; /* шаг по такт. оси */
else y += ky;
if( d < 0 ) /* горизонтальный шаг */
d += i1;
else{ /* диагональный шаг */
d += i2;
if(flag) y += ky; /* прирост высоты */
else x += kx;
}
}
field[y][x] = sym; /* последняя точка */
}
int main(){
int x, y;
/* Заполнить поле пробелами */
for(y=0; y < LINES; y++)
for(x=0; x < COLUMNS; x++)
field[y][x] = ' ';
/* Нарисовать картинку */
line(0,0, 0, LINES-1, '*');
line(0,0, COLUMNS-1, 0, '*');
line(COLUMNS-1, 0, COLUMNS-1, LINES-1, '*');
line(0, LINES-1, COLUMNS-1, LINES-1, '*');
line(0,0, COLUMNS-1, LINES-1, '\\');
line(COLUMNS-1,0, 0,LINES-1, '/');
/* Распечатать массив */
for(y=0; y < LINES; y++){
for(x=0; x < COLUMNS; x++)
putchar(field[y][x]);
putchar('\n');
}
return 0;
}