profile
Опубликовано 6 лет назад по предмету Информатика от dryukovyura201

Ввести одномерный массив X(N). Определить в нем среднее арифметическое отрицательных элементов, стоящих после первого элемента, большего 10 и среднее арифметическое всех элементов до этого элемента. Выдать на печать массив и вычисленные средние арифметические значения или сообщения о невозможности их вычислить с указанием конкретных причин.

  1. Ответ
    Ответ дан Аккаунт удален
    Алгоритм решения предполагает, что если в массиве не будет найдено элемента, большего 10, то позиции этого элемента не существует и средние арифметические членов, располагающихся как после этой позиции, так и до нее, тоже не могут существовать.

    "Современное решение"
    // PascalABC.NET 3.0, сборка 1076
    begin
      var n:=ReadInteger('Количество элементов в массиве: ');
      var x:=ArrRandom(n,-20,20);
      Writeln('Массив Х'); x.Println;
      Write('Ср. арифм. отрицательных элементов после первого, большего 10: ');
      var a1:=x.SkipWhile(x->x<=10).Where(x->x<0);
      if a1.Count=0 then Writeln('пусто')
      else Writeln(a1.Average);
      Write('Ср. арифм. всех элементов до первого, большего 10: ');
      a1:=x.TakeWhile(x->x<=10);
      if a1.Count=0 then Writeln('пусто')
      else Writeln(a1.Average)
    end.

    Тестовые просчеты:
    Количество элементов в массиве: 15
    Массив Х
    -11 11 16 -7 11 -8 10 -16 15 -15 -10 -8 -6 -13 -17
    Ср. арифм. отрицательных элементов после первого, большего 10: -11.1111111111111
    Ср. арифм. всех элементов до первого, большего 10: -11

    Количество элементов в массиве: 13
    Массив Х
    14 -9 1 2 12 -15 0 16 -19 16 -11 -15 -12
    Ср. арифм. отрицательных элементов после первого, большего 10: -13.5
    Ср. арифм. всех элементов до первого, большего 10: пусто

    Количество элементов в массиве: 5
    Массив Х
    -11 2 0 15 7
    Ср. арифм. отрицательных элементов после первого, большего 10: пусто
    Ср. арифм. всех элементов до первого, большего 10: -3

    Количество элементов в массиве: 3
    Массив Х
    15 10 8
    Ср. арифм. отрицательных элементов после первого, большего 10: пусто
    Ср. арифм. всех элементов до первого, большего 10: пусто

    "Школьный вариант решения"
    // PascalABC.NET 3.0, сборка 1076
    const
      nmax=50; { максимальное кол-во элементов }
    var
      i,n,p,s1,s2,k2:integer;
      x:array[1..nmax] of integer;
    begin
      Write('Количество элементов в массиве: '); Read(n);
      Randomize;
      Writeln('Массив Х');
      p:=0;
      for i:=1 to n do begin
        x[i]:=Random(41)-20;
        Write(x[i],' ');
        if p=0 then
          if x[i]>10 then p:=i;
        end;
      Writeln;
      Write('Ср. арифм. отрицательных элементов после первого, большего 10: ');
      if p=0 then Writeln('пусто')
      else begin
        s2:=0; k2:=0;
        for i:=p+1 to n do
          if x[i]<0 then begin s2:=s2+x[i]; Inc(k2) end;
        if k2=0 then Writeln('пусто')
        else Writeln(s2/k2)
      end;
      Write('Ср. арифм. всех элементов до первого, большего 10: ');
      if p=0 then Writeln('пусто')
      else begin
        s1:=0;
        for i:=1 to p-1 do s1:=s1+x[i];
        Writeln(s1/(p-1))
      end
    end. 

    Этот вариант существенно длиннее, но главное, что нужно долго вглядываться в текст программы, чтобы понять, что именно она делает.
Самые новые вопросы