А. Богатырев - Руководство полного идиота по программированию (на языке Си), страница 10
Описание файла
PDF-файл из архива "А. Богатырев - Руководство полного идиота по программированию (на языке Си)", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 10 страницы из PDF
Руководство полного идиота<br> по программированию (на языке Си)*/if(x > 0) putchar('\t');/* ... и в ней напечатать значение */printf("%d", value);}putchar('\n'); /* новая строка */}}20_2.c/*elem(x, y) = LINES * x + y;тогдаelem(0, y+1) - elem(COLUMNS-1, y) = 1 + LINES - COLUMNS*LINES;elem(x+1, y) - elem(x, y)= LINES;*/#include <stdio.h>int A = 150;int COLUMNS = 7;int LINES;int value;/* Количество элементов*//* Количество столбцов*//* Количество строк*//* Значение в текущей клетке */int OFFSET_NEXT_COLUMN;int OFFSET_NEXT_LINE;/* Рисуем строку таблицы */void line(){int col;/* номер колонки */for(col=0; col < COLUMNS; col++){if(value >= A)/* отсутствующий элемент */printf("* ");elseprintf("%03d ", value);/* Увеличение при переходе в соседнюю колонку */value += OFFSET_NEXT_COLUMN;/* 1 */}/* Перейти к следующей строке */putchar('\n');/* Увеличение при переходе из конца одной строки к началу следующей.Заметим, что к value уже прибавлено OFFSET_NEXT_COLUMN из точки 1,поэтому при переходе в начало следующей строки в сумме прибавляетсяOFFSET_NEXT_COLUMN + OFFSET_NEXT_LINE равное1 - LINES*COLUMNS + LINES,что соответствует формуле.*/value += OFFSET_NEXT_LINE;/* 2 */}int main(){int nline; /* Номер строки */LINES = (A + (COLUMNS - 1)) / COLUMNS;file:///Volumes/WININSTALL/assets/materials_informatiks.html65/6803.06.2015Андрей Богатырев.
Руководство полного идиота<br> по программированию (на языке Си)OFFSET_NEXT_COLUMN = LINES;OFFSET_NEXT_LINE = 1 - LINES*COLUMNS;for(nline=0; nline < LINES; nline++)line();/* возврат 0 из main() означает "программа завершена успешно" */return 0;}21.c/* ДВУМЕРНЫЕ МАССИВЫ *//*Двумерный массив представляет собой двумернуюпрямоугольную таблицу из нумерованных переменных.Он объявляется так:int array[LINES][COLUMNS];А индексируется так:array[y][x]где 0 <= y <= LINES - 10 <= x <= COLUMNS - 1+-------------+-------------+-------------+------> ось 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];/* В данной программе массив НЕ является параметром,мы работаем с ним как с глобальной переменной.Функция рисования прямой линии, алгоритм Брезенхема.*/file:///Volumes/WININSTALL/assets/materials_informatiks.html66/6803.06.2015Андрей Богатырев. Руководство полного идиота<br> по программированию (на языке Си)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; }elseflag = 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; /* шаг по такт.
осиelsey += ky;*/if( d < 0 ) /* горизонтальный шаг*/d += i1;else{/* диагональный шаг*/d += i2;if(flag) y += ky; /* прирост высоты */elsex += 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,line(COLUMNS-1,0,COLUMNS-1, LINES-1, '\\');0,LINES-1,'/');/* Распечатать массив */for(y=0; y < LINES; y++){for(x=0; x < COLUMNS; x++)putchar(field[y][x]);file:///Volumes/WININSTALL/assets/materials_informatiks.html67/6803.06.2015Андрей Богатырев.
Руководство полного идиота<br> по программированию (на языке Си)putchar('\n');}return 0;}Популярность: 21, Last-modified: Wed, 05 Mar 2008 22:36:19 GMTfile:///Volumes/WININSTALL/assets/materials_informatiks.html68/68.