[МУЗЫКА] [МУЗЫКА]
Рассмотрим пример программы,
в которой будет использоваться подпрограмма.
Нам нужно написать постановку задачи,
алгоритм и программу для вычисления значения по следующей формуле.
Матрица B у нас имеет целый тип и квадратная,
то есть количество строк и количество столбцов совпадают.
Рассмотрим в качестве примера следующую матрицу.
Посмотрим на формулу.
Первым циклом нам нужно выбрать номер столбца и в этом
столбце найти максимальный по модулю элемент.
Для первого столбца значение этого максимума будет равно 7.
Во втором столбце максимум равен 4, в третьем у нас получится 6,
а в четвёртом результат будет равен −8.
Затем из этих максимальных по модулю элементов найдём минимальный,
то есть значение будет равно −8.
Теперь посмотрим, как выглядит в данном случае постановка задачи.
Нам дана размерность матрицы, это целое число, и даны сами элементы,
которые также являются целыми числами.
Результатом является G, вычисленное по нашей формуле,
ограничение на количество строк и столбцов традиционно — это натуральное число,
не превышающее максимально возможной длины.
Связью в данном случае является наша формула.
Теперь посмотрим, как записывается алгоритм в том случае,
если у нас с вами есть подпрограмма.
Для главной функции мы с вами запишем отдельный алгоритм.
Он начинается с ключевого слова «начало», затем у нас будет ввод данных,
далее будет вызвана функция, которая будет считать значение по формуле,
и затем будет выведен результат.
А вот для функции Z мы напишем отдельный алгоритм.
В этом алгоритме мы укажем, какие данные у нас на входе,
то есть что нужно передать в эту функцию, чтобы получить результат.
И что у нас на выходе, то есть какой результат вернёт наша функция.
Далее, тело функции имеет ту же самую структуру, что и тело обычного алгоритма.
Начинается с ключевого слова «нач» — начало, и затем следует наше действие.
Начальным значением минимума будет число, равное maxint.
Почему?
Почему же мы не можем взять наше начальное значение из матрицы?
Дело в том, что минимум мы считаем из максимумов, а на первом шаге ни одного
максимума у нас нет, поэтому начальным значением мы выбираем константу maxint.
Далее мы организуем первый цикл,
который будет перебирать все столбцы нашей матрицы.
Начальным значением максимума по модулю будет являться первый элемент
текущего столбца.
Далее мы перебираем все остальные строки со второй до последней и
сравниваем модуль текущего элемента матрицы с модулем максимума.
Если по модулю текущий элемент матрицы превышает максимум,
то тогда максимум приобретает значение, равное этому элементу.
Далее условие закрывается, и закрывается внутренний цикл.
Затем мы сравниваем максимум с минимумом.
Если окажется, что максимум меньше, чем минимум,
то мы заменяем текущее значение минимума на максимум.
Затем закрываем условие и закрываем внешний цикл.
Далее мы имени функции присваиваем результат.
Результатом в данном случае является минимум.
Теперь посмотрим, как выглядит программа, которая будет написана по этому алгоритму.
Здесь у нас с вами использован тип для матрицы.
Максимально матрица имеет размер 20 x 20 и состоит из целых чисел.
Кроме того, у нас есть глобальные переменные: это сама матрица B, и это
некоторое количество счётчиков, которые будут использоваться при вводе и выводе.
А также G, которое является нашим результатом.
Далее мы с вами должны записать нашу функцию,
потому что все процедуры и функции записываются у нас в блоке «описание».
И только затем идёт тело нашей программы.
Функция называется Z.
На входе у неё параметр значения n и сама матрица,
которая является параметром переменной в целях экономии памяти.
Результат – целого типа.
Далее у нас есть локальные переменные: минимум, максимум и счётчики циклов.
Затем мы записываем ключевое слово begin и начинаем кодировать наш алгоритм.
Начальное значение минимума — это maxint, первый цикл перебирает все
столбцы последовательно, на каждом шаге этого цикла максимум
приобретает начальное значение, равное первому элементу текущего столбца.
Далее мы сравниваем наше текущее значение максимума
последовательно со всеми элементами этого столбца.
И если модуль текущего элемента матрицы превышает модуль максимального числа,
тогда значение максимума заменяется на этот элемент.
Обращаю ваше внимание, что, как и положено по общему правилу, мы сравниваем
модуль текущего элемента и модуль максимального, а запоминаем сам элемент.
Далее наш внутренний цикл закрыт, мы сравниваем максимум с минимумом.
Если нужно, меняем значение минимума и закрываем внешний цикл.
Следующий оператор возвращает значение из функции.
И далее у нас идёт главная программа.
Ввод размерности матрицы и самой матрицы я пропущу,
потому что мы с вами неоднократно рассматривали, как это делается.
Далее следует вызов нашей функции, результат возвращается в переменную G,
и выводится полученное значение.
Далее следует end., которое завершает нашу программу.
Рассмотрим программу, которая решает задачу поиска
минимального из максимальных элементов каждого столбца.
В этой программе для подсчёта результата используется функция,
которая в качестве результата возвращает найденное число.
Здесь использован тип для матрицы.
И на вход этой функции подаётся количество строк матрицы и сама матрица.
Далее здесь реализован алгоритм поиска значения по формуле.
Я не буду его напоминать, потому что мы с вами его только что рассматривали.
И после того как вычисления произведены,
вот этот оператор присваивания возвращает значение функции в главную программу.
Далее главная функция у нас вводит исходные данные,
то есть вводит количество строк матрицы и, в данном случае,
поскольку она квадратная, то количество строк равно числу столбцов,
далее вводит элементы, вызывает нашу функцию.
Обращаю ваше внимание,
что при вызове функции мы должны очень чётко соблюдать типы параметров.
Если навести на какую‐нибудь из параметров курсор, то мы видим,
что здесь есть подсказка, какого типа эта величина.
Вот первая величина у нас имеет тип integer,
а вторая величина должна быть типа «матрица».
Давайте попробуем запустить нашу программу и зададим
те исходные данные, которые мы рассматривали в качестве примера.
И задаём количество строк и столбцов в матрице,
в данном случае оно равно четырём.
Затем вводим построчно элементы матрицы.
[ЗВУК] [ЗВУК]
[ЗВУК] [ЗВУК]
[ЗВУК] И
на экране у нас отображается результат,
который для данной матрицы у нас был равен −8.
То есть все подсчёты произведены верно.
Давайте попробуем задать какую‐нибудь другую матрицу.
Обращаю ваше внимание, что при вводе неверного количества
строк будет повторный ввод данных.
Допустим, пусть у меня будет матрица 3 x 3.
Я ввожу элементы, ввожу их
построчно.
И получаю результат,
равный 3.
Для каждого столбца мы искали максимальный по модулю элемент.
Для первого столбца это была 3, для второго был элемент,
равный 9, и для последнего он был равен 13.
Затем из этих максимумов мы нашли минимальный элемент, он равен 3.
То есть наша программа работает правильно и считает результат в полном
соответствии с нашей формулой.
[МУЗЫКА]
[МУЗЫКА]