Помогите пожалуйста решить задачу по инфе!!
Задан одномерный массив Z(N) (N<=80). Все элементы, меньшие среднего
арифметического наибольшего и наименьшего элементов массива, заменить
на наименьший элемент, а большие среднего арифметического – на
наибольший элемент массива.
Нужно сделать текстовый пример
Несколько блок-схем
И листинг программы на языке с++
(Или хотя бы текстовый пример)
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main() {
cout << "N: ";
size_t n;
cin >> n;
vector<double> z(n);
cout << "Elements: ";
for (auto& x : z) cin >> x;
const auto min = *min_element(begin(z), end(z));
const auto max = *max_element(begin(z), end(z));
const auto avg = (min + max) / 2.0;
replace_if(begin(z), end(z), [avg](double x) { return x < avg; }, min);
replace_if(begin(z), end(z), [avg](double x) { return avg < x; }, max);
cout << "Elements:";
for (auto x : z) cout << ' ' << x;
cout.put('\n');
}Предположим, пользователь ввел размер массива N = 5.
Далее введены элементы массива Z: 4, 15, 2, 9, 6.
Сначала алгоритм должен найти минимальный и максимальный элементы. Пробегаем по массиву:
Наименьший элемент (MIN) здесь равен 2.
Наибольший элемент (MAX) здесь равен 15.
Затем считаем среднее арифметическое этих двух чисел.
Формула: (MIN + MAX) / 2.
Подставляем числа: (2 + 15) / 2 = 17 / 2 = 8.5.
Теперь самое главное. Мы снова проходим по массиву и сравниваем каждое число с 8.5.
Первый элемент 4. Он меньше 8.5, значит, заменяем его на MIN (на 2). Массив стал: 2, 15, 2, 9, 6.
Второй элемент 15. Он больше 8.5, значит, заменяем его на MAX (на 15). Тут ничего визуально не поменялось, так как он и так был максимумом.
Третий элемент 2. Он меньше 8.5, заменяем на MIN (на 2).
Четвертый элемент 9. Он больше 8.5, заменяем на MAX (на 15). Массив стал: 2, 15, 2, 15, 6.
Пятый элемент 6. Он меньше 8.5, заменяем на MIN (на 2).
Итоговый массив: 2, 15, 2, 15, 2.
Теперь насчет блок-схем.
Первая часть блок-схемы отвечает за инициализацию и поиск экстремумов.
Начало -> Ввод N -> Проверка N <= 80 (если нужно) -> Ввод массива Z[N] в цикле.
Далее идет блок поиска. Присваиваем начальные значения min = Z[0] и max = Z[0]. Запускаем цикл от 1 до N. Внутри ромб условия: Если Z[i] < min, то min = Z[i]. Следующий ромб: Если Z[i] > max, то max = Z[i]. Конец цикла поиска.
Вторая часть блок-схемы отвечает за замену и вывод.
Вычисляем среднее: avg = (min + max) / 2.
Запускаем новый цикл по массиву от 0 до N.
Внутри цикла ставим условие (ромб): Z[i] < avg?
Если Да: Z[i] = min.
Если Нет: идем ко второму условию (ромб). Z[i] > avg?
Если Да (во втором условии): Z[i] = max.
Если Нет (равно среднему): ничего не делаем или идем дальше.
Закрываем цикл.
Блок вывода измененного массива Z.
Конец.
Ну и код:
#include <iostream>
#include <vector> // Используем вектор для удобства, но можно и обычный массив
using namespace std;
int main() {
// Настройка локали для корректного отображения кириллицы, если нужно
setlocale(LC_ALL, "Rus");
int N;
cout << "Введите размер массива (N <= 80): ";
cin >> N;
// Проверка на допустимый размер
if (N > 80 || N <= 0) {
cout << "Неверный размер массива!" << endl;
return 1;
}
// Создаем массив (вектор) размера N
vector<int> Z(N);
// Ввод элементов
cout << "Введите элементы массива:" << endl;
for (int i = 0; i < N; i++) {
cin >> Z[i];
}
// Инициализируем min и max первым элементом
int min_val = Z[0];
int max_val = Z[0];
// Поиск минимального и максимального элементов
for (int i = 1; i < N; i++) {
if (Z[i] < min_val) {
min_val = Z[i];
}
if (Z[i] > max_val) {
max_val = Z[i];
}
}
// Вычисление среднего арифметического
// Важно умножить на 1.0 или использовать явное приведение,
// чтобы деление было вещественным
double avg = (min_val + max_val) / 2.0;
cout << "Min: " << min_val << ", Max: " << max_val << ", Avg: " << avg << endl;
// Замена элементов
for (int i = 0; i < N; i++) {
// Если элемент меньше среднего, меняем на min
if (Z[i] < avg) {
Z[i] = min_val;
}
// Если элемент больше среднего, меняем на max
else if (Z[i] > avg) {
Z[i] = max_val;
}
// Если элемент равен среднему, он остается без изменений
}
// Вывод результата
cout << "Преобразованный массив:" << endl;
for (int i = 0; i < N; i++) {
cout << Z[i] << " ";
}
cout << endl;
return 0;
}Абсорбент микрокрупичный.Там бесплатные. Лекции по ул.Крупской