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

Помогите пожалуйста разобраться ,в чем причина проблемы. Найти первый положительный и последний отрицательный элементы получилось(хоть и сделал это замудренно), а вот когда дошло дело до нахождения произведения ,тут пошли трудности,и я не знаю , в чем может быть причина

#include <iostream>
#include <time.h>
#include <stdio.h>
#include <conio.h>
using namespace std;
#define N 6
int main()
{
    setlocale(LC_ALL, "ru");
    srand(time(NULL));
    int mass[N];
    //Заполняем массив и выводим на экран
    for (int i = 0; i < N; ++i)
    {
        mass[i] = rand() % 100;
        cout << mass[i] << "\t";
    }

    unsigned int proizv = 1;
    int first_plus, last_minus;
    //Ищем первый положительный элемент массива
    for (int i = 0; i < N; ++i)
        if (mass[i] % 2 == 0)
        {
            cout << "\nПервый положительный элемент: " << mass[i] << endl;
            first_plus = i;
            break;
        }
    //Иверсируем массив ,для нахождения последнего отрицательного элемента
    for (int i = 0; i < (N / 2); i++) {
        int c = mass[i];
        mass[i] = mass[N - 1 - i];
        mass[N - 1 - i] = c;
    }
    //Ищем последний отрицательный элемент массива 
    for (int i = 0; i < N; ++i)
        if (mass[i] % 2 != 0)
        {
            cout << "\nПоследний отрицательный элемент: " << mass[i] << endl;
            last_minus = i;
            break;
        }

    //Приводим массив в изначальный вид
    for (int i = 0; i < (N / 2); i++) {
        int c = mass[i];
        mass[i] = mass[N - 1 - i];
        mass[N - 1 - i] = c;
    }
    //!!!!!ТУТ НАЧИНАЕТСЯ ПРОБЛЕМА!!!!!!
    //Сортируем...
    for (int i = first_plus + 1;i< last_minus; i++)
    {
        proizv *= mass[i];
    }
        
    cout <<"\nПроизведение нужных элементов: "<< proizv << endl;

    system("pause");
    return 0;
}

Консоль: введите сюда описание изображения


Ответы (1 шт):

Автор решения: vlad9i2
  • Во-первых у вас в коде находится первое положительное число последнее нечётное. Чтобы находить первое положительное условие должно быть mas[i] > 0.

  • Во-вторых у вас неправильный индекс последнего отрицательного

  • В-третьих операция логического и в С обзначается как &&, так что вместо and следует написать &&

      unsigned int proizv = 1;
      int first_plus, last_minus;
      //Ищем первый положительный элемент массива
      for (int i = 0; i < N; ++i)
          if (mass[i] > 0)
          {
              cout << "\nПервый положительный элемент: " << mass[i] << endl;
              first_plus = i;
              break;
          }
      //Ищем последний отрицательный элемент массива 
      for (int i = N - 1; i >= 0; --i) {
          if (mass[i] < 0)
          {
              last_minus = i;
          }
      }
    
      for (int i = first_plus + 1 ; i < last_minus; i++)
      {
          proizv *= mass[i];
      }
      // Если last_minus раньше first_plus:
      for (int i = last_minus + 1 ; i < first_plus; i++)
      {
          proizv *= mass[i];
      }
      cout <<"\nПроизведение нужных элементов: "<< proizv << endl;
    
      system("pause");
      return 0;
    
→ Ссылка