Как расчитать сумму для каждой строки массива
Вот функция, которая 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;
}
|
pashazt,
Цитата:
Цитата pashazt
Вот функция, которая cчитает сумму модулей элементов матрицы, которые находятся после первого положительного элемента. »
|
Она этого не делает.
Цитата:
Цитата pashazt
for ( int i = 0 ; i < rows ; i++ )
for ( int j = 0 ; j < columns ; j++ )
{
if (s[i][j] > 0)
{
break;
}
} »
|
Находит первый положительный элемент, после чего прерывает вычисления, правда не понятно какого цикла.
А второй цикл:
Цитата:
Цитата pashazt
for (int i = 0 ; i < rows ; i++)
for(int j = 0 ; j < columns ; j++)
{
sum+=abs(s[i][j]);
}
return sum; »
|
Делает все тоже самое. Т.е. с нова здорово, с нуля и по всем полям.
Цитата:
Цитата pashazt
как сделать так, чтобы считало отдельно для каждой строки, и не учитывало этот самый первый положительный элемент? »
|
Объединять циклы и добавлять условия.
|
Передавать в функцию нужно одномерный массив - построчно.
Делать надо в одном цикле.
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;
}
|
true/false
Вот функция которая считает сумму элементов матрицы, после первого положительного элемента.
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;
}
|
pashazt, У меня несколько вопросов: - Кто писал данную программу?
- Какой логикой он при этом руководствовался?
- Какие проверочные матрицы обрабатывались?
- Что сам автор говорит по поводу введенных им новых переменных и алгоритма решения задачи?
- Почему программа не решает поставленной задачи?
- Зачем надо было создавать новую тему, когда можно было продолжить в старой?
|
Цитата:
Цитата pashazt
int j = ++BlackAndBlue; »
|
Засунуть инкремент внутрь операции с присваиванием - очень плохая идея. В порядке выполнения операций тут разобраться весьма непросто.
Так как этот момент неочевиден, немного поясню. Операция
не равносильна выражению
На самом деле она равносильна выражению
Код:
BlackAndBlue = BlackAndBlue + 1
|
Да можно было проще пояснить
Код:
// Сначала идёт прибавление на единицу BlackAndBule, потом присваивание
int count = ++BlackAndBlue;
// Сначала идёт присваивание, а потом прибавление на единицу
int count = BlackAndBlue++;
|
Время: 18:06.
© OSzone.net 2001-