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