Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ ошибка в программе

Автор: Булавка 5.06.2006 2:24

программа считает все когда имеет вид :

Код
Program mass;
uses crt;
const n=30;
    var
i,p,k,S,C:integer;
Sa,Sg:real;
A:array[1..n] of integer;
  BEGIN

writeln ('введите массив А через пробел');
for i:=1 to n do
read (A[i]);

p:=0; S:=0;
for i:=1 to n do
   if  A[i]<0 then  
   begin
S:=S_A[i];
p:=p+1;
Sa:=S/p;
    end;

k:=0; C:=1;
for i:=1 to n do
   if A[i]>0 then
   begin
  C:=C*A[i];
  k:=k+1;
end;
Sg:=exp(ln(C)/k);




for i:=1 to n do
if A[i]<=-5 then
A[i]:=abs(A[i]);
for i:=1 to n do
write (A[i]:3);
writeln;

writeln ('среднее арифметическое отрицательных элементов Sa=', Sa:4);
writeln ('среднее геометрическое положительных элементов Sg=',Sg:4);
repeat until keypressed

END.



преподаватель сказал что в куске
k:=0; C:=1;
for i:=1 to n do
if A[i]>0 then
begin
C:=C*A[i];
k:=k+1;
end;
Sg:=exp(ln©/k);
Sg надо перед эндом впихнуть. но так ничего не работает. может вы подскажите как записать чтобы все по правилам?

Автор: volvo 5.06.2006 2:31

Цитата
Sg надо перед эндом впихнуть.
Бред... Все правильно у тебя считается... Для подсчета среднего геометрического как раз и надо в цикле перемножить все элементы, и ПОСЛЕ цикла вычислить корень нужной степени...

А вот Sa напрасно внутри цикла изменяется ... По правилам его бы надо вынести:
for i:=1 to n do
if A[i]<0 then begin
S:=S+A[i];
p:=p+1;
end;
Sa:=S/p;

Автор: Булавка 5.06.2006 2:44

спасибо большое! очень признательна