Раздел: Задачи / Простейшие /
Разность между максимальным элементом и средним арифметическим значением
|
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Условие задачи 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
Таким образом, среднее арифметическое значение для отрицательных элементов массива вычисляется точно также, как и для положительных.
А теперь перейдём к решению задачи.
Вот здесь я рассказал о том, как можно найти наименьшее значение в массиве. Наибольший элемент можно найти подобным способом, поэтому в данной статье останавливаться на этом не буду.
Итак, что нам нужно сделать:
- Найти наибольший элемент в массиве.
- Найти все отрицательные значения в массиве и вычислить для них среднее арифметическое.
- Вычислить разность между наибольшим элементом массива и средним арифметическим отрицательных чисел.
Примеры программ на Паскале и С++.
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.
#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
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее... |
|
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |