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

Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) - C++

Восстановить пароль Регистрация
 
 
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
26.05.2013, 07:29     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #1
Народ такая проблема, мой код считает сумму от последнего отрицательного элемента массива до первого положительного. Как сделать чтобы он считал сумму элементов от первого положительного до последнего отрицательного. И все это должно быть в одном цикле for, другими словами 0(N). Я знаю что код косячный и что тут даже сумма не считается, но прошу помощи. Вот сам код:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
int main()
{
    setlocale (0,"rus");
    int a;
    const int m=15;
    double v[m],s=0; 
    cout<<"Введите массив из 15 чисел\n";
    for (int i=0; i<m; ++i)
    {
        cin>>v[i];
 
        if (v[i]<0)
            a=i;                              
    } 
    if(a < 14)
        s = v[a] + v[a+1];     
    else
        s = v[a];               
    cout << "Сумма элементов массива s= " << s << endl;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2013, 07:29     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного)
Посмотрите здесь:

C++ Нахождение последнего отрицательного элемента массива
Определить порядковые номера и значения первого положительного и п оследнего отрицательного элементов массива Z. C++
Найти величину и номер первого отрицательного и последнего положительного элементов в массиве C++
Найти номер последнего отрицательного элемента массива C++
C++ Матрица динамическая. 1. максимальный элемент массива; 2. сумму элементов массива, расположенных до последнего положительного элемента
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Нету имени
177 / 22 / 2
Регистрация: 16.05.2013
Сообщений: 181
26.05.2013, 08:09     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #2
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
#include<iostream>
using namespace std;
 
int main() {
 
    int mass[15] = { -5, -7, -8,  6,  4,
                      4,  5,  6, -4, -1,
                     -1,  5, -4,  8, -4
                   };
                   
    int perv_polozh = 0;    
    bool pp = true;
 
    for (int i=0; i<15; i++) {
        // находим первое положительное число
        // и если мы один раз нашли, и потом в процессе вычисления
        // perv_polozh  будет равен 0, то добавляем булевскую проверку,
        // чтобы не трогать снова первый цикл if()
        if(perv_polozh == 0 && pp == true) {
            if(mass[i] > 0) {
                perv_polozh = mass[i];
                pp = false;
            }
        }
        // сумма от первого положительного до последнего отрицательного
        if(pp == false) {
            if(mass[i] < 0) {
                perv_polozh = perv_polozh + mass[i];
            }
        }
    }
    
    cout << perv_polozh << endl;
    
cin.get();
}
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
26.05.2013, 08:13  [ТС]     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #3
Цитата Сообщение от Нету имени Посмотреть сообщение
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
#include<iostream>
using namespace std;
 
int main() {
 
    int mass[15] = { -5, -7, -8,  6,  4,
                      4,  5,  6, -4, -1,
                     -1,  5, -4,  8, -4
                   };
                   
    int perv_polozh = 0;    
    bool pp = true;
 
    for (int i=0; i<15; i++) {
        // находим первое положительное число
        // и если мы один раз нашли, и потом в процессе вычисления
        // perv_polozh  будет равен 0, то добавляем булевскую проверку,
        // чтобы не трогать снова первый цикл if()
        if(perv_polozh == 0 && pp == true) {
            if(mass[i] > 0) {
                perv_polozh = mass[i];
                pp = false;
            }
        }
        // сумма от первого положительного до последнего отрицательного
        if (pp == false) {
            if (mass[i] < 0) {
                perv_polozh = perv_polozh + mass[i];
            }
        }
    }
    
    cout << perv_polozh << endl;
    
cin.get();
}
А можно без булевой переменной и массив я ввожу в компиляторе, а не задаю изначально
Нету имени
177 / 22 / 2
Регистрация: 16.05.2013
Сообщений: 181
26.05.2013, 08:32     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    for (int i=0; i<15; i++) {
        cout << "Введите " << i+1 << " число: "; cin >> mass[i];
        
        // находим первое положительное число 
            if(mass[i] > 0) {
                if(perv_polozh == 0 ) {
                    perv_polozh = mass[i];
                }
            }
        
        // сумма от первого положительного до последнего отрицательного
        if(mass[i] < 0) {
                perv_polozh = perv_polozh + mass[i];
        }
    }
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
26.05.2013, 08:41  [ТС]     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #5
Цитата Сообщение от Нету имени Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    for (int i=0; i<15; i++) {
        cout << "Введите " << i+1 << " число: "; cin >> mass[i];
        
        // находим первое положительное число 
            if(mass[i] > 0) {
                if(perv_polozh == 0 ) {
                    perv_polozh = mass[i];
                }
            }
        
        // сумма от первого положительного до последнего отрицательного
        if(mass[i] < 0) {
                perv_polozh = perv_polozh + mass[i];
        }
    }
