Разработка алгоритма решения

Функции пользователя

Цель работы

Целью лабораторной работы является получение практических навыков в работе с функциями пользователя и передачей параметров функциям.

Темы для предварительной проработки

  • Указатели и массивы.
  • Функции пользователя.

Задания для выполнения

Составить программу, которая решает задачу для лабораторной работы ╧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, поскольку для матрицы большего размера невозможно будет обеспечить наглядный вывод (она не поместится на экране).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: