Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
mmeexx
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 159
21.02.2014, 17:33     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами #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
  #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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2014, 17:33     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами
Посмотрите здесь:

Найти сумму элементов между первым и вторым отрицательными элементами массива C++
Массив: вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами. C++
C++ Сумму элементов массива, расположенных между первым и последним отрицательными элементами
сумму элементов массива, расположенных между первым и последним отрицательными элементами C++
C++ Вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Тамика
Котовчанин
 Аватар для Тамика
860 / 440 / 129
Регистрация: 16.02.2010
Сообщений: 2,543
Записей в блоге: 27
21.02.2014, 17:35     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами #2
C++
1
2
 
if(i1 == i2 == 0) { ...  }
Попробуйте так. После форов. Только присвойте i1 и i2 сверху нули.
mmeexx
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 159
21.02.2014, 17:37  [ТС]     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами #3
Сумму считает нормально, только нет вывода на экран сообщения о отсутствии элементов между отрицательными

Добавлено через 1 минуту
То есть условие на поиск отрицательных элементов навесить?
Тамика
Котовчанин
 Аватар для Тамика
860 / 440 / 129
Регистрация: 16.02.2010
Сообщений: 2,543
Записей в блоге: 27
21.02.2014, 17:41     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами #4
Я имела в виду - после форов, где находите первый и второй отрицательный элементы. Если их не найдется - то i1 и i2 останутся нулями.

Добавлено через 47 секунд
А, пардон. Я сплю, потому неверно поняла задание...
mmeexx
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 159
21.02.2014, 17:58  [ТС]     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами #5
А можно в самый последний цикл вписать if(...) {вычисление суммы}
else {"Нет подходящих цифр} ? Вместо ... не знаю что написать.
Тамика
Котовчанин
 Аватар для Тамика
860 / 440 / 129
Регистрация: 16.02.2010
Сообщений: 2,543
Записей в блоге: 27
21.02.2014, 18:23     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами #6
Если (i1 == i2 == 0)
mmeexx
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 159
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;
}
Тамика
Котовчанин
 Аватар для Тамика
860 / 440 / 129
Регистрация: 16.02.2010
Сообщений: 2,543
Записей в блоге: 27
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 ;}
    }
}
mmeexx
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 159
21.02.2014, 18:42  [ТС]     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами #9
я ввожу массив из 5 элементов -9 -9 5 6 1. По идее должен выводить "Нет подходящих элементов" , а выводит "нажмите любую кнопку для продолженияЭ
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
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-й эл-т масс будет отрицат.
//это типа флаг
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,065
21.02.2014, 19:00     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами #11
Цитата Сообщение от Тамика Посмотреть сообщение
if(i1==i2==0)
а что делает эта конструкция?
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
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;
    }
Тамика
Котовчанин
 Аватар для Тамика
860 / 440 / 129
Регистрация: 16.02.2010
Сообщений: 2,543
Записей в блоге: 27
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 Посмотреть сообщение
а что делает эта конструкция?
А тут срабатывает тупое неявное преобразование, которое я не учла.
mmeexx
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 159
21.02.2014, 19:31  [ТС]     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами #14
Что за ........?
Миниатюры
Вывод  на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами  
mmeexx
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 159
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;
    }
Куда это писать?
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
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;
}
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,065
21.02.2014, 20:46     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами #17
Цитата Сообщение от Тамика Посмотреть сообщение
А тут срабатывает тупое неявное преобразование, которое я не учла.
если бы
C++
1
if(i1==i2==0)
сравнение идет слева направо
сначала сравниваются переменные а потом результат сравнивается с 0
если переменные не равны то результат первого сравнения ЛОЖЬ(0)
результат второго сравнения 0==0 ИСТИНА в результате if срабатывает
аналогично записи
C++
1
if(i1!=i2)
неплохой способ запутать врагов
mmeexx
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 159
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 не выводит сообщение
Тамика
Котовчанин
 Аватар для Тамика
860 / 440 / 129
Регистрация: 16.02.2010
Сообщений: 2,543
Записей в блоге: 27
21.02.2014, 21:21     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами #19
Цитата Сообщение от ValeryS Посмотреть сообщение
сравнение идет слева направо
сначала сравниваются переменные а потом результат сравнивается с 0
если переменные не равны то результат первого сравнения ЛОЖЬ(0)
результат второго сравнения 0==0 ИСТИНА в результате if срабатывает
аналогично записи
Ну так у выражения i1 == i2 тип bool. И результат в итоге - false. А 0 - разве тип bool?
Нет. int. Вот происходит, что false -> 0. Неявное преобразование. А потом уже 0 == 0 - да, идем в цикл.
Или скажите, что не так?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2014, 21:22     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами
Еще ссылки по теме:

C++ вычислить: 1) номер минимального элемента массива; 2) сумму элементов массива, расположенных между первым и вторым отрицательными элементами
C++ Найти сумму элементов массива, расположенных между первым и вторым отрицательными элементами
C++ Вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами

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

Или воспользуйтесь поиском по форуму:
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
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;
найди отличия
Yandex
Объявления
21.02.2014, 21:22     Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами
Ответ Создать тему
Опции темы

Текущее время: 12:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru