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

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

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

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

Я не понимаю что от меня хочет преподаватель
Мой код:
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
6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
26.02.2020, 18:33 2

Не по теме:

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


Цитата Сообщение от kitkat1000 Посмотреть сообщение
1) Пробовал делать очистку памяти, но тогда код не правильно работал.
Покажи
Цитата Сообщение от kitkat1000 Посмотреть сообщение
2) Второй пункт из замечаний преподавателя я вообще НЕ ПОНИМАЮ. Объясните пожалуйста
Находишь первый отриц. элемент, находишь последний, и складываешь все что между ними
0
Модератор
Эксперт С++
 Аватар для zss
13734 / 10930 / 6483
Регистрация: 18.12.2011
Сообщений: 29,168
26.02.2020, 18:50 3
Цитата Сообщение от zayats80888 Посмотреть сообщение
находишь последний
находишь следующий
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 02:30 4
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  [ТС] 5
zss, составьте мне пожалуйста код, а то у меня ничего не получается
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 12:41 6
kitkat1000, что нужно сделать, я Вам сообщил. прочитайте ещё раз и используйте эти строки в коде.
0
4 / 3 / 0
Регистрация: 12.01.2020
Сообщений: 264
27.02.2020, 12:48  [ТС] 7
Yetty, прочитал не один раз, но не понял. Вы мне напишите весь код, а я сам разберусь.
Простите что утруждаю, но я сам не могу добиться желаемого результата.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 13:03 8
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 9
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  [ТС] 10
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
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 13:37 11
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  [ТС] 12
Yetty, вот что получилось
Миниатюры
Найти сумму элементов массива расположенных между первым и вторым отрицательными элементами  
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 13:40 13
Цитата Сообщение от kitkat1000 Посмотреть сообщение
вот что получилось
зачем скрины без кода ? вносите исправления и сбрасывайте код
0
4 / 3 / 0
Регистрация: 12.01.2020
Сообщений: 264
27.02.2020, 13:44  [ТС] 14
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
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 13:58 15
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  [ТС] 16
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  [ТС] 17
Yetty, только есть одно но, как сделать вывод сообщения об ошибке вместо нуля
Миниатюры
Найти сумму элементов массива расположенных между первым и вторым отрицательными элементами  
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 15:34 18
Лучший ответ Сообщение было отмечено 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
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru