Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
4 / 3 / 0
Регистрация: 12.01.2020
Сообщений: 264

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

26.02.2020, 18:27. Показов 2372. Ответов 17

Студворк — интернет-сервис помощи студентам
Задание:
Найти сумму элементов массива, расположенных между первым и вторым отрицательными элементами.

Я не понимаю что от меня хочет преподаватель
Мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
using namespace std;
 
int main()
{
    double a;
    double sum = 0;
    int n;
    int negs = 0;
    cout << "Enter size massive: ";
    cin >> n;
    int *arr = new int[n];
    
    for (int i = 0; i < n; i++)
    {
        cout << "Number " << i+1 << ": ";
        cin>>arr[i];
        if (arr[i] > 0)
        {
            sum = sum + arr[i];
            ++negs;
        }
}
    if (negs != 2)
        cout << "Error" << endl;
    else if (negs < 2)
        cout << "Error" << endl;
    else
        cout << "Result: " << sum << endl;
 
return 0;
}
Замечания преподавателя:

1) Во первых, нет очистки памяти.

2) По заданию, необходимо было вычислить сумму первым и вторым отрицательным элементами, если они присутствуют...


P.S
1) Пробовал делать очистку памяти, но тогда код не правильно работал.

2) Второй пункт из замечаний преподавателя я вообще НЕ ПОНИМАЮ. Объясните пожалуйста
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.02.2020, 18:27
Ответы с готовыми решениями:

Найти сумму элементов массива, расположенных между первым и вторым отрицательными элементами
В одномерном массиве,состоящем из n вещественных элементов, вычислить : 1.Номер минимального элемента массива 2.Сумма элементов массива,...

Найти сумму элементов массива расположенных между первым и вторым отрицательными элементами
Условие задачи: Найти сумму элементов массива, расположенных между первым и вторым отрицательными элементами. Мой код: #include...

Найти сумму элементов массива, расположенных между первым и вторым отрицательными элементами
Здравствуйте, помогите пожалуйста закончить эту программу Код C++ #include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; #include...

17
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
26.02.2020, 18:33

Не по теме:

Цитата Сообщение от kitkat1000 Посмотреть сообщение
Я не понимаю что от меня хочет преподаватель
Что бы ты учился думать головой


Цитата Сообщение от kitkat1000 Посмотреть сообщение
1) Пробовал делать очистку памяти, но тогда код не правильно работал.
Покажи
Цитата Сообщение от kitkat1000 Посмотреть сообщение
2) Второй пункт из замечаний преподавателя я вообще НЕ ПОНИМАЮ. Объясните пожалуйста
Находишь первый отриц. элемент, находишь последний, и складываешь все что между ними
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
26.02.2020, 18:50
Цитата Сообщение от zayats80888 Посмотреть сообщение
находишь последний
находишь следующий
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 02:30
kitkat1000, это:
Цитата Сообщение от kitkat1000 Посмотреть сообщение
if (arr[i] > 0)
положительные
Цитата Сообщение от kitkat1000 Посмотреть сообщение
2) По заданию, необходимо было вычислить сумму первым и вторым отрицательным элементами, если они присутствуют...
найдите индексы первого и второго отрицательных (сначала инициализируйте переменные для индексов числом, которое индексы принимать не могут, например -1)
C++
1
2
3
4
int index_first_neg=-1, index_second_neg=-1;
if (arr[i] < 0) neg++;
if (neg==1) index_first_neg=i;
else if (neg==2) index_second_neg=i;
если первый индекс не -1 и второй индекс не -1 как минимум 2 отрицательных имеются, можно находить сумму между ними обычным циклом for
C++
1
2
for (int i = index_first_neg+1;  i < index_second_neg; i++)
sum+=arr[i];
перед этим можете проверить не находятся ли первые 2 отрицательных рядом тогда можно вывести сообщение что элементов между ними нет
Цитата Сообщение от kitkat1000 Посмотреть сообщение
нет очистки памяти
освобождения памяти. если объявлен динамический массив, после того как он уже не нужен - освободите память:
C++
1
delete[]arr;
Добавлено через 9 минут
массив по условию не обязательно целочисленный => тип double
0
4 / 3 / 0
Регистрация: 12.01.2020
Сообщений: 264
27.02.2020, 11:41  [ТС]
zss, составьте мне пожалуйста код, а то у меня ничего не получается
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 12:41
kitkat1000, что нужно сделать, я Вам сообщил. прочитайте ещё раз и используйте эти строки в коде.
0
4 / 3 / 0
Регистрация: 12.01.2020
Сообщений: 264
27.02.2020, 12:48  [ТС]
Yetty, прочитал не один раз, но не понял. Вы мне напишите весь код, а я сам разберусь.
Простите что утруждаю, но я сам не могу добиться желаемого результата.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 13:03
kitkat1000, что именно не понятно ?

