Народ, помогите плиз, из полного бреда сделать рабочую прогу
В массивах R1..R8, T1..T6 найти среднее арифметическое положительных и среднее арифметическое отрицательных элементов (среди обоих массивов). Заменить последние элементы в массивах на максимальное среднее арифметическое.
ты б эти отступы сделал, заметил что begin-а не хватает...
compiler
29.06.2007 20:35
Цитата(Kaliban @ 26.06.2007 13:57)
...из полного бреда сделать рабочую прогу
вобщем я(с помощью volvo) тут накидал...
program exam;//а можно узнать, где такие экзамены?
type
m=array [0..10] of real ;//подставишь сваи размеры...
var
R,T:m;
sr1,sr2: real;
function Positive(const r:real):boolean;//проверяет является ли число положительным
beginif r>=0then Positive:=true else Positive:=false; //0 --положительное число
end;
function More(const A,B:real):real; //возвращает большее из двух чисел
beginif A>B then More:=A else More:=B;
end;
procedure SrArP( const ar:arrayof real; var sr:real); // можна организовать функцию...
var
i:integer;
sum:real;
begin
sum:=0;
for i:=Low(ar) to High(ar) doif Positive(ar[i]) then sum:=sum+ar[i];
sr:=sum/(High(ar) - Low(ar)+1)(*(i+1)*);//High(ar) - Low(ar), можна заменить на (i+1
end;
procedure SrArN(const ar:m; var sr : real);
var//...
begin//напишешь по аналогии...
end;
begin
SrArN(R, sr1); writeln(sr1);
SrArN(T, sr1); writeln(sr1);
SrArP(R, sr1); writeln(sr1);
SrArP(T, sr2); writeln(sr2);
R[High(r)]:=more(sr1,sr2); T[High(T)]:=R[High(r)];
readln;
read;
end.
вроде все...
мисс_граффити
29.06.2007 20:51
function Positive(const r:real):boolean;//проверяет является ли число положительным
begin
Positive:=(r>=0);
end;
compiler
29.06.2007 21:38
опять... в соседней теме такая-же ошибка...
спасибо что поправляете.
klem4
30.06.2007 15:28
Positive:=(r>=0);
C каких пор 0 - положительное число ?
volvo
30.06.2007 15:46
Это, вообще говоря, не единственная ошибка:
for i:=Low(ar) to High(ar) doif Positive(ar[i]) then sum:=sum+ar[i];
sr:=sum/(High(ar) - Low(ar)+1); // <--- Вот тут меня интересует ...
... с каких пор, чтобы найти среднее арифметическое всех положительных, надо найти сумму только положительных, и разделить ее на общее число элементов?
(про использование того, что в комментариях - я вообще молчу: по окончании цикла For в его управляющей переменной может быть что угодно, Борланд крайне НЕ рекомендует после такого цикла обращаться к его счетчику)
compiler
30.06.2007 21:48
Цитата(volvo @ 30.06.2007 11:46)
... с каких пор, чтобы найти среднее арифметическое всех положительных, надо найти сумму только положительных, и разделить ее на общее число элементов?
тогда пишем
a:integer; ... a:=0;
//можна и типизированной константой, но я их не люблю :)
...for i:=Low(ar) to High(ar) doif Positive(ar[i]) thenbegin sum:=sum+ar[i]; inc(a)end;
sr:=sum/a;
Цитата(volvo @ 30.06.2007 11:46)
(про использование того, что в комментариях - я вообще молчу: по окончании цикла For в его управляющей переменной может быть что угодно, Борланд крайне НЕ рекомендует после такого цикла обращаться к его счетчику)
поэтому оно и в комментариях :) , имхо, так легче разбиратся в программе. а потом лично у меня оптимизатор ничего такого не творил не разу...
насчет нуля -- >= , меняем на >
теперь из моего бреда делают рабочую прогу :)
volvo
30.06.2007 22:08
Цитата
тогда пишем
...
, передаем массив, в котором НЕТ положительных элементов, и наслаждаемся видом ошибки Divizion By Zero ... Ну, такие вещи надо ловить все-таки, или как? Вот тут как раз лишнее условие не помешает.
compiler
30.06.2007 22:20
Цитата(volvo @ 30.06.2007 18:08)
Вот тут как раз лишнее условие не помешает.
а ну да... а вообще надоела эта ошибка надо бы переопределить операцию деления
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.