/* Задача: написать функцию для распечатки массива целых чисел в виде таблицы в columns столбцов. При этом порядок элементов должен быть таков:
0 4 8 1 5 9 2 6 10 3 7 */
/* Пусть в массиве n элементов. Если n < columns, то мы получаем такую ситуацию (n=2, columns=4)
0 1 пусто пусто
Поэтому
if(n < columns) columns = n;
Далее, прямоугольная таблица с columns столбцами и lines строками может содержать максимум columns*lines элементов. Поэтому:
columns*lines >= n
Вычислим число строк. Нам нужно минимальное целое число строк, такое что
lines >= n/columns
Такое число вычисляется по формуле
lines = (n + (columns - 1)) / columns;
где деление целочисленное.
Далее надо только вывести формулу для индекса элемента в массиве в зависимости от номера строки (y) и столбца (x).
index(x, y) = (x * lines + y); причем если index >= n, то ничего не выводить */
#include
int array[100];
void printArray(int a[], int n, int columns){ int lines; /* число строк */
int x, y; /* номер колонки, номер строки - с нуля */ int index; /* индекс элемента в массиве */
if(n < columns) columns = n; lines = (n + (columns-1)) / columns;
/* Используем вложенные циклы: по строкам, а внутри - по столбцам */ for(y=0; y < lines; y++){ for(x=0; x < columns; x++){ index = x * lines + y; if(index >= n) /* элемент за концом массива */ break; /* прервать строку */
/* break выводит только из внутреннего цикла (по столбцам) */
/* сделать отступ в следующую колонку */ if(x != 0) putchar('\t');
printf("%02d|%d", index, a[index]); /* Формат %02d заставляет печатать целое число с использованием ДВУХ цифр, причем если число состоит из одной цифры, то спереди приписывается нуль. */ } putchar('\n'); /* перейти к следующей строке */ } } void main(){ int i, cols;
/* Инициализация значений элементов массива */ for(i=0; i < 100; i++) array[i] = i + 1;
for(cols=4; cols <= 13; cols++){ printf("\t\t* * * ТАБЛИЦА В %d СТОЛБЦОВ * * *\n", cols); printArray(array, 77, cols); putchar('\n'); } }