Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции программирование.doc
Скачиваний:
38
Добавлен:
05.11.2018
Размер:
4.73 Mб
Скачать

Подпрограмма с результатом – массивом

Рассмотренные примеры позволяли возвращать результаты в виде одного или нескольких разрозненных значений. При этом входными параметрами подпрограмм были переменные и одномерные массивы. В некоторых задачах необходима обработка в подпрограмме многомерных массивов, а также возвращение значений в виде одно- и много- мерных массивов. Рассмотрим особенности программирования таких задач на конкретном примере 6.4.

Постановка задачи

Вычислить суммы элементов каждой строки двумерных массивов A(m x n) и B(t x s). Положительные суммы каждой исходной матрицы сформировать в одномерные массивы.

Математическая формулировка

Исходные данные

m – размер матрицы A(m x n) по строкам ();

n – размер матрицы A(m x n) по столбцам ().

a11

...

a1j

...

a1n

a21

...

a2j

...

a2n

...

...

...

...

...

ai1

...

aij

...

ain

...

...

...

...

...

am1

...

amj

...

amn

Модель матрицы A(m x n):

i – текущий индекс номера строки;

j – текущий индекс номера столбца;

1<=i<=m – диапазон изменения i;

1<=j<=n – диапазон изменения j;

t – размер матрицы по строкам ();

s – размер матрицы по столбцам ().

Модель матрицы B(t x s):

b11

...

b1j

...

b1s

b21

...

b2j

...

b2s

...

...

...

...

...

bi1

...

bij

...

bis

...

...

...

...

...

bt1

...

btj

...

bts


i – текущий индекс номера строки;

j – текущий индекс номера столбца;

1<=i<=t – диапазон изменения i;

1<=j<=s – диапазон изменения j;

Зададимся конкретными массивами

Матрица A(3 x 4) Матрица B(2 x 3)

1.6

7.3

15

4.2

-10.18

12

8.53

9.3

5.7

-3.5

46

-32.1

28.5

-52.6

4.7

56

65

-7.2


Расчетные зависимости

– сумма элементов i-строки матрицы А, при .

Модель создаваемого массива для матрицы А

(ssa1, ssa2, . . . , ssad, . . . , ssamp)

где

для всех .

, – сумма элементов i-строки матрицы B, при .

Модель создаваемого массива для матрицы B

(ssb1, ssb2, . . . , ssbd, . . . , ssbtp)

где

для всех .

Выбор метода решения

Анализ показывает, что решение задачи требует многократного вычисления суммы элементов каждой строки двумерных массивов A и B. В первом случае m элементов сумм массива A, во втором – t элементов сумм массива B.

Результаты вычислений для положительных сумм каждой исходной матрицы представляются одномерными массивами SSA(mp) и SSB(tp), где mp и tp – размеры созданных массивов. Такое вычисление удобно выполнить в циклическом процессе, оформленном дополнительным алгоритмом, входным параметром которого является исходный двумерный массив, а выходным – результирующий одномерный.

Для рассматриваемой задачи в качестве входных формальных параметров дополнительного алгоритма выберем, например, имя массива Z и его размеры kxp. Тогда в качестве выходных параметров можно использовать одномерный массив SSZ размером d (количеством положительных сумм). Следовательно, в качестве формальных параметров выбраны Z(kxp), SSZ(d).

Для работы с подпрограммой организуются обращения к ней из основного алгоритма. Естественно, что в обращениях используются входные и выходные фактические параметры.

Поэтому, задавшись именем подпрограммы sum_str, сформируем два обращения к ней: для расчёта положительных сумм элементов строк массива A – sum_str(A(mxn) ,SSA(mp)) и для тех же вычислений с массивом B – sum_str(B(txs), SSB(tp)). Первый параметр в каждом обращении является входным и определяет имя и размеры передаваемого в подпрограмму двумерного массива. Второй параметр является выходным, предназначенным для получения одномерного массива значений положительных сумм строк из подпрограммы.