Задача: найти среднее геометрическое положителных элементов каждого столбца матрицы d(n,m). Поместить их в массив m(n, m<12).
Мне удалось написать программу, вычисляющую лишь общее средее геометрическое, остальное, к сожалению, мне не понятно. Помогите пожалуйста, буду очень признательна)))
program zadacha;
uses crt;
type a=array [1..100, 1..100] of integer;
var d:a;
i,j,n,m,k,pol:integer;
sr:real;
begin
writeln('vvedite kolichestvo stroc massiva');
readln(n);
writeln('vvedite kolichestvo stolbcov massiva');
readln(m);
for i:=1 to n do
for j:=1 to m do
begin
writeln('vvedite element, d[',i,',',j,']');
readln(d[i,j]);
end;
writeln;
writeln('ischodnaya matrica:');
for i:=1 to n do
begin
for j:=1 to m do
write(d[i,j]:4);
writeln;
end;
k:=0;
pol:=1;
for i:=1 to n do
for j:=1 to m do
begin
if d[i,j]>0 then begin k:=k+1; pol:=pol*d[i,j]; sr:=pol/k; end;
end;
write ('k=', k, ' pol= ', pol, ' sr= ', sr:3:3);
readkey;
end.
for j:=1 to m do begin
ga[j]:=1;
for i:=1 to n do if d[i,j]>0 then begin
k:=k+1;
ga[j]:=ga[j]*d[i,j]
end
end;
for j:=1 to m do begin
g:=1;
k:=0;
for i:=1 to n do if d[i,j]>0 then begin
k:=k+1;
g:=g*d[i,j]
end;
if k>0 then ga[j]:=exp(Ln(g)/k)
end;
Спасибо, с этой задачей вроде разобралась))
Только иногда у меня тут
if k>0 then ga[j]:=exp(Ln(g)/k)
Убедиться, что G строго больше нуля, при <= 0 функция Ln будет давать сбой.
В принципе, g может оказаться равным нулю, и в этом нет большого криминала.. Попробуй заменить эту строчку на такую:
if k>0 then if g>0 then ga[j]:=exp(Ln(g)/k) else ga[i]:=0
Только я что-то не пойму как же у меня g будет равно 0, если в столбце обязательно присутствуют положительные элементы?
program zadacha;
uses
crt;
const
n=5;
m=5;
type
a=array [1..n, 1..m] of integer;
b=array [1..m] of real;
var
d:a;
ga:b;
i,j,g,k:integer;
begin
randomize;
writeln('ischodnaya matrica:');
for i:=1 to n do
begin
for j:=1 to m do
begin
d[i,j]:=random(100)-20;
write(d[i,j]:4);
end;
writeln;
end;
for j:=1 to m do
begin
k:=0;
g:=1;
for i:=1 to n do
if d[i,j]>0 then
begin
k:=k+1;
g:=g*d[i,j];
end;
if k>0 then if g>0 then ga[j]:=exp(ln(g)/k) else ga[j]:=0;
end;
writeln;
writeln ('resultat: ');
for j:=1 to m do
write(ga[j]:3 :1,' ');
readkey;
end.
Вылет - на строке
g:=g*d[i,j];. Это банальное переполнение. Типа Integer не хватает для хранения произведения положительных чисел... Попробуй LongInt, если не поможет - Real...
О, вроде помогло))
Спасибо большое