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

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

26.02.2020, 18:27. Показов 2075. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2020, 18:27
Ответы с готовыми решениями:

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

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

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

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

17
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
26.02.2020, 18:33 2

Не по теме:

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


Цитата Сообщение от kitkat1000 Посмотреть сообщение
1) Пробовал делать очистку памяти, но тогда код не правильно работал.
Покажи
Цитата Сообщение от kitkat1000 Посмотреть сообщение
2) Второй пункт из замечаний преподавателя я вообще НЕ ПОНИМАЮ. Объясните пожалуйста
Находишь первый отриц. элемент, находишь последний, и складываешь все что между ними
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
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;
Код
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
27.02.2020, 15:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2020, 15:34
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru