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


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


/* Задача: написать функцию для распечатки массива целых чисел в виде таблицы в 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'); } }




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