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

Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами

21.02.2014, 17:33. Показов 3497. Ответов 28
Метки нет (Все метки)

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
34
35
  #include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{    
    int i1,i2;
    int s;
int n;
cout<<"Enter the number of elements in the array:";/* Ввод  количества элементов массива*/
cin>>n;
int a [n];
 s=0;
for ( int i =0; i<n; i++) {  /*ввод массива*/
    cout<<"a["<<i<<"]=";
    cin>>a[i];
     for (int i=0; i<n; i++){ /*Нахождение первого отрицательного*/
        if (a[i] < 0)
        {
            i1 = i;
            break; /*если нашли, то сразу выход из цикла*/
        }
}
    for (int i=i1+1; n; i++) /*поиск второго отрицательного элемента*/
 {       if (a[i] < 0)
        {
            i2 = i;
            break;/* Выход из цикла */
  }   
    for (int i=i1+1; i<i2; i++) /*подсчет суммы и вывод на экран*/
    {    s=s+a[i];}
    cout << "s= " << s ;}
} 
    system("PAUSE");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2014, 17:33
Ответы с готовыми решениями:

Найти сумму элементов между первым и вторым отрицательными элементами массива
Прошу разъяснить как в массиве из 10 вещ. чисел найти сумму элементов между первым и вторым...

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

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

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

28
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
21.02.2014, 17:35 2
C++
1
2
 
if(i1 == i2 == 0) { ...  }
Попробуйте так. После форов. Только присвойте i1 и i2 сверху нули.
0
0 / 0 / 3
Регистрация: 09.10.2013
Сообщений: 189
21.02.2014, 17:37  [ТС] 3
Сумму считает нормально, только нет вывода на экран сообщения о отсутствии элементов между отрицательными

Добавлено через 1 минуту
То есть условие на поиск отрицательных элементов навесить?
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
21.02.2014, 17:41 4
Я имела в виду - после форов, где находите первый и второй отрицательный элементы. Если их не найдется - то i1 и i2 останутся нулями.

Добавлено через 47 секунд
А, пардон. Я сплю, потому неверно поняла задание...
0
0 / 0 / 3
Регистрация: 09.10.2013
Сообщений: 189
21.02.2014, 17:58  [ТС] 5
А можно в самый последний цикл вписать if(...) {вычисление суммы}
else {"Нет подходящих цифр} ? Вместо ... не знаю что написать.
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
21.02.2014, 18:23 6
Если (i1 == i2 == 0)
0
0 / 0 / 3
Регистрация: 09.10.2013
Сообщений: 189
21.02.2014, 18:31  [ТС] 7
Не выводит сообщение о сумме на эеран
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 <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{    
    int i1,i2;
    double s;
int n;
cout<<"Enter the number of elements in the array:";/* Ââîä  êîëè÷åñòâà ýëåìåíòîâ 
ìàññèâà*/
cin>>n;
double a [n];
 s=0;
 i1=0;
 i2=0;
for ( int i =0; i<n; i++) {  /*ââîä ìàññèâà*/
    cout<<"a["<<i<<"]=";
    cin>>a[i];
     for (int i=0; i<n; i++){ /*Íàõîæäåíèå ïåðâîãî îòðèöàòåëüíîãî*/
        if (a[i] < 0)
        {
            i1 = i;
            break; /*åñëè íàøëè, òî ñðàçó âûõîä èç öèêëà*/
        }
}
    for (int i=i1+1; n; i++) /*ïîèñê âòîðîãî îòðèöàòåëüíîãî ýëåìåíòà*/
 {       if (a[i] < 0)
        {
            i2 = i;
            break;/* Âûõîä èç öèêëà */
  }   
    for (int i=i1+1; i<i2; i++) /*ïîäñ÷åò ñóììû*/
    {  if(i1==i2==0){  s=s+a[i];
    cout << "s= " << s ;}
    else {cout<<"No suitable elements";} }
} }
    system("PAUSE");
    return 0;
}
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
21.02.2014, 18:42 8
Цитата Сообщение от mmeexx Посмотреть сообщение
if(i1==i2==0)
Это и есть проверка наличия элементов.
C++
1
2
3
4
5
6
 for (int i=i1+1; i<i2; i++) /*подсчет суммы*/
    {  if(i1==i2==0) cout<<"No suitable elements"; 
     else {  s=s+a[i];
    cout << "s= " << s ;}
    }
}
0
0 / 0 / 3
Регистрация: 09.10.2013
Сообщений: 189
21.02.2014, 18:42  [ТС] 9
я ввожу массив из 5 элементов -9 -9 5 6 1. По идее должен выводить "Нет подходящих элементов" , а выводит "нажмите любую кнопку для продолженияЭ
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
21.02.2014, 18:59 10
Лови! Немного оптимизировал. Работает
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
43
include "stdafx.h"
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[]){
 
    int n;
    cout << "Enter the number of elements in the array: "; cin >> n;
 
    int *a = new int[n], i1 = -1, i2 = -1, s = 0;
    for ( int i = 0; i < n; ++i) {
        cout<<"a["<<i<<"] = "; cin>>a[i];
        if (a[i] < 0) {
            if(i1 == -1) {              
                i1 = i;         
                continue;
            }
            if(i2 == -1){ 
                i2 = i;             
            }  
        }  
        if(i1 >=0 && i2 == -1) s += a[i];
    }
 
    if(i1 == -1) {
        cout << "Not found negative elements" << endl;
    }
    if(i2 == -1 && i1 >= 0) {
        cout << "Array contains only one negative element" << endl;
        s = 0;
    }
    cout << "Summ = " << s <<endl;
 
    delete[] a;
 
    system("PAUSE");
    return 0;
}
//-1 для того чтобы алгоритм работал, 
                //если 1-й эл-т масс будет отрицат.
