Задача: Найти произведение ненулевых элементов матрицы.
Решение:
1. Для решения данной задачи нам потребуются переменные: матрица, состоящая, например, из целочисленных элементов; P – произведение элементов, отличных от 0; I, J – индексы массива; N, M – количество строк и столбцов в матрице.
2. Входными данными являются N, M – их значения введем с клавиатуры; матрица – ввод матрицы оформим в виде процедуры, заполнение матрицы осуществим случайным образом, т.е. с помощью функции random().
3. Выходными данными будет являться значение переменной P (произведение).
4. Чтобы проверить правильность выполнения программы, необходимо вывести матрицу на экран, для этого оформим процедуру вывода матрицы.
5. Ход решения задачи:
обсудим сначала выполнение основной программы, реализацию процедур обговорим чуть позже:
· введем значения N и M;
· Введем матрицу, для этого обращаемся к процедуре vvod(a), где а – матрица;
· Напечатаем полученную матрицу, для этого обращаемся к процедуре print(a);
· Присвоим начальное значение переменной P=1;
|
|
· Будем последовательно перебирать все строки I от 1-й до N-й, в каждой строке будем перебирать все столбцы J от 1-го до
M-го, для каждого элемента матрицы будем проверять условие: если aij¹0, то произведение P будем домножать на элемент aij (P=P*aij);
· Выведем на экран значение произведения ненулевых элементов матрицы – P;
А теперь поговорим о процедурах.
Замечание (это важно!) Параметром процедуры может быть любая переменная предопределенного типа, это означает, что для передачи в процедуру массива в качестве параметра, тип его должен быть описан заранее. Например:
Type
Matrix=array [1..10, 1..10] of integer;
..............................
procedure primer (a: matrix);
..............................
Вернемся теперь к нашим процедурам.
Процедура ввода матрицы называется vvod, параметром процедуры является матрица, причем она должна быть, как результат, передана в основную программу, следовательно, параметр должен передаваться по ссылке. Тогда заголовок нашей процедуры будет выглядеть так:
Procedure vvod(var m: matrix);
Для реализации вложенных циклов в процедуре нам потребуются локальные переменные-счетчики, например, k и h. Алгоритм заполнения матрицы уже обсуждался, поэтому не будем его повторять.
Процедура вывода матрицы на экран называется print, параметром процедуры является матрица, но в этом случае она является входным параметром, следовательно, передается по значению. Заголовок этой процедуры будет выглядеть следующим образом:
Procedure print (m: matrix);
И вновь для реализации вложенных циклов внутри процедуры нам потребуются счетчики, пусть они называются так же – k и h. Алгоритм вывода матрицы на экран был описан выше, воспользуемся этим описанием.