9 / 4 / 2
Регистрация: 29.11.2018
Сообщений: 215
1

Вычислить сумму тех столбцов, в которых нет отрицательных элементов

27.11.2019, 10:08. Показов 899. Ответов 13
Метки нет (Все метки)

Я уже второй раз натыкаюсь на эти грабли, но никак не могу понять в чем дело. И через откладчик отслеживал, но так и не понял.
Подскажите, в чем проблема? Нужно вычислить сумму тех столбцов, в которой нету отрицательных элементов. С квадратной матрицей работает отлично, при прямоугольной выбивает ошибку. в строке
C++
1
if (matrix[i][j] < 0)
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
#include <iostream>
#include <math.h>
#include <time.h>
#include <Windows.h>
 
using namespace std;
void create(int** arr, int& m, int& n) {
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++)
            arr[i][j] = rand() % 25-5;
    }
}
void show(int** arr, int& m, int& n) {
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++)
            cout << arr[i][j] << "\t";
        cout << endl;
    }
}
void sum(int** matrix, int& m, int& n) {
    int sum, i;
    for (int j = 0; j < m; j++) {
        sum = 0;
        for (i = 0; i < n; i++) {
            if (matrix[i][j] < 0)
                break;
            sum += matrix[i][j];
        }
        if (i == n)
            cout << "sum" << j << " = " << sum << "\n";
    }
}
/*int findMax(int *&arr, int cap) {
    int Min = arr[0];
    for (int i = 0; i < cap; i++) {
        if (arr[i] < Min)
            Min = arr[i];
    }
    return Min;
}*/
int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(0, "");
    srand(time(NULL));
 
    int n, m;
    cin >> m >> n;
    int** matrix = new int* [m];
    for (int i = 0; i < m; i++)
        matrix[i] = new int[n];
    //int cap = m + n - 1;
    //int* arr = new int[cap];
    
    create(matrix, m, n);
    show(matrix, m, n);
    sum(matrix, m, n);
    //cout << "FindMax: "<< findMax(arr, cap) << endl;
    
 
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2019, 10:08
Ответы с готовыми решениями:

Определить сумму элементов в тех столбцах матрицы, в которых нет отрицательных элементов
Дана прямоугольная цельночисельная матрица. Определить: - сумму элементов у тех столбцах, в которых...

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

Вычислить сумму элементов тех столбцов, у которых 1-й элемент положителен
Друзья помогите пожалуйста, очень надо, преподаватель дал задачи, а я вообще Паскаль не знаю. ...

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

13
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
27.11.2019, 10:30 2
Цитата Сообщение от Pavlory Посмотреть сообщение
С квадратной матрицей работает отлично, при прямоугольной выбивает ошибку. в строке
Перепутал размерности, везде
if (matrix[j][i] < 0)

Добавлено через 3 минуты
Обычно циклы делаются наоборот
C++
1
2
3
for (int i = 0; i < m; ++i) //Строки
    for (int j = 0; j < n; ++j) //Столбцы
          matrix[i][j] = .........
0
Just Do It!
3377 / 1843 / 618
Регистрация: 23.09.2014
Сообщений: 5,835
27.11.2019, 10:41 3
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Перепутал размерности, везде
там афтор желает(я телепат) пройтись отдельно по каждому столбцу,

Цитата Сообщение от oleg-m1973 Посмотреть сообщение
C++
1
2
3
for (int i = 0; i < m; ++i) //Строки
 for (int j = 0; j < n; ++j) //Столбцы
 matrix[i][j] = .........
это должно выглядеть так:

C++
1
2
3
for (int i = 0; i < n; ++i) //Столбцы
    for (int j = 0; j < m; ++j) //Строки
          matrix[j][i] = .........

Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <math.h>
#include <time.h>
#include <Windows.h>
 
using namespace std;
void create(int** arr, int& m, int& n)
{   for (int i = 0; i < m; i++)
    {   for (int j = 0; j < n; j++)
            arr[i][j] = rand() % 25-5;
    }
}
void show(int** arr, int& m, int& n)
{   for (int i = 0; i < m; i++)
    {   for (int j = 0; j < n; j++)
            cout << arr[i][j] << "\t";
        cout << endl;
    }
}
void sum(int** matrix, int& m, int& n)
{   int sum;
    for (int i = 0; i < n; i++)
    {   sum = 0;
        for (int j = 0; j < m; j++)
        {   if (matrix[j][i] < 0)
                break;
            sum += matrix[j][i];
        }
        if (i == n-1)
            cout << "sum[" << i << "]"<< " = " << sum << "\n";
    }
}
    
    int main()
    {   SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        setlocale(0, "");
        srand(time(NULL));
 
        int n, m;
        cin >> m >> n;
        int** matrix = new int* [m];
        for (int i = 0; i < m; i++)
            matrix[i] = new int[n];
        //int cap = m + n - 1;
        //int* arr = new int[cap];
 
        create(matrix, m, n);
        show(matrix, m, n);
        sum(matrix, m, n);
        //cout << "FindMax: "<< findMax(arr, cap) << endl;
 
 
        return 0;
    }
0
Модератор
Эксперт С++
12126 / 9791 / 5916
Регистрация: 18.12.2011
Сообщений: 26,266
27.11.2019, 10:59 4
Цитата Сообщение от XLAT Посмотреть сообщение
if (i == n-1)
надо
C++
1
if(j==m)
(т.е. условие того, что не было преждевременного выхода из цикла по j)

Добавлено через 2 минуты
Цитата Сообщение от Pavlory Посмотреть сообщение
#include <Windows.h>
...
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(0, "");
Цитата Сообщение от Pavlory Посмотреть сообщение
#include <math.h>
Pavlory, Где в Вашей программе это используется?
0
9 / 4 / 2
Регистрация: 29.11.2018
Сообщений: 215
27.11.2019, 11:05  [ТС] 5
Цитата Сообщение от zss Посмотреть сообщение
Pavlory, Где в Вашей программе это используется?
Только сейчас добавил строчки на кириллице. А math.h действительно лишняя.

Добавлено через 16 секунд
Цитата Сообщение от XLAT Посмотреть сообщение
афтор
Прозвучало, как оскорбление.
0
Just Do It!
3377 / 1843 / 618
Регистрация: 23.09.2014
Сообщений: 5,835
27.11.2019, 12:10 6
Цитата Сообщение от Pavlory Посмотреть сообщение
Прозвучало, как оскорбление.
это такие учителя у меня были,
кстати очень приличные,
в моих проэктах всегда так меня называли.
чсв моё от этого никак не пострадало.

Пока вы пишете кривой код, то вы будете афтором.
когда ваш проэкт превратится в проект то только тогда станете автором.
Т.е. афторы пишут проэкты, а авторы пишут проекты.

моё имхо, извините за правду, тут ничего личного.

Цитата Сообщение от zss Посмотреть сообщение
(т.е. условие того, что не было преждевременного выхода из цикла по j)
это условие того, что нужно(не мне) распечатать сумму последнего столбца.
0
9 / 4 / 2
Регистрация: 29.11.2018
Сообщений: 215
27.11.2019, 12:11  [ТС] 7
Цитата Сообщение от XLAT Посмотреть сообщение
Пока вы пишете кривой код, то вы будете афтором.
Значит буду афтором до конца жизни
Программист из меня не выйдет, а задачки эти решаю чисто из-за учебы, практика сейчас у меня.
0
Just Do It!
3377 / 1843 / 618
Регистрация: 23.09.2014
Сообщений: 5,835
27.11.2019, 12:16 8
Цитата Сообщение от Pavlory Посмотреть сообщение
Программист из меня не выйдет
вы не правы,
потому что
любая человеческая деятельность есть планирование.
А в широком контексте планирование и программирование есть синонимы.

Если же контекст приземлить,
то на самом деле всё будет решать опыт.
"Опыт это сын ошибок трудных..."

Очень много умных людей не умеют писать программы,
только потому, что их никогда не писали!


Упорные тренировки, это не только в хокее или в балете,
но и в программировании тоже.