//это типа флаг
1
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
21.02.2014, 19:00 11
Цитата Сообщение от Тамика Посмотреть сообщение
if(i1==i2==0)
а что делает эта конструкция?
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
21.02.2014, 19:04 12
Цитата Сообщение от mmeexx Посмотреть сообщение
я ввожу массив из 5 элементов -9 -9 5 6 1. По идее должен выводить "Нет подходящих элементов" , а выводит "нажмите любую кнопку для продолженияЭ
для этого случая подправь условия на эти:

C++
1
2
3
4
5
6
7
8
if(i1 == -1) {
        cout << "Not found negative elements" << endl;
    } else if(i2 == -1 && i1 >= 0) {
        cout << "Array contains only one negative element" << endl;
        s = 0;
    } else if(abs(i2 - i1) == 1){
        cout << "No suitable elements" << endl;
    }
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
21.02.2014, 19:09 13
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
43
44
45
46
47
48
49
50
#include <cstdlib>
#include <iostream>
 
int main(int argc, char *argv[])
{    
        int *mas = new int[];
        std::cout << "Enter number of elements";
        int n;
        std::cin >> n;
        std::cout << "Enter elements\n";
        for (int i = 0; i < n; ++i)
        {
            int temp;
            std::cout<<"a["<<i<<"]=";
            std::cin >> mas[i];
        }
        int n1 = 0, n2 = 0, n1_id, n2_id;
 
        for (int i =0 ; i < n; ++i )
        {
            if (mas[i] < 0) 
            {
                n1 = mas[i];
                n1_id = i;
                break;
            }
 
        }
        for (int i =n1_id + 1; i < n; ++i)
        {
                if (mas[i] < 0)
                {
                    n2 = mas[i];
                    n2_id = i;
                    break;
                }
        }
 
        int s = 0;
 
        if ((n1 == 0) && (n2 == 0))
            std::cout << "No elements between\n";
        else
        {
            for (int i = n1_id; i < n2_id; ++i)
                s += mas[i];
            std::cout << "Sum of elements between are " << s;
        }
 
}
Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
а что делает эта конструкция?
А тут срабатывает тупое неявное преобразование, которое я не учла.
0
0 / 0 / 3
Регистрация: 09.10.2013
Сообщений: 189
21.02.2014, 19:31  [ТС] 14
Что за ........?
Миниатюры
Вывод  на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами  
0
0 / 0 / 3
Регистрация: 09.10.2013
Сообщений: 189
21.02.2014, 19:32  [ТС] 15
Цитата Сообщение от some_name Посмотреть сообщение
для этого случая подправь условия на эти:

