Для решения данной подзадачи понадобится процедура ввода матрицы.
Назовем процедуру ввода матрицы словом Vvod. Для работы этой процедуры понадобится матрица и ее размерность (число строк и столбцов). При этом все три параметра должны передаваться как параметры переменные. Для корректного ввода в процедуру передадим также буквенное обозначение матрицы, для чего воспользуемся переменной Mname символьного типа. Чтобы не было коллизии имен между формальными и фактическими параметрами, назовем формальную матрицу X, а ее размерности Y, Z.
На этом этапе необходимо определить наборы формальных параметров и способы их передачи для каждой процедуры, так как эти данные указываются в первом блоке блок-схемы.
Элементы матриц должны быть созданы по условию задачи с помощью генератора случайных чисел Random. Функция Random без параметра формирует вещественные числа в диапазоне [0,1). Формула Random(b-a+1)+a будет выдавать случайные целые числа из диапазона [a,b]. Так как по условию задачи элементами матриц должны быть вещественные числа из диапазона [a,b], то к каждому полученному случайному вещественному числу из диапазона [0,1) необходимо прибавить случайное целое число из диапазона [a,b].
Возьмем, к примеру, интервал от -5 до 15. Тогда, получим Random + Random(21)-5. Таким образом, каждый очередной элемент массива будет представлять собой вещественное число из диапазона [-5, 15] и выводится на экран.
Алгоритм заполнения матриц соответствующими числами в виде фрагмента блок-схемы указан ниже:
Подалгоритм поиска
Максимального элемента в каждой матрице
С помощью процедуры
Для решения данной подзадачи понадобится процедура поиска максимального элемента матрицы.
Процедура поиска максимального элемента пусть будет Maximum. Для процедуры, собственно, матрица и ее размерность будут входными параметрами, а значение максимального элемента – выходным. Таким образом, здесь будет использован набор из четырех формальных параметров, три из которых будут передаваться как параметры-константы, а один – как параметр-переменная.
Переменные i, j, используемые в качестве переменных в циклах-счетчиках – чисто локальные, так как их значения носят вспомогательный характер и нужны только в пределах процедур для перебора элементов матрицы.
Все это можно представить в виде следующего фрагмента блок-схемы:
Подалгоритм поиска
Максимального элемента в каждой матрице
С помощью функции
Теперь решим ту же задачу, но только используя для поиска максимума не процедуру, а функцию, поскольку именно функция лучше подходит для решения, т.к. от каждой матрицы надо получить, по сути, одно единственное число, а функция, как раз, возвращает единственное значение. Блок-схема несколько изменится. Поменяется основная программа и процедура поиска максимума преобразуется в функцию. Блок-схема ввода матрицы останется прежней.
Для того чтобы найти произведение максимальных элементов, дополнительную процедуру использовать не нужно, так как действие будет производиться один раз. При этом переменная P будет глобальной, поскольку она используется в основной программе.
РАЗРАБОТКА ПРОГРАММЫ
НА ЯЗЫКЕ PASCAL
Последний этап решения задачи – составление программы по полученной блок-схеме. Следует учесть, что поскольку по условию матрицы разного размера, то для описания нового типа данных T2mx необходимо использовать число строк и столбцов, которое удовлетворило бы размеры всех трех матриц. Можно взять, например, T2mx=array[1..15, 1..15] of real.
Программа начинается со служебного слова Program, после которого следует заголовок программы. В данном случае это PP_1.
Далее включаем раздел Uses для использования модуля CRT, который применяется для управления работой экрана в текстовом режиме.
После названия программы и идентификации используемых модулей следует раздел объявления констант (const) и переменных (var).
Тело программы или раздел операторов начинается со слова begin и заканчивается end. В этом разделе описываем действия, которые должна выполнить программа согласно выбранного алгоритма.
Так как в программе подразумевается ввод данных с экрана и вывод полученных результатов на экран, перед началом программы его необходимо очистить от ненужной информации. Это проделывает процедура clrscr, которая описана в модуле Crt.
Перед первым обращением к функции random необходимо с помощью вызова процедуры randomize инициализировать программный генератор случайных чисел, иначе при каждом запуске программы датчик будет выдавать одни и те же числа.