Тренируйтесь, на сколько вам будет позволять ваша ВОЛЯ!
0
9 / 4 / 2
Регистрация: 29.11.2018
Сообщений: 215
27.11.2019, 12:20  [ТС] 9
Спасибо за мотивационные слова, но я уже второй год замечаю, что с трудом у меня получается. Я хоть и делаю это, но не без интернета и помощи одногруппников, и не редко прошу помощи на этом форуме. В то время, как мой одногруппник уже почти год работает во фронт-энд разработке и в свои 17 имеет 400$ в месяц.
Меня больше интересует сфера тестирования. Я не сильно туда вникал, но уже точно вижу, что как программист я закончился, толком не начавшись.
0
Just Do It!
3377 / 1843 / 618
Регистрация: 23.09.2014
Сообщений: 5,835
27.11.2019, 12:24 10
а вот ещё,
если вас назвали бы нубом, вы обиделись бы?
А вот многие наоборот, даже хвастаются этим, хотя бы только потому, что это просто забавно.
В общем Гагарин, тоже не сразу в космос полетел.
Через этап новичка проходят абсолютно все!!!

Добавлено через 2 минуты
Цитата Сообщение от Pavlory Посмотреть сообщение
но уже точно вижу
все ясно,
почему у вас такая реакция.
у вас сильно занижена чсв.

срочно надо его повышать,
методом задач, которые вы уже решите.
0
9 / 4 / 2
Регистрация: 29.11.2018
Сообщений: 215
27.11.2019, 12:29  [ТС] 11
Даа, я начинаю гореть, когда у меня что-то не получается... Отец хотел отдать меня в академию "Шаг" на курс фронт-энда. Я боялся, что он потратит много денег, а я не оправдаю надежду. Это же чувству было, когда мне покупали ноутбук для учебы.
0
Just Do It!
3377 / 1843 / 618
Регистрация: 23.09.2014
Сообщений: 5,835
27.11.2019, 13:00 12
Pavlory,
на самом деле всё бывает гораздо проще:
вот ваш код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void sum(int** matrix, int& m, int& n) {
    int sum, i;
    for (int j = 0; j < m; j++) {
        sum = 0;
        for (i = 0; i < n; i++) {
            if (matrix[i][j] < 0)
                break;
            sum += matrix[i][j];
        }
        if (i == n)
            cout << "sum" << j << " = " << sum << "\n";
    }
}
а теперь назовем вещи своими именами:
m переменуем в ROW
n переменуем в COL

i в r
j в с

Также вы знаете, что
в двумерном массиве сначала идут строки, а потом столбцы:
Обявление массива должно выгялеть так: matrix[ROW][COL]
итого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void sum(int** matrix, int& ROW, int& COL) {
    int sum, r;
    for     (int c = 0; c < ROW; c++) {
        sum = 0;
        for (    r = 0; r < COL; r++) {
            if (matrix[c][r] < 0)
                break;
            sum += matrix[r][c];
        }
        if (r == n)
            cout << "sum" << c << " = " << sum << "\n";
    }
}
Теперь даже беглого взгляда достаточно, чтобы увидеть ошибку.

О чем это?
Я о том, что в хаосе достаточно сложно разбираться.
0
9 / 4 / 2
Регистрация: 29.11.2018
Сообщений: 215
27.11.2019, 13:14  [ТС] 13
Цитата Сообщение от XLAT Посмотреть сообщение
хаосе достаточно сложно разбираться
Да, я заметил, спасибо
Примите мои огромные благодарствия за ваши слова. Вы много времени уделили этой теме, мне аж неловко, что незнакомый человек так меня мотивирует
Спасибо Вам большое.
0
Just Do It!
3377 / 1843 / 618
Регистрация: 23.09.2014
Сообщений: 5,835
27.11.2019, 13:27 14
Цитата Сообщение от Pavlory Посмотреть сообщение
Да, я заметил
далее вам этот подход нужно не просто запомнить и знать что он есть,
а регулярно применять в задачах с двумерными массивами, где нужно крутить их индексы.

Вы удивитесь, как резко возрастет ваша скорость в выпекании решения проходящего тесты.

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

Дальше просто идет ремесло, рутинное закручивание гаек на конвейере.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2019, 13:27
Помогаю со студенческими работами здесь

Вычислить сумму тех элементов матрицы, номера строк и столбцов которых принадлежат некоторым множествам / С++
Дана квадратная матрица А и два непустых множества S1 и S2, состоящие из каких-то элементов от 1 до...

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

Вычислить сумму элементов тех столбцов матрицы, первый элемент которых превосходит заданное число a
Вычислить сумму элементов тех столбцов двухмерного массива(3*4),первый элемент которых превосходит...

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru