Помощь - Поиск - Пользователи - Календарь
Полная версия: Массивы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Kaliban
Народ, помогите плиз, из полного бреда сделать рабочую прогу smile.gif

В массивах R1..R8, T1..T6 найти среднее арифметическое положительных и среднее арифметическое отрицательных элементов (среди обоих массивов).
Заменить последние элементы в массивах на максимальное среднее арифметическое.

использовать процедуру нада еще

Нажмите для просмотра прикрепленного файла
compiler
ты б эти отступы сделал, заметил что begin-а не хватает...
compiler
Цитата(Kaliban @ 26.06.2007 13:57) *
...из полного бреда сделать рабочую прогу smile.gif
вобщем я(с помощью volvo) тут накидал...

program exam;//а можно узнать, где такие экзамены?
type
m=array [0..10] of real ;//подставишь сваи размеры...
var
R,T:m;
sr1,sr2: real;

function Positive(const r:real):boolean;//проверяет является ли число положительным
begin
if r>=0 then Positive:=true else Positive:=false; //0 --положительное число
end;

function More(const A,B:real):real; //возвращает большее из двух чисел
begin
if A>B then More:=A else More:=B;
end;

procedure SrArP( const ar:array of real; var sr:real); // можна организовать функцию...
var
i:integer;
sum:real;
begin
sum:=0;
for i:=Low(ar) to High(ar) do if 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®]:=more(sr1,sr2); T[High(T)]:=R[High®];
readln;
read;
end.

вроде все...
мисс_граффити
function Positive(const r:real):boolean;//проверяет является ли число положительным
begin
Positive:=(r>=0);
end;
compiler
опять... в соседней теме такая-же ошибка...

спасибо что поправляете.
klem4
Positive:=(r>=0);


C каких пор 0 - положительное число ?
volvo
Это, вообще говоря, не единственная ошибка:

	for i:=Low(ar) to High(ar) do if Positive(ar[i]) then sum:=sum+ar[i];
sr:=sum/(High(ar) - Low(ar)+1); // <--- Вот тут меня интересует ...

... с каких пор, чтобы найти среднее арифметическое всех положительных, надо найти сумму только положительных, и разделить ее на общее число элементов?

(про использование того, что в комментариях - я вообще молчу: по окончании цикла For в его управляющей переменной может быть что угодно, Борланд крайне НЕ рекомендует после такого цикла обращаться к его счетчику)
compiler
Цитата(volvo @ 30.06.2007 11:46) *
... с каких пор, чтобы найти среднее арифметическое всех положительных, надо найти сумму только положительных, и разделить ее на общее число элементов?
тогда пишем
	a:integer; ... a:=0;
//можна и типизированной константой, но я их не люблю :)
...for i:=Low(ar) to High(ar) do if Positive(ar[i]) then begin sum:=sum+ar[i]; inc(a)end;
sr:=sum/a;

Цитата(volvo @ 30.06.2007 11:46) *
(про использование того, что в комментариях - я вообще молчу: по окончании цикла For в его управляющей переменной может быть что угодно, Борланд крайне НЕ рекомендует после такого цикла обращаться к его счетчику)
поэтому оно и в комментариях :) , имхо, так легче разбиратся в программе. а потом лично у меня оптимизатор ничего такого не творил не разу...

насчет нуля -- >= , меняем на >

теперь из моего бреда делают рабочую прогу :)
volvo
Цитата
тогда пишем
...

, передаем массив, в котором НЕТ положительных элементов, и наслаждаемся видом ошибки Divizion By Zero ... Ну, такие вещи надо ловить все-таки, или как? Вот тут как раз лишнее условие не помешает.
compiler
Цитата(volvo @ 30.06.2007 18:08) *
Вот тут как раз лишнее условие не помешает.
а ну да... а вообще надоела эта ошибка надо бы переопределить операцию деления smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.