Пример 47. Массивы X(k), Y(m), Z(n) представляют собой три выборки значений случайной величины из общей генеральной совокупности. Требуется для каждой из трех выборок X, Y и Z вычислить их эмпирическую среднюю М и несмещенную дисперсию D.
Для решения этой задачи нужно запрограммировать две групповые пользовательские функции Avg и VarD, которые описываются с помощью формул:
Функции Avg и VarD имеют в качестве параметра имя массива, содержащего значения случайной величины и объем выборки.
Структурограмма функции Avg(p, W) Структурограмма функции VarD(p, W)
S=0;
|
| M=Avg(p,W); S=0;
|
Для J от 1 до p с шагом 1 делать
|
| Для J от 1 до p с шагом 1 делать
|
| S=S+W[J];
|
|
| S=S+(W[J]-M)2;
|
Avg=S/p;
|
| VarD=S/(p-1);
|
| | | | |
Структурограмма программы
Вод размерности К массива X; Ввод массива Х[1..К] с клавиатуры;
|
Вод размерности М массива Y; Ввод массива Y[l ,.М] с клавиатуры;
|
Вод размерности N массива Z; Ввод массива Z[l ..N] с клавиатуры;
|
Вывод М(Х), D(X), M(Y), D(Y), M(Z), D(Z).
|
Для описания этого примера понадобилось целых три структурограммы, однако они просты, наглядны, компактны и легки для понимания. Для составления текста программы сделаем предположение, что объемы выборок не превосходят целого числа G:
G= Sup{K,M,N}.
Для передачи имени объекта в качестве параметра этот объект нужно в явном виде описать в разделе TYPE. Мы хотим в качестве параметра передавать имя одномерного массива, поэтому дадим этому типу идентификатор VEK.
PROGRAM PR47;
CONST G = 50;
TYPE VEK = ARRAY [ 1 .. G] OF REAL;
VAR X, Y, Z: VEK; I, К, M, N: INTEGER;
FUNCTION AVG(P: INTEGER; W: VEK): REAL;
VAR J: INTEGER; S: REAL;
BEGIN
S:=0;
FOR J := 1 TO P DO S := S + W[J];
AVG := S/P
END;
FUNCTION VARD(P: INTEGER; W: VEK): REAL;
VAR J: INTEGER; M, S: REAL;
BEGIN
M:= AVG(P, W); S := 0;
FOR J := 1 TO P DO S := S + SQR(W[J] - M);
VARD:=S/(P- 1)
END;
BEGIN
WRITELN('Укажите размерность К массива X '); READLN(K);
WRITELN('Введите массив X, из ', К:2,' вещественных чисел');
FOR I := 1 ТО К DO READ(X[I]);
WRITELN('Укажите размерность M массива Y '); READLN(M);
WRITELN('Введите массив Y, из ',M:2,' вещественных чисел');
FOR I := 1 ТО M DO READ(Y[I]);
WRITELN('Укажите размерность N массива Z '); READLN(N);
WRITELN('Введите массив Z, из ', N:2,' вещественных чисел');
FOR I := 1 ТО N DO READ(Z[I]);
WRITELN('M(X) = ', AVG(K, X) :10:6,', D(X) = ', VARD(K, X) :10:6);
WRITELN('M(Y) = ', AVG(M, Y) :10:6,', D(Y) = ', VARD(M, Y) :10:6);
WRITELN('M(Z) = ', AVG(N, Z) :10:6,', D(Z) = ', VARD(N, Z) :10:6)
END.