Раздел: Задачи / Простейшие /

Разность между максимальным элементом и средним арифметическим значением

Условие задачи 2.98

Задача 2.98
Дан одномерный массив А неупорядоченных целых чисел. Вывести на экран разность между наибольшим элементом и средним арифметическим значением для отрицательных элементов. Если отрицательных элементов нет, то вывести на экран сообщение НЕТ.

Для начала вспомним, что такое среднее арифметическое значение.

Среднее арифметическое - это сумма всех чисел множества, делённая на их количество. Например, у нас есть 5 чисел: 1, 7, 10, 2, 15. Тогда среднее арифметическое будет равно:

(1 + 7 + 10 + 2 + 15) / 5 = 35 / 5 = 7

Может ли среднее арифметическое быть отрицательным числом

Конечно, может. Ведь числа в множестве могут быть как положительными, так и отрицательными. И, в зависимости от того, каким числом будет сумма этих чисел - положительным или отрицательным, среднее арифметическое будет иметь соответствующий знак. Например, у нас есть 5 чисел: 1, -7, 10, 2, -15. Тогда среднее арифметическое будет равно:

(1 - 7 + 10 + 2 - 15) / 5 = -9 / 5 = -1,8

Таким образом, среднее арифметическое значение для отрицательных элементов массива вычисляется точно также, как и для положительных.

А теперь перейдём к решению задачи.

Вот здесь я рассказал о том, как можно найти наименьшее значение в массиве. Наибольший элемент можно найти подобным способом, поэтому в данной статье останавливаться на этом не буду.

Итак, что нам нужно сделать:

  1. Найти наибольший элемент в массиве.
  2. Найти все отрицательные значения в массиве и вычислить для них среднее арифметическое.
  3. Вычислить разность между наибольшим элементом массива и средним арифметическим отрицательных чисел.

Примеры программ на Паскале и С++.

Решение задачи 2.98 на Паскале
 
program mytask;

//****************************************************************
// КОНСТАНТЫ
//****************************************************************
const
  MAX_A = 16;

//****************************************************************
// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
//****************************************************************
var
  i       : byte;            //Индекс
  NegNum  : byte = 0;        //Количество отрицательных элементов
  Arifm   : Single = 0.0;    //Среднее арифметическое
  MaxA    : byte;            //Индекс элемента с наибольшим значением
  MaxInt  : ShortInt;        //Наибольшее значение типа
  MinInt  : ShortInt;        //Наименьшее значение типа
  A       : array[1..MAX_A] of ShortInt;  //Массив

//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
//****************************************************************
begin
  MaxInt := High(MaxInt);   //Получить наибольшее значение типа
  MinInt := Low(MaxInt);    //Получить наименьшее значение типа
  randomize;                //Запустить генератор случайных чисел

  //Создать массив и вывести на экран
  for i := 1 to MAX_A do
    begin
      A[i] := random(MaxInt) - (MaxInt div 3);
      WriteLn(A[i]);
    end;

  //Найти наибольший элемент в массиве,
  //определить количество отрицательных элементов
  //и вычислить сумму отрицательных значений
  MaxInt := MinInt;
  for i := 1 to MAX_A do
    begin
      if A[i] >= MaxInt then
        begin
          MaxInt := A[i];
          MaxA := i;
        end;
      if A[i] < 0 then
        begin
          Inc(NegNum);
          Arifm := Arifm + A[i];
        end;
    end;

  //Вывести решение на экран
  WriteLn('Problem solution:');
  WriteLn('  The largest value in the array: ', MaxInt);
  WriteLn('  Index of the element with the highest value: ', MaxA);

  //Вычислить среднее арифметическое
  //и окончательно решить задачу
  if NegNum > 0 then
    begin
      Arifm := Arifm / NegNum;
      WriteLn('  Number of negative numbers: ', NegNum);
      WriteLn('  The arithmetic mean: ', Arifm:0:2);
      WriteLn('  Difference: ', (MaxInt - Arifm):0:2);
    end
  else
    WriteLn('!!! There are NO negative values !!!');

  WriteLn('The end. Press ENTER...');
  ReadLn;
end.
Решение задачи 2.98 на С++
#include <cstdlib>
#include <iostream>
#include <iomanip>      //!!! Подключить этот файл

using namespace std;

//****************************************************************
// КОНСТАНТЫ
//****************************************************************
const int MAX_A = 16; 

//****************************************************************
// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
//****************************************************************
unsigned char i;          //Индекс
unsigned char NegNum = 0; //Количество отрицательных элементов
float Arifm = 0.0;        //Среднее арифметическое
unsigned char MaxA;       //Индекс элемента с наибольшим значением
signed char MaxInt;       //Наибольшее значение типа
signed char MinInt;       //Наименьшее значение типа
signed char A[MAX_A];     //Массив 

//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
//****************************************************************
int main(int argc, char *argv[])
{
  MaxInt = SCHAR_MAX;     //Получить наибольшее значение типа
  MinInt = SCHAR_MIN;     //Получить наименьшее значение типа 
  srand(time(0));         //Запустить генератор случайных чисел
  
  //Создать массив и вывести на экран
  for(i = 0; i < MAX_A; i++)
  {
    A[i] = (rand() % MaxInt) - (MaxInt / 3);
    cout << int(A[i]) << endl;
  }
  
  //Найти наибольший элемент в массиве,
  //определить количество отрицательных элементов
  //и вычислить сумму отрицательных значений
  MaxInt = MinInt;
  for(i = 0; i < MAX_A; i++)
  {
    if (A[i] >= MaxInt)
    {
      MaxInt = A[i];
      MaxA = i;
    } 
    if (A[i] < 0)
    {
      NegNum++;
      Arifm = Arifm + A[i];
    } 
  }
  
  //Вывести решение на экран
  cout << "Problem solution:" << endl;
  cout << "  The largest value in the array: " 
       << int(MaxInt) << endl;
  cout << "  Index of the element with the highest value: " 
       << int(MaxA) << endl; 
  
  //Вычислить среднее арифметическое
  //и окончательно решить задачу
  if (NegNum > 0)
  {
    Arifm = Arifm / NegNum;
    cout << "  Number of negative numbers: " 
         << int(NegNum) << endl;
    cout << "  The arithmetic mean: " 
         << fixed << setprecision(2) << Arifm << endl;
    cout << "  Difference: " 
         << fixed << setprecision(2) << (MaxInt - Arifm) << endl;
  }
  else
    cout << "!!! There are NO negative values !!!" << endl;   
  
  system("PAUSE");
  return EXIT_SUCCESS;
}

Разность между максимальным элементом и средним арифметическим значением

ВНИМАНИЕ!
Если вам что-то осталось непонятно, то советую почитать книги “Основы программирования” и “Основы С++”.


Основы C++ Основы C++

C++ - это один из самых популярных языков программирования. Не важно, на каком языке программируете лично вы. Но, если вы хотя бы в общих чертах не знаете С++, то это большой пробел в вашем образовании, который надо восполнить как можно быстрее... Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика