C/C++ - Как расчитать сумму для каждой строки массива

Ответить
Аватара пользователя
pashazt

C/C++ - Как расчитать сумму для каждой строки массива

Сообщение pashazt »

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

Вопрос : как сделать так, чтобы считало отдельно для каждой строки, и не учитывало этот самый первый положительный элемент?





Код:

Код: Выделить всё

int sumofmodules( int **s, int rows, int columns )
{
    int sum = 0;
    for ( int i = 0 ; i < rows ; i++ )
        for ( int j = 0 ; j < columns ; j++ )
        {
            if (s[i][j] > 0)
            {
                break;
            }
        }
    for (int i = 0 ; i < rows ; i++)
        for(int j = 0 ; j < columns ; j++)
        {
            sum+=abs(s[i][j]);
        }
    return sum;
}
Аватара пользователя
lxa85

Re: C/C++ - Как расчитать сумму для каждой строки массива

Сообщение lxa85 »

pashazt,
Цитата pashazt:



Вот функция, которая cчитает сумму модулей элементов матрицы, которые находятся после первого положительного элемента.
C/C++ - Как расчитать сумму для каждой строки массива




Она этого не делает.
Цитата pashazt:



for ( int i = 0 ; i < rows ; i++ )

for ( int j = 0 ; j < columns ; j++ )

{

if (s[j] > 0)

{

break;

}

}
C/C++ - Как расчитать сумму для каждой строки массива




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

А второй цикл:


Цитата pashazt:



for (int i = 0 ; i < rows ; i++)

for(int j = 0 ; j < columns ; j++)

{

sum+=abs(s[j]);

}

return sum;
C/C++ - Как расчитать сумму для каждой строки массива




Делает все тоже самое. Т.е. с нова здорово, с нуля и по всем полям.


Цитата pashazt:



как сделать так, чтобы считало отдельно для каждой строки, и не учитывало этот самый первый положительный элемент?
C/C++ - Как расчитать сумму для каждой строки массива




Объединять циклы и добавлять условия.
Аватара пользователя
Drongo

Re: C/C++ - Как расчитать сумму для каждой строки массива

Сообщение Drongo »

Передавать в функцию нужно одномерный массив - построчно.

Делать надо в одном цикле.

break заменить на continue





Код:

Код: Выделить всё

...
  const int rows = 3;  
  const columns = 4;
  int array[rows][columns] = {0};
  for(int i = 0; i < rows; i++)
     cout 
Аватара пользователя
pashazt

Re: C/C++ - Как расчитать сумму для каждой строки массива

Сообщение pashazt »

Вот функция которая считает сумму элементов матрицы, после первого положительного элемента.



1) можно ли сделать так, что бы она считала суму не во всей матрице, а в каждой строчке?

2) зачем там true i false?

3) что в конце означает BlackAndBlue = -1?





Код:

Код: Выделить всё

int sumofmodules( int **s, int rows, int columns )
{
        int sum = 0;
        bool isEnought = false;
        int DontGo = 0;
        int BlackAndBlue = 0;
        for ( int i = 0; i < rows && !isEnought ; i++ )
                {
                        for ( int j = 0; j < columns ; j++ )
                                {
                                        if (s[i][j] > 0)
                                                {
                                                        DontGo = i;
                                                        BlackAndBlue = j;
                                                        isEnought = true;
                                                        break;
                                                }
                                }
                }
        for (int i = DontGo; i < rows ; i++)
                {
                        for(int j = ++BlackAndBlue; j < columns ; j++)
                                {
                                        sum += abs(s[i][j]);
                                }
                        BlackAndBlue = -1;
                }
return sum;
}
Аватара пользователя
lxa85

Re: C/C++ - Как расчитать сумму для каждой строки массива

Сообщение lxa85 »

pashazt, У меня несколько вопросов:Кто писал данную программу?Какой логикой он при этом руководствовался?Какие проверочные матрицы обрабатывались?Что сам автор говорит по поводу введенных им новых переменных и алгоритма решения задачи?Почему программа не решает поставленной задачи?Зачем надо было создавать новую тему, когда можно было продолжить в старой?
Аватара пользователя
torauma

Re: C/C++ - Как расчитать сумму для каждой строки массива

Сообщение torauma »

Цитата pashazt:



int j = ++BlackAndBlue;
C/C++ - Как расчитать сумму для каждой строки массива




Засунуть инкремент внутрь операции с присваиванием - очень плохая идея. В порядке выполнения операций тут разобраться весьма непросто.

Так как этот момент неочевиден, немного поясню. Операция



Код:

Код: Выделить всё

++BlackAndBlue

не равносильна выражению



Код:

Код: Выделить всё

BlackAndBlue + 1

На самом деле она равносильна выражению



Код:

Код: Выделить всё

BlackAndBlue = BlackAndBlue + 1
Аватара пользователя
Drongo

Re: C/C++ - Как расчитать сумму для каждой строки массива

Сообщение Drongo »

Да можно было проще пояснить



Код:

Код: Выделить всё

// Сначала идёт прибавление на единицу BlackAndBule, потом присваивание
int count = ++BlackAndBlue; 
// Сначала идёт присваивание, а потом прибавление на единицу
int count = BlackAndBlue++;
Ответить

Вернуться в «Программирование и базы данных»