Вывести элементы массива, которые больше среднего арифметического

Задача

Дан одномерный массив. Найти среднее арифметическое его элементов. Вывести на экран только те элементы массива, которые больше найденного среднего арифметического.

Решение

Переменные:

  • a - массив;
  • sum - сумма элементов массива;
  • avrg - среднее значение.

Пример алгоритма решения задачи:

  1. Заполняем массив (например, случайными числами).
  2. Переменной sum изначально присваиваем значение 0.
  3. Вычисляем сумму элементов, в цикле перебирая массив и добавляя значение каждого к переменной sum.
  4. Находим среднее арифметическое, путем деления суммы на количество элементов (хранится в константе N).
  5. Выводим на экран весь массив и найденное среднее значение. (Это не обязательно, но необходимо для удобства.)
  6. Снова в цикле перебираем массив. Если очередной элемент больше среднего арифметического, то выводим этот элемент на экран.
const N = 10;
var
    a: array[1..N] of integer;
    i: byte;
    avrg: real;
    sum: integer;
begin
    randomize;
    for i:=1 to N do a[i]:=random(50)+1;
    sum := 0;
    for i:=1 to N do sum := sum + a[i];
    avrg := sum/N;
 
    // весь массив
    for i:=1 to N do write(a[i]:3);
    writeln;
 
    writeln('Среднее арифм.: ',avrg:4:2);
 
    // больше avrg    
    for i:=1 to N do if a[i]>avrg then write(a[i]:3);
    writeln;
end.

Пример выполнения программы:

  7 36 21 48 33 46  7 17 19 41
Среднее арифм.: 27.50
 36 48 33 46 41

Как разновидность подобной задачи может быть такая:

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

Для ее решения необходимо не выводить элементы на экран, а суммировать их. После чего вывести значение суммы.

const N = 10;
var
    arr: array[1..N] of real;
    i: byte;
    arg, sum: real;
begin
    randomize;
    arg := 0;
    for i:=1 to N do begin
        arr[i] := random();
        write(arr[i]:5:2);
        arg := arg + arr[i];
    end;
    arg := arg / N;
    writeln;
    writeln('Среднее арифметическое: ', arg:5:2);
    sum := 0;
    for i:=1 to N do begin
        if arr[i] > arg then
            sum := sum + arr[i];
    end;
    writeln('Сумма элементов, превосходящих среднее арифметическое: ', sum:5:2);
end.

Тема

Одномерные массивы

Уровень

Простые задачи

Последняя редакция

Комментарии

С клавиатуры вводится натуральное число n. За ним последовательно вводятся данные о росте n учащихся класса. Определите средний рост учащихся всего класса. Решить задачу без использования массивов.

var
    i,n, growth: byte;
    sum: real;
 
begin
    write('Количество учащихся: ');
    readln(n);
 
    sum := 0;
    for i:=1 to n do begin
        write('Рост ', i, '-го ученика: ');
        readln(growth);
        sum := sum + growth;
    end;
 
    writeln('Средний рост: ', sum / n:7:2);
readln;
end.