Сейчас попробую

Добавлено через 4 минуты
Цитата Сообщение от Нету имени Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    for (int i=0; i<15; i++) {
        cout << "Введите " << i+1 << " число: "; cin >> mass[i];
        
        // находим первое положительное число 
            if(mass[i] > 0) {
                if(perv_polozh == 0 ) {
                    perv_polozh = mass[i];
                }
            }
        
        // сумма от первого положительного до последнего отрицательного
        if(mass[i] < 0) {
                perv_polozh = perv_polozh + mass[i];
        }
    }
Что-то не получается, можешь полный код показать?
Нету имени
177 / 22 / 2
Регистрация: 16.05.2013
Сообщений: 181
26.05.2013, 08:42     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #6
Цитата Сообщение от MishkaSh Посмотреть сообщение
А можно без булевой переменной
Цитата Сообщение от MishkaSh Посмотреть сообщение
Что-то не получается, можешь полный код показать?
К сожелению, я незнаю другого способа, чтобы не переприсваивать, первому положительнумы числу, какое-нибуть другое положительное
такой цикл только правильный, ну я до другого додуматься немогу
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
#include<iostream>
#include<clocale>
using namespace std;
 
int main() { setlocale(LC_ALL,"Rus");
 
    int mass[15];
    
    int perv_polozh = 0;
    bool pp = true;
    
    for (int i=0; i<15; i++) {
        cout << "Введите " << i+1 << " число: "; cin >> mass[i];
        
        // находим первое положительное число 
            if(mass[i] > 0 && pp == true)   {
                if(perv_polozh == 0) {
                    perv_polozh = mass[i];
                    pp = false;
                }
            }
        
        // сумма от первого положительного до последнего отрицательного
        if (pp == false) {
            if(mass[i] < 0) {
                    perv_polozh = perv_polozh + mass[i];
            }
        }
    }
    
    cout << perv_polozh << endl;
    
cin.get();
}
А что обязательно, чистый цикл должен быть?
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
26.05.2013, 08:46  [ТС]     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #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
#include<iostream>
#include<clocale>
using namespace std;
 
int main() { setlocale(LC_ALL,"Rus");
 
    int mass[15];
    
    int perv_polozh = 0;
    bool pp = true;
    
    for (int i=0; i<15; i++) {
        cout << "Введите " << i+1 << " число: "; cin >> mass[i];
        
        // находим первое положительное число 
            if(mass[i] > 0 && pp == true)   {
                if(perv_polozh == 0) {
                    perv_polozh = mass[i];
                    pp = false;
                }
            }
        
        // сумма от первого положительного до последнего отрицательного
        if (pp == false) {
            if(mass[i] < 0) {
                    perv_polozh = perv_polozh + mass[i];
            }
        }
    }
    
    cout << perv_polozh << endl;
    
cin.get();
}
А что обязательно, чистый цикл должен быть?
Да надо именно один цикл, не, ты покажешь показать код без булевой переменной?
Нету имени
177 / 22 / 2
Регистрация: 16.05.2013
Сообщений: 181
26.05.2013, 08:56     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #8
Да вот такого додумался, мы первое положительное число присваиваем один раз, и больше не трогаем, а расчеты проводим в другой переменной, такой возможен вариант??

вот без булевской переменной, но я его не изменял, как предлагал выше строчками
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
#include<iostream>
#include<clocale>
using namespace std;
 
int main() { setlocale(LC_ALL,"Rus");
 
    int mass[15];
    
    int perv_polozh = 0;
    
    for (int i=0; i<15; i++) {
        cout << "Введите " << i+1 << " число: "; cin >> mass[i];
        
        // находим первое положительное число 
            if(mass[i] > 0 )   {
                if(perv_polozh == 0) {
                    perv_polozh = mass[i];
                }
            }
        
        // сумма от первого положительного до последнего отрицательного
        if(mass[i] < 0) {
             perv_polozh = perv_polozh + mass[i];
        }
        
    }
    
    cout << perv_polozh << endl;
    
cin.get();
}
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
26.05.2013, 08:57  [ТС]     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #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
27
28
29
30
31
#include<iostream>
#include<clocale>
using namespace std;
 
