- •1. Краткие теоретические сведения
- •1.1. Хранение значений в массивах
- •1.2. Объявление переменной массива
- •1.3. Обращение к элементам массива
- •1.4. Использование индексной переменной
- •1.5. Инициализация массива при объявлении
- •1.6. Передача массивов в функции
- •1.8. Алгоритмы обработки двумерных массивов
- •1.8.1. Ввод и вывод матрицы
- •1.8.2. Заполнение матрицы случайными числами
- •1.8.3. Определение количество элементов, больших заданного а и расположенных в строках с нечетными номерами
- •1.8.4. Поиск в матрице строки с максимальной суммой
- •1.8.5. Определение количества строк матрицы, в которых суммы всех элементов отрицательные
- •1.8.6. Определение, есть ли в матрице столбец, содержащий хотя бы один нулевой элемент
- •1.8.7. Обработка элементов квадратных матриц относительно главной и побочной диагоналей
- •2.4.1.2. Пример для варианта 30
- •2.4.1.3. Программа
- •2.4.1.4. Тестирование
- •2.4.2. Задание 2. Выполнение вычислений в строках и столбцах матрицы
- •2.4.2.1. Условие задания
- •2.4.2.2. Пример для варианта 30
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.3. Задание 3. Дополнительные задачи
- •2.4.3.1. Условие задания
- •2.4.3.2. Пример для варианта 30
- •2.4.3.3. Программа
- •2.4.3.4. Тестирование
- •2.4.4. Задание 4. Перестановки строк или столбцов матрицы
- •2.4.4.1. Условие задания
- •2.4.5.2. Пример для варианта 30
- •2.4.5.3. Программа
- •2.4.5.4. Тестирование
- •2.4.6. Задание 6. Вычисление суммы элементов матрицы
- •2.4.6.1. Условие задания
- •2.4.6.2. Пример для варианта 30
- •2.4.6.3. Программа
- •2.4.6.4. Тестирование
- •2.4.7. Задание 7. Вычисление элементов одномерного массива на основе матрицы
- •2.4.7.1. Условие задания
- •2.4.7.2. Пример для варианта 30
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.8. Задание 8. Комбинированные задачи на двумерные массивы
- •2.4.8.1. Условие задания
- •2.4.8.2. Пример для варианта 30
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.9. Задание 9. Работа с матрицами
- •2.4.9.1. Условие задания
- •2.4.9.2. Пример решения задачи (вариант 30)
- •2.4.9.3. Разработка алгоритма решения
- •2.4.9.4. Определение переменных программы
- •2.4.9.5. Разработка текста программы
- •2.4.9.6. Отладка программы
- •2.4.9.7. Результаты работы программы
- •2.4.9.8. Формирование случайных чисел
- •3. Выводы
- •4. Требование к отчету
- •4. Краткие теоретические сведения.
- •5. Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Хранение значений в массивах 2
2.4.9.4. Определение переменных программы
Для реализации алгоритма нам будут нужны такие переменные.
Матрица представляется в памяти как 2-мерний массив (должен быть размещен в статической памяти):
int Ar[S][S];
Переменные для представления текущих номеров строки (l) и столбца (r):
short l, r;
Переменные для представления граничных номеров столбцов:
short r1,r2;
Переменная - модификатор граничных номеров:
short dd;
Переменная - текущий член ЛП:
short k;
Всем скалярным переменным назначаем тип short, т.к. их значения никак не могут выходить из диапазона -128 - 128.
2.4.9.5. Разработка текста программы
Текст программы начинаемо с включения файла stdio.h и определения макроконстанты S - размера матрицы (хотя по условию задания можно было бы использовать просто константу 9 в тексте программы, определение размера через макроконстанту более соответствует стилю программирования на языке C).
Массив-матрицу Ar объявляем до открытия тела главной функции, что обеспечивает его размещение в статической памяти.
Открываем тело главной функции и объявляем переменные в соответствии с п.5.2. Присваиваем переменным r1, r2, dd, k начальные значения (это можно было сделать и при их объявлении). Открываем цикл перебора строк с изменением l от 0 до S-1 и цикл перебора столбцов с изменением r от 0 до S-1. Внутренний цикл состоит из одного условного оператора, так что нет необходимости брать его тело в операторные скобки. Тело внешнего цикла берется в скобки.
В условном операторе проверяем сразу оба условия (блоки 5 и 6). Поскольку для выхода за пределы должно выполняться хотя бы одно из них, они соединены операцией "ИЛИ".
При выполнении условия значение k записывается в элемент массив с индексами [l,r] и сразу же увеличивается. При невыполнении - в элемент массива записывается 0.
После выхода из внутреннего цикла, но еще в теле внешнего модифицируются значения r1 и r2. Потом условным оператором проверяется условие r1>r2 и, если он выполняется знак модификатора dd меняется на противоположный.
Потом открываются два цикла для вывода. В каждой итерации внутреннего цикла выводится значение одного элемента массива. Формат вывода обеспечивает вывод положительного числа из 2 цифр и пробела перед ним. После каждого выхода из внутреннего цикла выводится символ перехода на новую строку. Таким образом, матрица будет выведена в наглядном представлении. Полный текст программы приведен ниже.
/*****************************************************/
/* Лабораторная работа №11 */
/* Работа с матрицами */
/* Пример выполнения. Вариант №30 */
/*****************************************************/
#include <stdio.h>
#define S 9
int Ar[S][S]; /* матрица */
int main(void) {
short l, r; /* текущие индексы */
short r1,r2; /* граничные номера столбцов */
short dd; /* модификатор граничных номеров */
short k; /* текущий член ЛП */
/* начальные значения переменных */
r1=1; r2=S-2; dd=1; k=1;
for (l=0; l<S; l++) { /* перебор строк */
for (r=0; r<S; r++) /* перебор столбцов */
/* условие ненулевого значения */
if ((r<r1)||(r>r2)) Ar[l][r]=0;
else Ar[l][r]=k++;
/* конец перебора строк */
/* модификация границ */
r1+=dd; r2-=dd;
/* уловие перехода в нижнюю часть */
if (r1>r2) dd=-dd;
} /* конец перебора столбцов */
/* вывод матрицы */
for (l=0; l<S; l++) {
for (r=0; r<S; r++) {
printf("%3d",Ar[l][r]);
}
printf("\n");
}
return 0;
}