@dmitrysergeevich198

Как исправить код задания с массивом?

Задание: В одномерном массиве, состоящем из N вещественных элементов вычислить произведение элементов массива, расположенных между максимальным и минимальным элементом.

Ошибка в том, что считает вместе с минимальным элементом

#include "pch.h"
#include <cstdlib>
#include <locale>
#include <string>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

int main(void)
{

    setlocale(LC_ALL, "Russian");
    int a[100], max, min, imax, imin, Proizvedenie = 1;
    int i, N;
    srand(time(0));
    system("cls");

    cout << "Введите колличество элементов:";
    cin >> N;

    for (i = 0; i < N; i++)
        a[i] = rand() % 150 - 50;

    cout << "\n Исходный массив:\n";
    for (i = 0; i < N; i++)
        cout << a[i] << " ";

    max = a[i];
    imax = 0;
    for (i = 1; i < N; i++)
        if (max < a[i])
        {
            max = a[i];
            imax = i;
        }
    min = a[0];
    imin = 0;
    for (i = 1; i < N; i++)
        if (min > a[i])
        {
            min = a[i];
            imin = i;
        }

    for (int i = std::min(imax, imin); i < std::max(imax, imin); ++i)
    {
    
    Proizvedenie *= a[i];
    }
    cout << "\n Произведение: = " << Proizvedenie;

    system("pause");
    return 0;
}
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
myjcom
@myjcom Куратор тега C++
Ошибка в том, что считает вместе с минимальным элементом

???
int i = std::min(imax, imin) + 1
кроме того
вещественных

и это не int a[100]
и результат может не поместиться в Proizvedenie

up:
#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>
#include <iterator>
using namespace std;

auto mulM = [](auto const& ctx)
{
  auto [lo, hi] = minmax_element(begin(ctx), end(ctx));
  return (distance(min(lo, hi), max(lo, hi)) < 2)
         ? 0
         : accumulate(min(lo, hi) + 1, max(lo, hi), 1, multiplies<double>());
};

int main()
{
    vector<double> v = {2, 5, 42, 7, 81, 21, 3, 2, 7};
    auto r = mulM(v);
    cout << r;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы