Top.Mail.Ru
Ответы
Аватар пользователя
sorbet_1713
10мес
Изменено

Помогите пожалуйста решить задачу по инфе!!

Задан одномерный массив Z(N) (N<=80). Все элементы, меньшие среднего

арифметического наибольшего и наименьшего элементов массива, заменить

на наименьший элемент, а большие среднего арифметического – на

наибольший элемент массива.

Нужно сделать текстовый пример

Несколько блок-схем

И листинг программы на языке с++

(Или хотя бы текстовый пример)

По дате
По рейтингу
Аватар пользователя
n_veselukhaИскусственный интеллект
10мес
1234567891011121314151617181920
#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');
}
Аватар пользователя
vertoliotov_625Тролль
10мес
Изменено

Предположим, пользователь ввел размер массива 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.
Конец.

Ну и код:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
#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;
}
Аватар пользователя
adinsert_89Тролль
10мес

Абсорбент микрокрупичный.Там бесплатные. Лекции по ул.Крупской



Видео по теме