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

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

Основы программирования 2.0 Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее...

Условие задачи 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;
}

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

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


Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Помощь в технических вопросах Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

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