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

Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов - C++

Восстановить пароль Регистрация
 
Dmitry_Trueno
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 22
10.10.2016, 14:15     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #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
#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
#include <iostream>
#include <iomanip>
using namespace std;
#define L 100
 
int main()
{
    setlocale(LC_ALL, "rus");
    int n, max = -100000000, min = 100000000;
    int i;
    float mas[50], sum = 0;
    cout << "Введите количество эл-тов массива:\n";
    cin >> n;
    cout << "Введите числа для массива:\n"; {
        for (i = 0; i < n; i++)
            cin >> mas[i]; }
    cout << "Первый отрицательный элемент массива: "; {
        for (i = 0; i < n && mas[i] >= 0; i++);
        if (i < n) 
        cout << mas[i] << endl; }
        for (i = 0; i < n; i++){
        if (mas[i] < 0)
            sum += mas[i]; }
    cout << "Cумма отрицательных элементов = " << sum << endl;
        system("pause");
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2016, 14:15     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов
Посмотрите здесь:

Найти сумму элементов массива, находящихся между первым и последним отрицательным элементом C++
Сумма элементов между первым положительным элементом массива и последним отрицательным C++
C++ Однонаправленный связанный список (Вставить новый узел с нулевым значением перед первым отрицательным элементом...)
C++ Задача с массивом, нужно найти сумму элементов которые находятся перед последним отрицательным элементом
C++ Получить разницу между первым элементом последовательности и числом, стоящим перед первым отрицательным
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_SayHelli
73 / 73 / 23
Регистрация: 30.07.2015
Сообщений: 391
10.10.2016, 14:55     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Dmitry_Trueno,
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>
#include <locale>
using namespace std;
 
int main()
{
    setlocale(0, "");
    float mass[50];
    float summ = 0;
    cout << "Введите размер массива: ";
    int N;
    cin >> N;
    cout << "Введите элементы массива: " << endl;
    for (int i = 0; i < N; i++)
        cin >> mass[i];
    cout << "Исходный массив: " << endl;
    for (int i = 0; i < N; i++)
    {
        cout << mass[i] << ' ';
        if (mass[i] < 0)
            summ += mass[i];
    }
    cout << endl;
    for (int i = 0; i < N; i++)
    {
        if (mass[i] > 0)
            mass[i] = summ;
        else
            break;
    }
    cout << "Измененный массив:" << endl;
    for (int i = 0; i < N; i++)
        cout << mass[i] << ' ';
    cout << endl;
    system("pause");
    return 0;
}
Dmitry_Trueno
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 22
10.10.2016, 15:22  [ТС]     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #3
Цитата Сообщение от _SayHelli Посмотреть сообщение
Dmitry_Trueno,
C++
Благодарю. Теперь буду разбираться, что, откуда и куда
_SayHelli
73 / 73 / 23
Регистрация: 30.07.2015
Сообщений: 391
10.10.2016, 15:25     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #4
Dmitry_Trueno, ну спрашивайте если что
Dmitry_Trueno
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 22
10.10.2016, 16:20  [ТС]     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #5
Цитата Сообщение от _SayHelli Посмотреть сообщение
Dmitry_Trueno, ну спрашивайте если что
Если что, спрашиваю: при попытке соединить два кода(нужно по задаче чтоб все пункты были) что то идет не так: ошибок нет, но и значения совсем уехали
_SayHelli
73 / 73 / 23
Регистрация: 30.07.2015
Сообщений: 391
10.10.2016, 16:22     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #6
Dmitry_Trueno, ну хоть примеры кода выкиньте, чтобы было видно можете в личку
Dmitry_Trueno
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 22
10.10.2016, 16:30  [ТС]     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #7
Цитата Сообщение от _SayHelli Посмотреть сообщение
Dmitry_Trueno, ну хоть примеры кода выкиньте, чтобы было видно можете в личку
Да, конечно. Пытаюсь ковырять, но моих "паскальных" познаний не хватает от слова совсем
UPD: одна скобка уехала
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
#include "stdafx.h"
#include <iostream>
#include <locale>
    using namespace std;
 
    int main()
    {
        setlocale(0, "");
        float mass[50];
        float summ = 0;
        cout << "Введите размер массива: ";
        int N;
        int i;
        cin >> N;
        cout << "Введите элементы массива: " << endl; {
            for (int i = 0; i < N; i++)
                cin >> mass[i]; }
        cout << "Первый отрицательный элемент массива: "; {
            for (int i = 0; i < N && mass[i] >= 0; i++)
            if (i < N)
                cout << mass[i] << endl; }
        for (int i = 0; i < N; i++) {
            if (mass[i] < 0)
                summ += mass[i];
        }
        cout << "Cумма отрицательных элементов = " << summ << endl;
        cout << "Исходный массив: " << endl;
        for (int i = 0; i < N; i++)
        {
            cout << mass[i] << ' ';
            if (mass[i] < 0)
                summ += mass[i];
        }
        cout << endl;
        for (int i = 0; i < N; i++)
        {
            if (mass[i] > 0)
                mass[i] = summ;
            else
                break;
        }
        cout << "Измененный массив:" << endl;
        for (int i = 0; i < N; i++)
        cout << mass[i] << ' ';
        cout << endl;
        system("pause");
        return 0;
    }
_SayHelli
73 / 73 / 23
Регистрация: 30.07.2015
Сообщений: 391
10.10.2016, 17:20     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #8
Dmitry_Trueno, если не секрет, то какие вы задачи вы хотите добавить в тот код который я прислал ?
Dmitry_Trueno
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 22
10.10.2016, 17:29  [ТС]     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #9
Цитата Сообщение от _SayHelli Посмотреть сообщение
если не секрет, то какие вы задачи вы хотите добавить в тот код который я прислал ?
Абсолютно не секрет

Создать программу, обеспечивающую работу следующих пунктов меню.
1. Ввод массива целых чисел.
2. Вывод массива в строку.
3. Найти первый отрицательный элемент в массиве. Найти сумму отрицательных элементов. Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов.
4. Конец работы.
_SayHelli
73 / 73 / 23
Регистрация: 30.07.2015
Сообщений: 391
10.10.2016, 17:38     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #10
Dmitry_Trueno, вот вроде все выполняется
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>
#include <locale>
using namespace std;
 
int main()
{
    setlocale(0, "");
    int mass[50];
    int summ = 0;
    cout << "Введите размер массива: ";
    int N;
    cin >> N;
    cout << "Введите элементы массива: " << endl;
    for (int i = 0; i < N; i++)
        cin >> mass[i];
    cout << "Исходный массив: " << endl;
    for (int i = 0; i < N; i++)
    {
        cout << mass[i] << ' ';
        if (mass[i] < 0)
            summ += mass[i];
    }
    cout << endl;
    cout << "Сумма отрицательных элементов:" << summ << endl;
    for (int i = 0; i < N; i++)
    {
        if (mass[i] > 0)
            mass[i] = summ;
        else
        {
            cout << "Первый отрицательный элемент: " << mass[i] << endl;
                break;
        }
    }
    
    cout << "Измененный массив:" << endl;
    for (int i = 0; i < N; i++)
        cout << mass[i] << ' ';
    cout << endl;
    system("pause");
    return 0;
}
Dmitry_Trueno
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 22
10.10.2016, 17:43  [ТС]     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #11
Цитата Сообщение от _SayHelli Посмотреть сообщение
вот вроде все выполняется
Огромное спасибо, даже не знаю, что бы я без вашей помощи сделал
gru74ik
Модератор
 Аватар для gru74ik
3130 / 1356 / 167
Регистрация: 20.02.2013
Сообщений: 3,874
Записей в блоге: 18
10.10.2016, 18:49     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #12
Dmitry_Trueno, как вариант:
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>
#include <algorithm>
 
int main()
{
    typedef int Item;
 
    const size_t ARR_SIZE = 10;
    Item arr[ ARR_SIZE ] = { 12, 32, 14, 46, -5, 27, -8, 22, 33, -3 };
 
    auto arr_beg = arr;
    auto arr_end = arr + ARR_SIZE;
 
    Item sum{};
    for ( const auto & elem : arr )
        if ( elem < 0 )
            sum += elem;
 
    auto first_neg_elem =
        std::find_if
            (
                arr_beg,
                arr_end,
                []( Item x ) { return x < 0; }
            );
 
    for ( auto it = arr_beg; it != first_neg_elem; ++it )
        *it = sum;
 
    for ( const auto & elem : arr )
        std::cout << elem << " ";
 
    return 0;
}
Dmitry_Trueno
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 22
10.10.2016, 19:10  [ТС]     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #13
Цитата Сообщение от gru74ik Посмотреть сообщение
Dmitry_Trueno, как вариант:
Спасибо, но покамест для меня это сложно
gru74ik
Модератор
 Аватар для gru74ik
3130 / 1356 / 167
Регистрация: 20.02.2013
Сообщений: 3,874
Записей в блоге: 18
10.10.2016, 19:14     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #14
Цитата Сообщение от Dmitry_Trueno Посмотреть сообщение
покамест для меня это сложно
Там всего четыре вопроса может возникнуть у новичка:
  1. что за typedef такой?
  2. что за странные циклы с каким-то auto?
  3. что за колдунство в строках 22-28?
  4. что за странный цикл в 30-й строке?

Dmitry_Trueno, давайте, спросите меня. Неужели Вам не любопытно?
Dmitry_Trueno
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 22
10.10.2016, 19:18  [ТС]     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #15
Цитата Сообщение от gru74ik Посмотреть сообщение
Там всего четыре вопроса может возникнуть у новичка:
что за typedef такой?
что за странные циклы с каким-то auto?
что за колдунство в строках 22-28?
что за странный цикл в 30-й строке?
Dmitry_Trueno, давайте, спросите меня. Неужели Вам не любопытно?
Так то оно так, но сможет ли мой мозг обработать все перечисленное.
gru74ik
Модератор
 Аватар для gru74ik
3130 / 1356 / 167
Регистрация: 20.02.2013
Сообщений: 3,874
Записей в блоге: 18
10.10.2016, 19:23     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #16
Dmitry_Trueno, я передумал. Аттракцион невиданной щедрости отменяется. Может, как-нибудь, в другой раз.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2016, 11:42     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Dmitry_Trueno
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 22
26.11.2016, 11:42  [ТС]     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов #17
Цитата Сообщение от _SayHelli Посмотреть сообщение
Dmitry_Trueno, вот вроде все выполняется
Вновь взываю к вашей помощи: преподу не понравилось, что все выполняется в одной функции: меню ему подавай. А во взаимодействиях с функциями я могу пока только сгенерировать массив, заполнить вручную и вывести

Добавлено через 3 часа 42 минуты
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "stdafx.h"
#include <iostream>
#include <locale>
# include <conio.h>
# include <time.h>
# include <cstdlib>
using namespace std;
void vvod(int mass[], int N);
void generac(int mass[], int N);
void vivod(int mass[], int N);
void summa_and_element(int mass[], int N, int summ);
void main()
{
    srand((unsigned)time(NULL));
    setlocale(0, "");
    int mass[50];
    int summ = 0;
    int N, k;
    int c;
    cout << "введите количество элементов массива "; cin >> N; cout << endl;
    do
    {
        cout << "1. Ввод массива: " << endl;
        cout << "2. Генерация элементов массива:  " << endl;
        cout << "3. Сумма и элемент : " << endl;
        cout << "4. Вывод элементов массива: " << endl;
        cout << "5. Конец работы" << endl;
        cout << "Укажите номер пункта меню "; cin >> k; cout << endl;
        switch (k)
        {
        case 1: vvod(mass, N); break;
        case 2: generac(mass, N); break;
        case 3: summa_and_element(mass, N, summ); break;
        case 4: vivod(mass, N); break;
        case 5: cout << "Конец работы" << endl; break;
        default: cout << "Такого пункта нет" << endl;
        }
        if (k == 5) break;
    } while (true);
 
        _getch();
    
}
void vvod(int mass[], int N)
{
    cout << "Введите элементы массива: " << endl;
    for (int i = 0; i < N; i++) {
        cin >> mass[i];
    }
}
void generac(int mass[], int N)
{
    for (int i = 0; i<N; i++)
        mass[i] = rand() % (201) - 100;
}
 
void summa_and_element(int mass[], int N, int summ)
{cout << "Сумма отрицательных элементов:" << summ<< endl;
        for (int i = 0; i < N; i++)
    {
        if (mass[i] > 0)
            mass[i]= summ;
        else
        {
            cout << "Первый отрицательный элемент: " << mass[i] << endl; 
            break;
        }
    }
}
 
void vivod(int mass[], int N)
{
    cout << "Массив a " ;
    for (int i = 0; i<N; i++)
        cout << mass[i] << "\t";
    cout<<endl;
}
Не хочет считать сумму отрицательных элементов
Yandex
Объявления
26.11.2016, 11:42     Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов
Ответ Создать тему
Опции темы

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