Обработка массивов с использованием подпрограмм

advertisement
Вариант
Обработка массивов с использованием подпрограмм.
Составить программу, использующую подпрограмму, в соответствии с номером варианта,
указанным в таблице.
1
2
3
4
Условие задачи
Подсчитать число точек, находящихся внутри круга
радиусом R с центром в начале координат;
координаты заданы массивами X(N), Y(N)
Определить периметры пяти треугольников,
заданных координатами их вершин XA(5), XB(5),
XC(5), YA(5), YB(5), YC(5)
Подсчитать число точек, находящихся внутри круга
радиуса R с центром в точке с координатами (1,1);
координаты заданы массивами X(N), Y(N)
Вычислить суммы положительных элементов
массивов X(N), Y(M), Z(K)
5
Вычислить среднее арифметическое положительных
элементов для каждого из массивов A(К), B(L), C(M)
6
Отсортировать массивы А(N) и B(M) в порядке
возрастания.
Найти наибольшие элементы и их порядковые
номера массивов X(N), Y(M)
7
8
9
10
11
Отсортировать массивы А(N) и B(M) в порядке
убывания
Подсчитать число точек, находящихся внутри круга
радиусом R с центром в начале координат;
координаты заданы массивами X(100), Y(100)
Определить периметры пяти треугольников,
заданных координатами их вершин XA(5), XB(5),
XC(5), YA(5), YB(5), YC(5)
Вычислить суммы положительных элементов
массивов X(N), Y(M), Z(K)
Примечание
Расстояние точки от начала
координат вычислять в
подпрограмме
Длину стороны
треугольников вычислять в
подпрограмме
Расстояние точки от центра
круга определять в
подпрограмме
Сумму положительных
элементов каждого из
массивов определять в
подпрограмме
Среднее арифметическое
положительных элементов
каждого из массивов
определять в подпрограмме
Обмен элементов массива
производить в подпрограмме
Поиск наибольшего
элемента и порядкового
номера производить в
подпрограмме
Обмен элементов массива
производить в подпрограмме
Расстояние точки от начала
координат вычислять в
подпрограмме
Длину стороны
треугольников вычислять в
подпрограмме
Сумму положительных
элементов каждого из
массивов определять в
подпрограмме
Пример1. Определить ближайшую к началу координат точку, находящуюся в верхней
полуплоскости, и наиболее удаленную точку, лежащую в нижней полуплоскости.
Координаты точек, находящихся в верхней полуплоскости, заданы массивами X1(N) и
Y1(N), а лежащие в нижней плоскости, - массивами X2(M) и Y2(M), где N≤40, M≤60.
Для каждой точки верхней плоскости следует определить расстояние от начала координат.
Из этих расстояний необходимо найти наименьшее. Такие же действия выполнить для
точек, находящихся в нижней полуплоскости, однако найти наибольшее расстояние от
начала координат.
Вычисление расстояний от начала координат и нахождение наименьшего или
наибольшего из них выполним в подпрограмме-функции.
Использование одной подпрограммы для нахождения наибольшего и наименьшего
значений потребует введения дополнительного параметра, который необходим для
проверки условия K*R>K*RM. Если K=1, то условие R>RM используется для нахождения
наибольшего. Если K=-1, то условие R<RM используется для нахождения наименьшего.
В подпрограмму необходимо передать массивы координат точек, их размер, а также
параметр K, который может принимать значения +1 или -1. результат, полученный в
подпрограмме-функции, присваивается ее имени.
Блок-схема.
начало
Вход
Ввод N,M,X1,Y1,X2,Y2
RM=-1020
i=1,N
F(X1,Y1,N,-1)
R  x2  y2
S1=F
F(X2,Y2,M,1)
S2=F
нет
KR>KRM
да
Вывод S1,S2
RM=R
конец
F=RM
Выход
Программа на языке Бейсик.
DIM X1(60), Y1(60)
ПОДПРОГРАММА НА ЯЗЫКЕ Бейсик не
имеет формальных параметров, поэтому
перед
каждым
обращением
к
INPUT N,M
FOR I=1 TO N: INPUT X1(I), Y1(I): NEXT I
K=-1: GOSUB 100
S1=R1
FOR I=1 TO M: INPUT X1(I), Y1(I): NEXT I
K=1: N=M: GOSUB 100
PRINT “S1=”;S1; “S2=”;R2
STOP
100 REM ПОДПРОГРАММА
R1==1E+20*K
FOR I=1 TO N
R=SQR(X1(I)*X1(I)+Y1(I)*Y1(I))
IF K*R>K*R1 THEN R1=R
NEXT I
RETURN
END
подпрограмме необходимо формальным
параметрам
присваивать
значения
соответствующих
фактических
параметров. По этой причине схема
алгоритма основной программы несколько
отличается от представленной блок-схемы.
Для уменьшения объема программы и
экономии памяти для хранения координат
точек верхней и нижней полуплоскости
используются одни и те же массивы X1 и
Y1 , значения в которые вводятся по
очереди. В программе RMAX заменено
R1.
Программа на языке Паскаль.
Program coord;
Const n=40;
Type mas=array[1..n] of real;
Var i, nr, mr: integer;
s1,s2: real;
x1, y1, x2, y2: mas;
function vec(x,y:mas; kx,n:integer):real;
var j:integer;
r,rm: real;
begin
rm:=-1E20;
for j:=1 to m do begin
r:=sqrt(x[i]*x[i]+y[i]*y[i]);
if (kx*r>=kx*rm) then rm:=r;
end;
vec:=rm;
end;
begin
write(‘введите значения nr и mr’);
read(nr,mr);
write(‘введите значения массивов x1 и y1’);
for i:=1 to nr do read (x1[i], y1[i]);
write(‘введите значения массивов x2 и y2’);
for i:=1 to mr do read (x2[i], y2[i]);
s1:=vec(x1,y1,nr,-1);
s2:=vec(x2,y2,mr,1);
write(‘s1=’,s1,’s2=’,s2);
end.
Download