Пиши Дома Нужные Работы

Обратная связь

Массивы – параметры процедур и функций

Массив является структурным типом данных, поэтому для того, чтобы передать массив в качестве параметра в подпрограмму, необходимо в разделе типов основной программы объявить требуемый тип «массив». Например,

TYPE Vect =array[1..20] of real; { тип одномерного массива}

TMatrix=array[1..10,1..10] of real; { тип двумерного массива} .

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

 

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

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

Входные данные:

A , B – одномерные массивы размера n1 и n1, соответственно.

Выходные данные:

Proizv – произведение максимальных элементов массивов A и B.

Метод решения: для определения максимального элемента массива использовать функцию.

Программа будет включать внутреннюю функцию MaxEl. Алгоритм основной программы Main представлен на рис. 9.6, алгоритм функции MaxEl представлен на рис. 9.7.


 

 

       
   
 
 


           
 
   
 
 
   
Рис. 9.6

 



       
 
 
   
Рис. 9.7

Текст программы на языке Паскаль.


Program Main;

Type Vect = array[1..20] of real;

Var A,B: Vect;

n1, n2, I: integer;

Proizv, MaxA, MaxB: real;

Function MaxEl(M: Vect; nm : integer): real;

Var I: integer;

Max: real;

Begin

Max:=M[1] ;

For I:=1 to n1 do

If (M[I]>Max) then

Max:=M[I];

MaxEl:=Max;



End;

Begin

Writeln('Input n1: ');

Readln(n1);

Writeln('Input ',n1, ' real numbers: ');

For I:=1 to n1 do readln(A[I]);

Writeln('Input n2: ');

Readln(n2);

Writeln('Input ',n2, ' real numbers: ');

For I:=1 to n2 do readln(B[I]);

MaxA:=MaxEl(A,n1);

MaxB:=MaxEl(B,n2);

Proizv:= MaxA*MaxB;

Writeln('MaxA = ', MaxA);

Writeln('MaxB = ', MaxB);

Writeln('MaxA*MaxB = ', Proizv);

Write('Press any key!!!');

Readln;

End.

 

 


Результаты тестирования.

Input n1:

Input 5 real numbers:

1.6

-5.8

1.45

Input n2:

Input 3 real numbers:

1.5

-8

MaxA = 7.00000000000000E+0000

MaxB = 2.00000000000000E+0000

MaxA*MaxB = 1.40000000000000E+0001

Press any key!!!

 

Аналогично можно передавать двумерные массивы в качестве параметра процедурам и функциям. Рассмотрим пример программы обработки матриц с использованием подпрограмм.

Задание. В двумерном массиве (матрице) определить номер строки, в которой находится максимальное количество положительных элементов. Для определения числа положительных элементов в строке использовать процедуру. Если положительных элементов нет в массиве, вывести сообщение об этом.

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

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

· число строк в матрице n<=10;

· число столбцов в матрице m<=10;

· двумерный массив (матрица) размером n x m , содержащий положительные и отрицательные значения.

Выходные данные: номер строки, в которой находится максимальное количество положительных элементов.

Метод решения: для определения числа положительных элементов в строке матрицы использовать функцию.

Аномалии: отсутствие положительных элементов в массиве.

Реакция на аномальную ситуацию – выдача сообщения.


Блок-схема основной программы представлена на рис. 9.8.

 

 

 
 


 

 

 
 

 

 

 
 

 


 

 
 

 

 


Рис. 9.8


Блок-схема подпрограммы - процедуры для подсчета количества положительных элементов в каждой строке матрицы и записи счетчиков в массив K из n элементов представлена на рис. 9.9.

K[I]= количество A[I, J], для которых справедливо неравенство
A[I, J]>0.

 



Текст программы на языке Паскаль.

 


Program Main;

Type Tmatrix = array[1..10,1..10] of integer;

Vect = array[1..10] of integer;

Var

A: Tmatrix;

K: Vect;

i, j, n, m, kmax, imax: integer;

Procedure PositiveEl(M:Tmatrix; n, m: integer; VAR K: Vect);

Var i, j: integer;

begin

for i:=1 to n do

begin

K[i]:=0;

for j:=1 to m do

if (Mt[i,j]>0) then

K[i]:= K[i]+1;

end;

end;

begin

write('input n<10 ');

readln(n);

write('input m<10 ');

readln(m);

for i:=1 to n do

for j:=1 to n do

read(A[i,j]);

PositiveEl(A, n, m, K);

kmax:=K[1];

imax:=1;

for i:=1 to n do

if (K[i]>kmax) then

begin

kmax:=K[i];

imax:=i;

end;

if kmax=0 then

writeln('Not A[i][j]>0 !')

else

writeln('imax= ',imax);

write('PRESS ANY KEY!');

readln;

end.

 

Результаты тестирования.

1. Исходные данные:

n=3

m=3

A=((-1,-2,-3), (-1,0,-3), (-5,-2,-8)

Результат- сообщение «not A[i,j]>0».

Результаты, выданные программой.

 

input n<10 3

input m<10 3

-1 -2 -3

-1 0 -3

-5 -2 -8

Not A[i][j]>0 !

PRESS ANY KEY!

 

2. Исходные данные:

n=3

m=3

A=((1,2,3), (1,0,-3), (-5,-2,-8)

Результат- сообщение «imax=1».

Результаты, выданные программой.

input n<10 3

input m<10 3

1 2 3

1 0 -3

-5 -2 -8

imax= 1

PRESS ANY KEY!






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2020 pdnr.ru Все права принадлежат авторам размещенных материалов.