C++
1
2
3
4
5
6
7
8
if(i1 == -1) {
        cout << "Not found negative elements" << endl;
    } else if(i2 == -1 && i1 >= 0) {
        cout << "Array contains only one negative element" << endl;
        s = 0;
    } else if(abs(i2 - i1) == 1){
        cout << "No suitable elements" << endl;
    }
Куда это писать?
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
21.02.2014, 19:50 16
Цитата Сообщение от mmeexx Посмотреть сообщение
Куда это писать?
Короче, вот рабочий код:

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
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[]){
 
    int n;
    cout << "Enter the number of elements in the array: "; cin >> n;
 
    int *a = new int[n], i1 = -1, i2 = -1, s = 0;
    for ( int i = 0; i < n; ++i) {
        cout<<"a["<<i<<"] = "; cin>>a[i];
        if (a[i] < 0) {
            if(i1 == -1) {              
                i1 = i;         
                continue;
            }
            if(i2 == -1){ 
                i2 = i;             
            }  
        }  
        if(i1 >=0 && i2 == -1) s += a[i];
    }
 
    if(i1 == -1) {
        cout << "Not found negative elements" << endl;
    } else if(i2 == -1 && i1 >= 0) {
        cout << "Array contains only one negative element" << endl;
        s = 0;
    } else if(abs(i2 - i1) == 1){
        cout << "No suitable elements" << endl;
    }
    cout << "Summ = " << s <<endl;
 
    delete[] a;
 
    system("PAUSE");
    return 0;
}
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
21.02.2014, 20:46 17
Цитата Сообщение от Тамика Посмотреть сообщение
А тут срабатывает тупое неявное преобразование, которое я не учла.
если бы
C++
1
if(i1==i2==0)
сравнение идет слева направо
сначала сравниваются переменные а потом результат сравнивается с 0
если переменные не равны то результат первого сравнения ЛОЖЬ(0)
результат второго сравнения 0==0 ИСТИНА в результате if срабатывает
аналогично записи
C++
1
if(i1!=i2)
неплохой способ запутать врагов
0
0 / 0 / 3
Регистрация: 09.10.2013
Сообщений: 189
21.02.2014, 20:58  [ТС] 18
C++
1
2
3
4
5
6
for (int i=i1+1; i<i2; i++) /*??????? ?????*/
    {   if(i2!=(i1+1)){s=s+a[i];
    cout<<"s="<<s<<"\n";        
    } else {cout << "No suitable elements\n" ;
    } 
}
В ветке else не выводит сообщение
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
21.02.2014, 21:21 19
Цитата Сообщение от ValeryS Посмотреть сообщение
сравнение идет слева направо
сначала сравниваются переменные а потом результат сравнивается с 0
если переменные не равны то результат первого сравнения ЛОЖЬ(0)
результат второго сравнения 0==0 ИСТИНА в результате if срабатывает
аналогично записи
Ну так у выражения i1 == i2 тип bool. И результат в итоге - false. А 0 - разве тип bool?
Нет. int. Вот происходит, что false -> 0. Неявное преобразование. А потом уже 0 == 0 - да, идем в цикл.
Или скажите, что не так?)
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
21.02.2014, 21:22 20
Цитата Сообщение от mmeexx Посмотреть сообщение
C++
1
for (int i=i1+1; i<i2; i++) /*??????? ?????*/ { if(i2!=(i1+1)){s=s+a[i]; cout<<"s="<<s<<"\n"; } else {cout << "No suitable elements\n" ; } }
и

C++
1
2
3
4
5
6
7
8
9
if(i1 == -1) {
        cout << "Not found negative elements" << endl;
    } else if(i2 == -1 && i1 >= 0) {
        cout << "Array contains only one negative element" << endl;
        s = 0;
    } else if(abs(i2 - i1) == 1){
        cout << "No suitable elements" << endl;
    }
    cout << "Summ = " << s <<endl;
найди отличия
0
21.02.2014, 21:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2014, 21:22
Помогаю со студенческими работами здесь

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

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

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

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

Вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами
Вот условие задания: В одномерном целочисленном массиве (размер массива (не больше 20) и...

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


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

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