int main() { setlocale(LC_ALL,"Rus");
 
    int mass[15];
    
    int perv_polozh = 0;
    
    for (int i=0; i<15; i++) {
        cout << "Введите " << i+1 << " число: "; cin >> mass[i];
        
        // находим первое положительное число 
            if(mass[i] > 0 )   {
                if(perv_polozh == 0) {
                    perv_polozh = mass[i];
                }
            }
        
        // сумма от первого положительного до последнего отрицательного
        if(mass[i] < 0) {
             perv_polozh = perv_polozh + mass[i];
        }
        
    }
    
    cout << perv_polozh << endl;
    
cin.get();
}
Думаю да возможен
Нету имени
177 / 22 / 2
Регистрация: 16.05.2013
Сообщений: 181
26.05.2013, 09:02     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #10
Цитата Сообщение от MishkaSh Посмотреть сообщение
Думаю да возможен
Выкладываю код
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
#include<iostream>
#include<clocale>
using namespace std;
 
int main() { setlocale(LC_ALL,"Rus");
 
    int mass[15];
    
    int perv_polozh = 0;
    int raschet = 0;
    
    for (int i=0; i<15; i++) {
        cout << "Введите " << i+1 << " число: "; cin >> mass[i];
        
        // находим первое положительное число 
        if(mass[i] > 0 && perv_polozh == 0) {
            perv_polozh = mass[i];
            raschet = mass[i];
        }
        // сумма от первого положительного до последнего отрицательного
        if(mass[i] < 0) {
           raschet = raschet + mass[i];
        }
    }
    
    cout << "Первое положительное число: " << perv_polozh  
         << "Сумма элементов массива: "    << raschet 
         << endl;
    
cin.get();
}
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
26.05.2013, 09:11  [ТС]     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #11
Цитата Сообщение от Нету имени Посмотреть сообщение
Выкладываю код
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
#include<iostream>
#include<clocale>
using namespace std;
 
int main() { setlocale(LC_ALL,"Rus");
 
    int mass[15];
    
    int perv_polozh = 0;
    int raschet = 0;
    
    for (int i=0; i<15; i++) {
        cout << "Введите " << i+1 << " число: "; cin >> mass[i];
        
        // находим первое положительное число 
        if(mass[i] > 0 && perv_polozh == 0) {
            perv_polozh = mass[i];
            raschet = mass[i];
        }
        // сумма от первого положительного до последнего отрицательного
        if(mass[i] < 0) {
           raschet = raschet + mass[i];
        }
    }
    
    cout << "Первое положительное число: " << perv_polozh  
         << "Сумма элементов массива: "    << raschet 
         << endl;
    
cin.get();
}
LINK : fatal error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден
Вот что пишет и вопрос где return o; ?
Нету имени
177 / 22 / 2
Регистрация: 16.05.2013
Сообщений: 181
26.05.2013, 09:38     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #12
Цитата Сообщение от MishkaSh Посмотреть сообщение
return o;
return 0;

Цитата Сообщение от MishkaSh Посмотреть сообщение
LINK : fatal error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден
А ты на чем программы компилируешь ,я имею ввиду какая среда

И ещё, у меня всё работает, смотри скрин рабочего стола
Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного)
Нету имени
177 / 22 / 2
Регистрация: 16.05.2013
Сообщений: 181
26.05.2013, 09:45     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #13
Вот что на форуме нашел, у тебя что-то со студией и .Net Framework
Ошибка при построении: сбой при преобразовании в COFF: файл недопустим или поврежден
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
26.05.2013, 10:26  [ТС]     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #14
Цитата Сообщение от Нету имени Посмотреть сообщение
return 0;


А ты на чем программы компилируешь ,я имею ввиду какая среда

И ещё, у меня всё работает, смотри скрин рабочего стола
Вложение 272955
Он считает сумму да? Можешь скрин показать?
Нету имени
177 / 22 / 2
Регистрация: 16.05.2013
Сообщений: 181
26.05.2013, 11:34     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #15
Цитата Сообщение от MishkaSh Посмотреть сообщение
Он считает сумму да? Можешь скрин показать?
Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного)
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
26.05.2013, 12:21  [ТС]     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #16
Цитата Сообщение от Нету имени Посмотреть сообщение
Вижу что работает только что он считает то?
Нету имени
177 / 22 / 2
Регистрация: 16.05.2013
Сообщений: 181
26.05.2013, 12:48     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #17
Цитата Сообщение от MishkaSh Посмотреть сообщение
Вижу что работает только что он считает то?
Маленькая поправка в коде,
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>
#include<clocale>
using namespace std;
 
