Функции пользователя
Цель работы
Целью лабораторной работы является получение практических навыков в работе с функциями пользователя и передачей параметров функциям.
Темы для предварительной проработки
- Указатели и массивы.
- Функции пользователя.
Задания для выполнения
Составить программу, которая решает задачу для лабораторной работы ╧10 с такими дополнительными условиями:
- размерность матрицы должна вводиться при выполнении программы;
- само решение задачи должно быть оформлено в виде функции, которой передается матрица и ее размерность.
Варианты индивидуальных заданий
Представлены в работе | №10 | и в конце файла. | |||||||
5. Пример решения задачи (вариант 30)
Решение приводится со ссылками на по двумерным массивам (матрицам).
Разработка алгоритма решения.
Сам алгоритм решения мог бы быть тем же, что и в работе ╧9. Но обратим внимание на то, что условие этой работы несколько отлично от условия работы ╧9. Если в работе ╧9 мы имели фиксированную размерность матрицы, то тут у нас размерность матрицы заранее не известна. Составляет ли это существенное различие? Да. Если мы проверим функционирования алгоритма работы ╧9 при разных значениях размерности (S), то мы убедимся, что корректно он срабатывает только при нечетных значениях S. При четных значениях верхняя половина матрицы формируется правильно, а в нижней половине область ненулевых значений будет захватывать также и сами диагонали, что не соответствует условиям задания. Поэтому для этой работы следует пересмотреть алгоритм.
Для элемента, который лежит на главной диагонали, индексы удовлетворяют условию: L=R, на побочной - R=S-L-1. Следовательно, для верхней половины условие попадания в ненулевую область: L < R < S-L-1, а для нижней: S-L-1 < R < L. Или, обобщая: min(L,S-L-1) < R < max(L,S-L-1). В схеме алгоритма, которая приведена на рисунке 1, мы используем именно это условие. К тому же в схеме отражено разделение программы на две функции: главную функцию - main(), которая выполняет выделения памяти для матрицы, вызов функции заполнения матрицы и вывод результата, и функцию fill(), которая выполняет заполнение матрицы по заданным правилам.
Рисунок 1. Схема алгоритма
В этой работе ми несколько усложним алгоритм, добавив в него проверку значения S, которое введено оператором (блоки 3 - 8). Нижняя граница для значения S - 1, поскольку матрица нулевой или отрицательной размерности просто не имеет смысла. Верхняя граница - 24, поскольку для матрицы большего размера невозможно будет обеспечить наглядный вывод (она не поместится на экране).