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

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

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

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

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

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

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

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

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

a11

...

a1j

...

a1n

a21

...

a2j

...

a2n

...

...

...

...

...

ai1

...

aij

...

ain

...

...

...

...

...

am1

...

amj

...

amn

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

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

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

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

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

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

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

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

b11

...

b1j

...

b1s

b21

...

b2j

...

b2s

...

...

...

...

...

bi1

...

bij

...

bis

...

...

...

...

...

bt1

...

btj

...

bts


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

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

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

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

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

Матрица A(3x4) МатрицаB(2x3)

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)). Первый параметр в каждом обращении является входным и определяет имя и размеры передаваемого в подпрограмму двумерного массива. Второй параметр является выходным, предназначенным для получения одномерного массива значений положительных сумм строк из подпрограммы.