danulpopov// PascalABC.NET 3.3, сборка 1627 от 27.01.2018 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger('n='); var a:=ArrRandom(n,-50,50); a.Println; var (imax,half):=(a.IndexMax,n div 2); if n.IsEven then // все хорошо if imax>=half then begin var sn:=a[half:].Where(t->t<0).Sum; if sn=0 then Writeln('Во второй половине вектора нет отрицательных') else Writeln('Сумма равна ',sn) end else Writeln('Среднее арифметическое равно ',a[:half].Average) else // не учитывать средний if imax=half then Writeln('Максимальный элемент попал в неучитываемую точку') else if imax>half then begin var sn:=a[half+1:].Where(t->t<0).Sum; if sn=0 then Writeln('Во второй половине вектора нет отрицательных') else Writeln('Сумма равна ',sn) end else Writeln('Среднее арифметическое равно ',a[:half].Average) end.
0 votes Thanks 1
danulpopov
а где сказано, что мы ее отбрасываем при поиске максимума?
danulpopov
фуф, ну не пугайте так больше, а то меня чуть инфарк не хватил, столько кода переписывать
danulpopov
"Если мы середину никуда"... это доп.условие я думаю
Answers & Comments
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger('n=');
var a:=ArrRandom(n,-50,50); a.Println;
var (imax,half):=(a.IndexMax,n div 2);
if n.IsEven then // все хорошо
if imax>=half then begin
var sn:=a[half:].Where(t->t<0).Sum;
if sn=0 then Writeln('Во второй половине вектора нет отрицательных')
else Writeln('Сумма равна ',sn)
end
else Writeln('Среднее арифметическое равно ',a[:half].Average)
else // не учитывать средний
if imax=half then
Writeln('Максимальный элемент попал в неучитываемую точку')
else
if imax>half then begin
var sn:=a[half+1:].Where(t->t<0).Sum;
if sn=0 then Writeln('Во второй половине вектора нет отрицательных')
else Writeln('Сумма равна ',sn)
end
else Writeln('Среднее арифметическое равно ',a[:half].Average)
end.