dimaaristov
?>

Напишите программу в массиве с(14) найти сумму отрицательных и среднее арифметическое положительных элементов.

Информатика

Ответы

Ruslanovich1217
1. "Школьный" вариант (так учат в школах)
//PascalABC.Net 3.0, сборка 1064
const
  n=15;
var
  c:array[1..n] of integer;
  i,k:integer;
  sn,ap:longint;
begin
  Randomize;
  Writeln('Исходный массив');
  k:=0;
  for i:=1 to n do begin
    c[i]:=Random(51)-25;
    Write(c[i]:4);
    if c[i]<0 then sn:=sn+c[i]
    else
      if c[i]>0 then begin ap:=ap+c[i]; Inc(k) end
  end;
  Writeln;
  Writeln('Сумма отрицательных элементов равна ',sn);
  Writeln('Среднее арифметическое положительных элементов равно ',ap/k)
end.

Тестовое решение:
Исходный массив
  22  15  -5   4   7  -6  24  23 -25 -21 -10  21 -11  -4  22
Сумма отрицательных элементов равна -82
Среднее арифметическое положительных элементов равно 17.25

2. Современный вариант (а так в школах почему-то не учат)
//PascalABC.Net 3.0, сборка 1064
begin
  var c:=SeqRandom(15,-25,25);
  Writeln('Исходный массив'); Println(c);
  Writeln('Сумма отрицательных элементов равна ',c.Where(x->x<0).Sum);
  Writeln('Среднее арифметическое положительных элементов равно ',
    c.Where(x->x>0).Average)
end.

Тестовое решение:
Исходный массив
[21,13,16,-6,-5,-21,-23,10,14,5,-14,7,-10,-9,9]
Сумма отрицательных элементов равна -120
Среднее арифметическое положительных элементов равно 12.125
Khlistova1488
//PascalABC.NET
//Версия 3.3, сборка 1634 (14.02.2018)

begin
   var (n, k) := ReadInteger2('n,k->');
   var p := ArrGen(n, t -> t + 1); 
   var m := new integer[k, n div k];
   var sum := p.Sum div k;
   for var i := 0 to k - 1 do
   begin
      var m_sum := sum;
      m[i, 0] := p[0]; m_sum := m_sum - m[i, 0];
      p := p[1:];
      for var j := 1 to (n div k) - 1 do
      begin
         if m_sum - p.Last > 0 then begin m[i, j] := p.max;  m_sum := m_sum - p.Max; p := p[:p.IndexMax]; end
         else 
         begin
            if p.Where(t -> t = m_sum).Count = 1 then m[i, j] := m_sum;
            p := p.Where(t -> t <> m_sum).ToArray;
         end;                                                 
     end;
   end; 
   var t := true;
   for var i := 0 to m.RowCount - 2 do
     if (m.Row(i).sum <> m.Row(i + 1).Sum) or (p.Length <> 0) then begin t := false; break; end;
   if t then m.Println else 0.Println;
end.

Пример(1):
 n,k-> 8 2
   1   8   7   2
   3   6   5   4

Пример(2):
 n,k-> 6 3
   1   6
   2   5
   3   4
abahtina582
Program ryazantsev;
var n,k,i,b,sum:integer;
begin
readln(n,k);
sum:=trunc((1+n)/2*n); //Преобразование типа real к int, trunc можно безопасно использовать, т.к. сумма n членов арифметической последовательности целых чисел - всегда целое число
if sum mod k <> 0 then writeln(0)
else begin
for i:=1 to k do begin
b:=1;
while b<n/k do begin
write(i+b-1, ' ', n-i-b+2, ' ');
b:=b+k
end;
writeln()
end
end;
end.

Пример входных данных, при которых программа выведет ноль: 6 2

И ещё, задачка должна быть оценена явно больше, чем на пять )

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Напишите программу в массиве с(14) найти сумму отрицательных и среднее арифметическое положительных элементов.
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

Vasilevich
andreevaalisa
avdushinalizza1
horina12
KrisTinka
Михайлович Гуртовая929
pimenov5
Ramon22081983
Юрьевна174
Zeegofer
peshnoshamon
ivanandrieiev1984268
Irinalobanowa
websorokin
elena-novikova-1992