Программирование с использованием подпрограмм

advertisement
Программирование с использованием подпрограмм-функций пользователя.
Вариант
Составить программу, использующую подпрограмму-функцию, в соответствии с номером
варианта, указанным в таблице.
Условие задачи
Примечание
1
2
3
4
5
6
Вычислить большие корни квадратных уравнений
x2-ax+b=0
cy2-dx-f=0
Подсчитать число точек, находящихся внутри круга
радиусом R с центром в начале координат; координаты
заданы массивами X(100), Y(100)
Определить периметры треугольников, заданных
координатами их вершин XA(5), XB(5), XC(5), YA(5),
YB(5), YC(5)
Подсчитать число точек, находящихся внутри круга
радиуса R с центром в точке с координатами (1,1);
координаты заданы массивами X(80), Y(80)
v  v 2  v3
Вычислить z  1
, где υ1, υ2, υ3 – объемы шаров с
3
радиусами r1, r2, r3 соответственно
Вычислить суммы положительных элементов массивов
X(N), Y(M), Z(K)
7
Вычислить среднее арифметическое положительных
элементов для массивов A(N1), B(N2), C(N3)
8
Подсчитать количество элементов матриц X(10,15) и
Y(20,12), удовлетворяющих условиям 0≤xij≤1 и 0≤yij≤1
Вычислить суммы положительных элементов каждой
строки для матриц А(10,12) и В(15,10)
x  xm 2
Вычислить z  m1
, где xm1 и xm2 – наименьшие
2
элементы массивов X1(70), X2(80)
Вычислить суммы элементов главных диагоналей матриц
A(N,N), B(M,M)
s  s2
Вычислить z  1
, где s1 – сумма положительных
2
элементов массива Х(50), s2 – сумма отрицательных
элементов массива Y(60)
Подсчитать число нулевых элементов для матриц A(N,M),
B(M,N)
Вычислить суммы элементов нижних треугольных матриц
для матриц А(15,15) и В(20,20)
Определить число положительных элементов до первого
отрицательного в массивах X(40), Y(50), Z(N)
9
10
11
12
13
14
15
Все корни действительные
Расстояние точки от начала
координат вычислять в
подпрограмме
Длину стороны треугольников
вычислять в подпрограмме
Расстояние точки от центра
круга определять в
подпрограмме
υi вычислять в подпрограмме
N≤60
M≤60
K≤70
N1≤100
N2≤100
N3≤100
M≤20
N≤30
Обе суммы вычислять в одной
подпрограмме
M≤20
N≤20
N≤50
Пример. Определить ближайшую к началу координат точку, находящуюся в верхней
полуплоскости, и наиболее удаленную точку, лежащую в нижней полуплоскости. Координаты
точек, находящихся в верхней полуплоскости, заданы массивами 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
Программа на языке Паскаль.
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.
ПОДПРОГРАММА НА ЯЗЫКЕ Бейсик не
имеет формальных параметров, поэтому перед
каждым
обращением
к
подпрограмме
необходимо
формальным
параметрам
присваивать
значения
соответствующих
фактических параметров. По этой причине
схема
алгоритма
основной
программы
несколько отличается от представленной блоксхемы.
Для уменьшения объема программы и экономии
памяти для хранения координат точек верхней и
нижней полуплоскости используются одни и те
же массивы X1 и Y1 , значения в которые
вводятся по очереди. В программе RMAX
заменено R1.
Download