Среднее арифметическое чисел (sr) – частное от деления их суммы (s) на их количество (k): sr=s/k, где k≠0. Таким образом, задача сводится к нахождению суммы и количества положительных элементов второй половины массива, стоящих на нечетных местах. Для решения данной задачи применим алгоритм, приведенный на рисунке 2.7, в соответствии с которым можно найти сумму и количество части элементов массива (второй половины), удовлетворяющих заданному условию (положительных элементов).
Определим номер in того элемента, с которого будем просматривать элементы второй половины массива. Поскольку по условию задачи обрабатываются элементы стоящие на нечетных местах то начальное значение in тоже должно быть четным (поскольку нумерация элементов массива начинается с нуля). Значение переменной in можно определить по формуле (2.3) где пара квадратных скобок [ ] определяет операцию вычисления целой части числа:
(2.3)
Значение ik совпадает с n, поскольку массив надо просматривать до конца. Параметр цикла i (номер элемента массива) необходимо изменять с шагом 2, чтобы обеспечить четные значения индекса (значения номеров элементов массива), т.е. i=i+2. Вычисление суммы и количества будем вычислять в одном цикле по параметру i, что значительно сократит алгоритм.
При вычислении среднего арифметического sr=s/k необходимо избежать возможного деления на ноль, поскольку если во второй половине массива на нечетных местах не окажется положительных элементов то k будет равным нулю. Например, для массива X={2, 0, –6, 7, 9, 0, –14, –5, 0, –4, –32}; n=11; in=[n/2]+1=6, в цикле по i будут просматриваться только выделенные элементы, а среди них нет положительных чисел, поэтому переменная k останется равной нулю. В графической схеме (рисунок 2.10) для этой цели используется ветвление, в котором проверяется условие k=0. Если это условие выполнено, то выводится сообщение о том, что среднее значение не может быть вычислено, в противном случае вычисляется и выводится значение sr.
В приведенном ниже фрагменте программы четность [n/2] определяется по остатку от деления n на 2 с помощью операции % – определения остатка целочисленного деления (примечание: результат операции целочисленный, т.к. n и 2 – целочисленные операнды).
Используемые переменные:
n – число элементов массива;a[] – статический массив;in – первый четный номер второй половины массива;s – сумма элементов массива удовлетворяющих условию;k – количество элементов массива удовлетворяющих условию;sr – среднее значение элементов массива удовлетворяющих условию; i – параметр цикла;
#include <stdio.h>
main()
{
float a[20];
int n, i , in, k;
float s, sr;
puts("Введите число элементов массива a");
scanf("%d",&n);
for (i=0;i<n;i++)
{ printf("Введите число a[%2d]=",i);
scanf("%f",&a[i]);
}
if ((n/2)%2==0) in=n/2;
else in=n/2+1;
s=0; k=0;
for(i=in;i<n;i+=2)
if(a[i]>0) { s+=a[i]; k++;}
puts("Массив a");
for(i=0;i<n;i++)
printf("a[%2d]=%6.2f \n", i, a[i]);
if (k==0)
puts("Среднее арифметическое вычислить нельзя!");
else
{
sr=s/k;
printf("Среднее ариф. полож. элементов на нечетных. местах второй полов. массива =%6.3f\n", sr); }
return(0);
}
Рисунок 2.10 Графическая схема и программа для примера 2.5
12.3.6. Вычисление произведения элементов массива
Формулы, по которым вычисляется произведение элементов массива, аналогичны формулам вычисления сумм:
, (2.4)
. (2.5)
Поэтому вычисление произведения элементов массива выполнятся по алгоритмам аналогичным вычислению суммы. Отличие заключается в том, что начальное значение произведения p должно быть равным 1, а в цикле по параметру i надо вычислять p=p*ai. Таким образом, если в графических схемах алгоритмов, рисунок 2.5 – 2.7 вместо s=0 и s=s+ai записать p=1 и p=p*ai, то получим алгоритмы вычисления произведения элементов массива.
Пример 2.6.
В одномерном массиве a размерностью n, вычислить среднее геометрическое ненулевых элементов массива.