Дан целочисленный массив из 200 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Напишите программу, которая выполняет выбраковку данных в массиве: 4) заменяет на 0 значения всех элементов, которые отличаются от среднего арифметического всех четных элементов более, чем на половину этого значения. Гарантируется, что хотя бы один чётный положительный элемент в массиве есть. Например, для исходного массива из восьми элементов:
6 1 6 10 11 7 2 9
программа должна вывести числа:
6 0 6 0 0 7 0 9
НА С++
#include <iostream>
#include <stdio.h> //Библиотека ввода/вывода из языка Си. Мне она нужна для printf()
#include <cstdlib> //Эта библиотека мне нужна для переключения на русский язык
#include <cmath> //Эта математическа библиотека нужна только для модуля
using namespace std;
int main()
{
system("chcp 1251 > nul"); //подключаем русский язык
int mas[200];
double Sum_chisel = 0, Kolichestvo = 1, Polovina;
mas[0] = 2; // Это наша гарантия того, что в массиве будет хотя бы один четный элемент
Sum_chisel += mas[0]; // Сразу прибавляем в нужную переменную
printf("mas[0]=%d \n", mas[0]); // Сразу ее пишем, чтобы не замарачиваться с этим в цикле
for(int i = 1; i < 200; i++)
{
mas[i] = rand()%10000;//создаем рандомное число
if (mas[i]%2 == 0 && mas[i]!=0) // Проверка на четность. Я не совсем понял, что делать с 0-ми. Так что сам подправишь
{
Sum_chisel += mas[i]; //Получаем сумму всех четных чисел
Kolichestvo++; //записываем их кол-во
}
printf("mas[%d]=%d \n", i, mas[i]); //выводим в консоль. Думаю, что ты знаешь Си поэтому пишу так, ибо удобнее
}
cout << endl; //просто отступ, чтобы выглядело норм
//Тут я пишу различну инфу. Ничего важного, так что можешь все удалить, кроме помеченного математических выражений
cout << "Сумма всех четных значений: " << Sum_chisel << endl;
cout << "Кол-во всех четных значений: " << Kolichestvo << endl;
Sum_chisel = Sum_chisel/Kolichestvo; // Мне лень было объявлять новую переменную, поэтому записываю в старую новое значение - среднее арифметическое
cout << "Среднее арифметичекое всех четных значений: " << Sum_chisel << endl;
Polovina = Sum_chisel/2; //Ну это половина от среднего арифметического. Фактически эту переменную можно убрать, но компу будет проще один раз высчитать, чем высчитывать это 200 раз
cout << "Половина от среднего арифметического: " << Polovina << endl;
cout << endl; //Опять просто отступ
for(int i = 0; i < 200; i++)
{
if(abs(mas[i]-Sum_chisel) > Polovina) mas[i] = 0; //Как работает: |значение_массива - среднее_ариф| и если значение этого выражения больше половины_среднего_ариф, то значение_массива = 0
printf("mas[%d]=%d \n", i, mas[i]);
}
system("pause > nul"); //Чтобы консоль сразу не закрылась. В Code Blocks она не закроется, но при запуске exe-шника окно закроется
return 0;
}
//вообще можно сделать лучше, но мне лень, сам догадаешься