Руководство полного чайника по программированию на языке Си


Задача: написать функцию для распечатки массива целых чисел 3


/* 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

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("* "); else printf("%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;

OFFSET_NEXT_COLUMN = LINES; OFFSET_NEXT_LINE = 1 - LINES*COLUMNS;

for(nline=0; nline < LINES; nline++) line();

/* возврат 0 из main() означает "программа завершена успешно" */ return 0; }




- Начало -  - Назад -  - Вперед -