Раздел: Задачи / Простейшие /
Разность между максимальным элементом и средним арифметическим значением
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Условие задачи 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), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |