Войти

Показать полную графическую версию : Как расчитать сумму для каждой строки массива


pashazt
17-12-2012, 01:32
Вот функция, которая 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
17-12-2012, 09:49
pashazt, Вот функция, которая cчитает сумму модулей элементов матрицы, которые находятся после первого положительного элемента. »
Она этого не делает.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; »
Делает все тоже самое. Т.е. с нова здорово, с нуля и по всем полям.
как сделать так, чтобы считало отдельно для каждой строки, и не учитывало этот самый первый положительный элемент? »
Объединять циклы и добавлять условия.

Drongo
17-12-2012, 22:01
Передавать в функцию нужно одномерный массив - построчно.
Делать надо в одном цикле.
break заменить на continue

...
const int rows = 3;
const columns = 4;

int array[rows][columns] = {0};

for(int i = 0; i < rows; i++)
cout << sumofmodules(array[i], columns);
...

int sumofmodules(int array[], int column)
{
int total = 0;
for(int i = 0; i < column; i++){
// Сюда исключение
// чтобы считало отдельно для каждой строки, и не учитывало этот самый первый положительный элемент?
total += array[i];
}

return total;
}

pashazt
21-12-2012, 00:30
Вот функция которая считает сумму элементов матрицы, после первого положительного элемента.

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
21-12-2012, 10:30
pashazt, У меня несколько вопросов:
Кто писал данную программу?
Какой логикой он при этом руководствовался?
Какие проверочные матрицы обрабатывались?
Что сам автор говорит по поводу введенных им новых переменных и алгоритма решения задачи?
Почему программа не решает поставленной задачи?
Зачем надо было создавать новую тему, когда можно было продолжить в старой?

torauma
21-12-2012, 16:00
int j = ++BlackAndBlue; »
Засунуть инкремент внутрь операции с присваиванием - очень плохая идея. В порядке выполнения операций тут разобраться весьма непросто.
Так как этот момент неочевиден, немного поясню. Операция
++BlackAndBlue
не равносильна выражению
BlackAndBlue + 1
На самом деле она равносильна выражению
BlackAndBlue = BlackAndBlue + 1

Drongo
21-12-2012, 18:20
Да можно было проще пояснить
// Сначала идёт прибавление на единицу BlackAndBule, потом присваивание
int count = ++BlackAndBlue;

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




© OSzone.net 2001-2012