Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2022, 23:15   #1
sa1nts_eye
Пользователь
 
Регистрация: 24.01.2022
Сообщений: 23
По умолчанию c++ Найти в массиве и вывести на экран сумму абсолютных значений отрицательных элементов массива.(5x7)

Здраствуйте друзья , сижу решаю задачки , учусь, ну вот не очень сильно понимаю как доделать .
Вот мой код , если сможете выслать решение данной задачи с объяснением. Буду благодарен

Задача :
Найти в массиве и вывести на экран сумму абсолютных значений отрицательных элементов массива.(5x7)


Код:
#include <iostream>

int main() {
    setlocale(LC_ALL, "rus");
    int a[5];
    double s_neg = 0;
    int n_neg = 0, s_pos = 0;
    std::cout << "Введите 5 целых чисел:\n";
    for (int i = 0; i < 5; i++) {
        std::cin >> a[i];
        if (a[i] < 0) {
            s_neg += abs(a[i]);
            n_neg++;
        }
    }
    if (n_neg == 0) {
        std::cout << "Отрицательных чисел нет!!!\n";
        return 1;
    }
    s_neg /= n_neg;
    for (int i = 0; i < 5; i++)
        if (abs(a[i]) > s_neg)
            s_pos += a[i];
    std::cout << "Вот она, сумма:" << s_pos << '\n';
    return 0;
}
sa1nts_eye вне форума Ответить с цитированием
Старый 24.01.2022, 23:47   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,111
По умолчанию

Сложно понять логику, но:
Код:
for (int i = 0; i < 5; i++) {
   std::cin >> a[i];
   if (a[i] < 0) {
      s_neg += abs(a[i]);
      n_neg++;     // это кому-то нужно?
   }
}
В этом цикле вводятся элементы массива и подсчитывается сумма абсолютных значений отрицательных элементов - то, что требуется в задаче.
Зачем считаем?
Код:
n_neg++;
Зачем следующее условие?
Код:
s_neg /= n_neg;
for (int i = 0; i < 5; i++)
   if (abs(a[i]) > s_neg)
      s_pos += a[i];
Добавить за первым циклом
Код:
std::cout << "Вот она, сумма:" << s_neg << '\n';
и радоваться жизни

PS: Только вот массив, по заданию, двухмерный!
Надо использовать вложенный цикл.
Первый (внешний цикл), например, по строкам, а второй - по столбцам.
Что-то вроде такого:
Код:
int a[5][7];
...
s_neg = 0;
for (int i = 0; i < 5; i++) {
   for (int j = 0; j < 7; j++) {
   std::cin >> a[i],[j];
   if (a[i],[j] < 0) {
      s_neg += abs(a[i],[j]);
   }
}
PSS: За точность оформления не ручаюсь, так как на этом языке писал очень давно, а проверить неначем.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 24.01.2022, 23:55   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 6,918
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
За точность оформления не ручаюсь
Ага, запятая между индексами лишняя.
sa1nts_eye, а еще можно без модуля считать просто "s_neg -= a[i][j];".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 25.01.2022, 00:02   #4
sa1nts_eye
Пользователь
 
Регистрация: 24.01.2022
Сообщений: 23
По умолчанию

ViktorR, Могли бы вы целый код написать ?..
sa1nts_eye вне форума Ответить с цитированием
Старый 25.01.2022, 01:41   #5
sa1nts_eye
Пользователь
 
Регистрация: 24.01.2022
Сообщений: 23
По умолчанию

ViktorR, оно сумму не выдает чисел!((
sa1nts_eye вне форума Ответить с цитированием
Старый 25.01.2022, 01:52   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 6,918
По умолчанию

Так покажите, как исправили исходный код с учетом замечаний.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 25.01.2022, 02:04   #7
sa1nts_eye
Пользователь
 
Регистрация: 24.01.2022
Сообщений: 23
По умолчанию

BDA,
Код:
#include <iostream>

int main() {
    setlocale(LC_ALL, "rus");
    int a[5][7];
    double s_neg = 0;
    int n_neg = 0, s_pos = 0;
    
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 7; j++) {
            std::cin >> a[i][j];
            if (a[i][j] < 0) {
                std::cout << "Сумма";
                s_neg += abs(a[i][j]);
            }
            
            
        }
    }
    

    

}
BDA, сказали как бы по убирать не нужное , я убрал . массив работает как нужно , но вот сумму по условию задачи оно в конце не считает (

Последний раз редактировалось BDA; 25.01.2022 в 02:09.
sa1nts_eye вне форума Ответить с цитированием
Старый 25.01.2022, 02:08   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 6,918
По умолчанию

Остались лишние переменные, ну да ладно. Посмотрите, как в исходном коде печатался s_pos. Добавьте в ваш новый код аналогично вывод s_neg после циклов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 25.01.2022, 02:13   #9
sa1nts_eye
Пользователь
 
Регистрация: 24.01.2022
Сообщений: 23
По умолчанию

BDA, Если не ошибаюсь должно выглядить вот так
Код:
#include <iostream>

int main() {
    setlocale(LC_ALL, "rus");
    int a[5][7];
    double s_neg = 0;
    int n_neg = 0, s_pos = 0;
    
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 7; j++) {
            std::cin >> a[i][j];
            if (a[i][j] < 0) {
                std::cout << "Сумма";
                s_neg += abs(a[i][j]);

                if (n_neg == 0) {
                    std::cout << "Отрицательных чисел нет!!!\n";
                    return 1;
                }
                s_neg /= n_neg;
                for (int i = 0; i < 5; i++)
                    if (abs(a[i][j]) > s_neg)
                        s_pos += a[i][j];
                std::cout << "Вот она, сумма:" << s_pos << '\n';
                return 0;
            }
            
            
        }
        
    }
    

    

}
и не работает (
sa1nts_eye вне форума Ответить с цитированием
Старый 25.01.2022, 02:15   #10
sa1nts_eye
Пользователь
 
Регистрация: 24.01.2022
Сообщений: 23
По умолчанию

BDA, если написать код вот так
Код:
#include <iostream>

int main() {
    setlocale(LC_ALL, "rus");
    int a[5][7];
    double s_neg = 0;
    int n_neg = 0, s_pos = 0;
    
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 7; j++) {
            std::cin >> a[i][j];
            if (a[i][j] < 0) {
                std::cout << "Сумма";
                s_neg += abs(a[i][j]);

                
                
               
            }
            for (int i = 0; i < 5; i++)
                if (abs(a[i][j]) > s_neg)
                    s_pos += a[i][j];
            std::cout << "Вот она, сумма:" << s_pos << '\n';
            return 0;

            
        }
        
    }
    

    

}
То я вписываю только одно число и после этого сразу код выдает сумму :858993458
sa1nts_eye вне форума Ответить с цитированием