02.06.2009, 19:44
общий
это ответ
Здравствуйте, Боев Константин Геннадиевич.
Среднее геометрическое есть корень n-й степени из произведения элементов списка, где n - число элементов.
Будем считать, что среди элементов списка нет нулевого (заодно это даст признак окончания ввода чисел).
Будем запрашивать у пользователя ввод целых чисел до того момента, пока он не введет 0, и помещать из в список.
Список формируется по принципу стека (помещение очередного элемента производится в голову списка), т.к. это наиболее простая операция, а никаких требований к списку не указано.
После того, как список сформирован, выполняется вычисление произведения. Если не вводить слишком больших чисел или слишком много, то размера LongInt должно хватить. При необходимости тип переменной s можно изменить на Real или даже Double.
Важно установить вначале переменную s в единицу для вычисления произведения.
Выражение s^(1/n) вычисляется как e^(1/n*ln(s)).
Приложение:
Program List;
Type
PList = ^TList;
TList = Record
next : PList;
num : Word;
end;
Var
l : PList;
p : PList;
n : Word;
s : LongInt;
r : Real;
Procedure AddList (var p : PList; n : Word);
var
q : PList;
begin
New (q);
q^.num := n;
q^.next := p;
p := q;
end;
Begin
l := nil;
writeln ('Введите целые числа. Признак окончания ввода - число 0');
Repeat
write ('Число: '); readln (n);
if n <> 0 then AddList (l, n);
Until n = 0;
if l = nil then
writeln ('Список пуст!')
else begin
p := l;
n := 0;
s := 1;
while p <> nil do
begin
s := s * p^.num;
Inc (n);
p := p^.next;
end;
r := exp (1 / n * ln (s));
writeln ('Среднее геометрическое равно ', r:16:8);
end;
End.