допустим есть массив: 3 4 -4 1 5 2 2 -6 7 8 -3 индекс первого отрицательного 2, второго 7. как их найти: сделать цикл по массиву и организовать счётчик отрицательных. когда значение счётчика равно 1 запомнить первый индекс, когда значение счётчика 2 запомнить второй индекс.

затем считаете сумму элементов от индекса 2+1 до индекса 7-1

это уберите:
Цитата Сообщение от kitkat1000 Посмотреть сообщение
if (negs != 2)
        cout << "Error" << endl;
так как отрицательных может быть больше чем два

Добавлено через 3 минуты
Цитата Сообщение от kitkat1000 Посмотреть сообщение
Простите что утруждаю, но я сам не могу добиться желаемого результата
так Вы ничего не делаете. исправляйте код и сбрасывайте что получилось.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
27.02.2020, 13:27
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  std::mt19937_64 mt(std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::system_clock::now().time_since_epoch()).count());
  std::uniform_int_distribution<int> dist(-3, 20);
  std::vector<int> v(20);
  std::generate(v.begin(), v.end(), std::bind(dist, mt));
  int sum = 0;
  bool started = false, done = false;
  for(const auto& num : v)
  {
    if (num < 0)
    {
      if (started)
      {
        done = true; break;
      }
      started = true;
    }
    else
      if (started)
        sum += num;
  }
 
  std::copy(v.cbegin(), v.cend(), std::ostream_iterator<int>(std::cout, " "));
  if (done)
    std::cout<<"\nSum: "<<sum<<std::endl;
  else
    std::cout<<"\nNo range found."<<std::endl;
Code
1
2
3
4
5
6
7
8
12 -2 12 5 17 4 8 -2 8 17 20 10 1 16 1 7 19 -2 18 3
Sum: 46
 
-3 16 20 17 19 19 9 1 1 16 9 19 1 7 7 7 3 3 15 1
No range found.
 
-2 6 5 6 1 6 0 13 -3 17 20 13 15 0 20 -3 8 -1 11 1
Sum: 37
0
4 / 3 / 0
Регистрация: 12.01.2020
Сообщений: 264
27.02.2020, 13:28  [ТС]
Yetty,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
 
using namespace std;
 
int main()
{
    double a;
    double sum = 0;
    int n;
    int neg = 0;
    int index_first_neg=-1; 
    int index_second_neg=-1;
    cout << "Enter size massive: ";
    cin >> n;
    int *arr = new int[n];
    
    for (int i = 0; i < n; i++)
    {
        cout << "Number " << i+1 << ": ";
        cin>>arr[i];
        if (arr[i] > 0)
        {
            if (neg==1)
                index_first_neg=i;
            else if (neg==2)
                index_second_neg=i;
            sum = sum + arr[i];
            ++neg;
        }
}
    for (int i = index_first_neg+1;  i < index_second_neg; i++)
    {
        sum+=arr[i];
    }
    
    if (neg < 2)
        cout << "Error" << endl;
    else
        cout << "Result: " << sum << endl;
delete[]arr;
return 0;
}
-----------------------------------------
Скриншот 1 - должно быть Error.
Скриншот 2 - должно быть Error.
Миниатюры
Найти сумму элементов массива расположенных между первым и вторым отрицательными элементами   Найти сумму элементов массива расположенных между первым и вторым отрицательными элементами  
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 13:37
kitkat1000, Вам сколько нужно повторить ? это:
Цитата Сообщение от kitkat1000 Посмотреть сообщение
if (arr[i] > 0)
Цитата Сообщение от Yetty Посмотреть сообщение
положительные
Цитата Сообщение от Yetty Посмотреть сообщение
массив по условию не обязательно целочисленный => тип double
строку 27 уберите

Добавлено через 5 минут
Цитата Сообщение от kitkat1000 Посмотреть сообщение
if (neg < 2)
        cout << "Error" << endl;
это не ошибка. просто выведите сообщение что отрицательных в массиве меньше двух.
0
4 / 3 / 0
Регистрация: 12.01.2020
Сообщений: 264
27.02.2020, 13:38  [ТС]
Yetty, вот что получилось
Миниатюры
Найти сумму элементов массива расположенных между первым и вторым отрицательными элементами  
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 13:40
Цитата Сообщение от kitkat1000 Посмотреть сообщение
вот что получилось
зачем скрины без кода ? вносите исправления и сбрасывайте код
0
4 / 3 / 0
Регистрация: 12.01.2020
Сообщений: 264
27.02.2020, 13:44  [ТС]
Yetty,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
 
using namespace std;
 