int main() { setlocale(LC_ALL,"Rus");
 
    int mass[15];
    
    int perv_polozh = 0;
    int raschet = 0;
    
    for (int i=0; i<15; i++) {
        cout << "Введите " << i+1 << " число: "; cin >> mass[i];
        
        // находим первое положительное число 
        if(mass[i] > 0 && perv_polozh == 0) {
            perv_polozh = mass[i];
            raschet = mass[i];
        }
        // сумма от первого положительного до последнего отрицательного
        if(mass[i] < 0 && perv_polozh != 0) {
           raschet = raschet + mass[i];
        }
    }
    
    cout << "Первое положительное число: " << perv_polozh   << endl
         << "Сумма элементов массива: "    << raschet       << endl;
    
cin.get();
cin.get();
 
return 0;
}
сейчас должно быть правильно
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
26.05.2013, 12:53  [ТС]     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #18
Цитата Сообщение от Нету имени Посмотреть сообщение
Маленькая поправка в коде,
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>
#include<clocale>
using namespace std;
 
int main() { setlocale(LC_ALL,"Rus");
 
    int mass[15];
    
    int perv_polozh = 0;
    int raschet = 0;
    
    for (int i=0; i<15; i++) {
        cout << "Введите " << i+1 << " число: "; cin >> mass[i];
        
        // находим первое положительное число 
        if(mass[i] > 0 && perv_polozh == 0) {
            perv_polozh = mass[i];
            raschet = mass[i];
        }
        // сумма от первого положительного до последнего отрицательного
        if(mass[i] < 0 && perv_polozh != 0) {
           raschet = raschet + mass[i];
        }
    }
    
    cout << "Первое положительное число: " << perv_polozh   << endl
         << "Сумма элементов массива: "    << raschet       << endl;
    
cin.get();
cin.get();
 
return 0;
}
сейчас должно быть правильно
Он считает, но не правильно даже сам посмотри
Нету имени
177 / 22 / 2
Регистрация: 16.05.2013
Сообщений: 181
26.05.2013, 13:03     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #19
Цитата Сообщение от MishkaSh Посмотреть сообщение
Он считает, но не правильно даже сам посмотри
после исправлений должно правильно( из за этой ошибки я и сделал булевскую проверку )
посмотрим на новый скрин, и посчитаем
Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного)
Самый первый положительное число находится в 4 массиве и равно оно 5
1ое отрицательное число находится в 7 массиве и равно -5
2ое отрицательное число находится в 8 массиве и равно -8
3ье отрицательное число находится в 9 массиве и равно -2
4ое отрицательное число находится в 13 массиве и равно -6

считаем 5 + (-5) + (-8) + (-2) + (-6) = -16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2013, 13:11     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного)
Еще ссылки по теме:

В одномерном массиве вычислить: максимальный элемент массива и сумму элементов массива, расположенных до последнего положительного элемента C++
Сумма элементов массива, расположенных после первого положительного элемента C++
C++ Вычислить максимальный элемент массива до первого нулевого и сумму элементов до последнего положительного.

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

Или воспользуйтесь поиском по форуму:
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
26.05.2013, 13:11  [ТС]     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) #20
Цитата Сообщение от Нету имени Посмотреть сообщение
после исправлений должно правильно( из за этой ошибки я и сделал булевскую проверку )
посмотрим на новый скрин, и посчитаем
Вложение 273016
Самый первый положительное число находится в 4 массиве и равно оно 5
1ое отрицательное число находится в 7 массиве и равно -5
2ое отрицательное число находится в 8 массиве и равно -8
3ье отрицательное число находится в 9 массиве и равно -2
4ое отрицательное число находится в 13 массиве и равно -6

считаем 5 + (-5) + (-8) + (-2) + (-6) = -16
Так мне нужно чтоб он числа складывал в промежутке от первого положительного до первого отрицательного
Yandex
Объявления
26.05.2013, 13:11     Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного)
Ответ Создать тему
Опции темы

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