int main()
{
    double a;
    double sum = 0;
    int n;
    int neg = 0;
    int index_first_neg=-1; 
    int index_second_neg=-1;
    cout << "Enter size massive: ";
    cin >> n;
    double *arr = new double[n];
    
    for (int i = 0; i < n; i++)
    {
        cout << "Number " << i+1 << ": ";
        cin>>arr[i];
        if (arr[i] > 0)
        {
            if (neg==1)
                index_first_neg=i;
            else if (neg==2)
                index_second_neg=i;
            ++neg;
        }
}
    for (int i = index_first_neg+1;  i < index_second_neg; i++)
    {
        sum+=arr[i];
    }
    
    
        cout << "Result: " << sum << endl;
delete[]arr;
return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 13:58
kitkat1000, Вы прикалываетесь ? В ТРЕТИЙ РАЗ ПОВТОРЯЮ:
это положительные значения:
Цитата Сообщение от kitkat1000 Посмотреть сообщение
if (arr[i] > 0)
а Вам нужно работать с отрицательными

строки
Цитата Сообщение от Yetty Посмотреть сообщение
if (neg < 2)
        cout << "Error" << endl;
не убирайте, просто вместо Error напишите
Цитата Сообщение от Yetty Посмотреть сообщение
отрицательных в массиве меньше двух
перед строкой 30 добавьте строку:
Цитата Сообщение от Yetty Посмотреть сообщение
если первый индекс не -1 и второй индекс не -1
Добавлено через 5 минут
счётчик увеличивайте ДО проверки, а не после проверки
Цитата Сообщение от Yetty Посмотреть сообщение
if (arr[i] < 0) neg++;
if (neg==1) index_first_neg=i;
else if (neg==2) index_second_neg=i;
0
4 / 3 / 0
Регистрация: 12.01.2020
Сообщений: 264
27.02.2020, 14:13  [ТС]
Yetty, всё вроде бы получилось, проверьте пожалуйста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
 
using namespace std;
 
int main()
{
    double a;
    double sum = 0;
    int n;
    int neg = 0;
    int index_first_neg=-1;
    int index_second_neg=-1;
    cout << "Enter size massive: ";
    cin >> n;
    int *arr = new int[n];
    
    for (int i = 0; i < n; i++)
    {
        cout << "Number " << i+1 << ": ";
        cin>>arr[i];
        if (arr[i] < 0)
        {
            ++neg;
            if (neg==1)
                index_first_neg=i;
            else if (neg==2)
                index_second_neg=i;
        }
}
    for (int i = index_first_neg+1;  i < index_second_neg; i++)
    {
        sum+=arr[i];
    }
    if (neg < 2)
        cout << "Error" << endl;
    else
        cout << "Result: " << sum << endl;
delete[]arr;
return 0;
}
0
4 / 3 / 0
Регистрация: 12.01.2020
Сообщений: 264
27.02.2020, 14:35  [ТС]
Yetty, только есть одно но, как сделать вывод сообщения об ошибке вместо нуля
Миниатюры
Найти сумму элементов массива расположенных между первым и вторым отрицательными элементами  
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 15:34
Лучший ответ Сообщение было отмечено kitkat1000 как решение

Решение

kitkat1000, да скобки нужны после if, за это Вам плюс решил не инициализировать -1 так как есть счётчик, это в данной задаче не обязательно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
using namespace std;
 
int main()
{
    int n, neg=0, i1=0, i2=0;
    cout << "n="; cin >> n;
 
    double *a = new double[n], sum=0.;
 
    cout << "Enter " << n << " elements:\n";  
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];    
        if (a[i]<0.) 
        {
            neg++;         
            if (neg==1) i1=i;
            else if (neg==2) i2=i;
        }
    }   
    
    if (neg==0) cout << "Negative elements are absent\n";
    else if (neg==1) cout << "One negative element\n";
    else if (i1==i2-1) cout << "Elements between first and second negative are absent\n";
    else
    {     
        for (int i = i1+1; i < i2; i++)
        sum+=a[i];
      
        cout << "local sum=" << sum << "\n";  
    }
 
    delete[]a;
system("pause");
return 0;
}
массив вводите так: например нужен массив из пяти чисел. набрали
2 4 2 1 3
через пробел. затем нажали <Enter>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.02.2020, 15:34
Помогаю со студенческими работами здесь

Найти сумму элементов массива, расположенных между первым и вторым отрицательными элементами
помогите пожалуйста: В однородном массиве, состоящем из N вещественных элементов, вычислить: • Номер минимального элемента массива; ...

Найти сумму элементов массива, расположенных между первым и вторым отрицательными элементами
В одномерном массиве, состоящем из n вещественных элементов вычислить: -Номер минимального элемента массива. -Сумму элементов массива,...

Сумму элементов массива, расположенных между первым и вторым отрицательными элементами
1)Сумму элементов массива, расположенных между первым и вторым отрицательными элементами 2) а так же количество элементов массива больших...

Вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами
Хелп!!! Задание: Вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами. На самом...

Вычислить сумму элементов массива расположенных между первым и вторым отрицательными элементами
В одномерном массиве, состоящем из n вещественных элементов вычислить Сумму элементов массива расположенных между первым и вторым...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru