Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Как расчитать сумму для каждой строки массива (http://forum.oszone.net/showthread.php?t=249306)

pashazt 17-12-2012 01:32 2046861

Как расчитать сумму для каждой строки массива
 
Вот функция, которая 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 2047009

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
как сделать так, чтобы считало отдельно для каждой строки, и не учитывало этот самый первый положительный элемент? »

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

Drongo 17-12-2012 22:01 2047609

Передавать в функцию нужно одномерный массив - построчно.
Делать надо в одном цикле.
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 2050083

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;
 
}


lxa85 21-12-2012 10:30 2050230

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

torauma 21-12-2012 16:00 2050414

Цитата:

Цитата pashazt
int j = ++BlackAndBlue; »

Засунуть инкремент внутрь операции с присваиванием - очень плохая идея. В порядке выполнения операций тут разобраться весьма непросто.
Так как этот момент неочевиден, немного поясню. Операция
Код:

++BlackAndBlue
не равносильна выражению
Код:

BlackAndBlue + 1
На самом деле она равносильна выражению
Код:

BlackAndBlue = BlackAndBlue + 1

Drongo 21-12-2012 18:20 2050495

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

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

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



Время: 18:06.

Время: 18:06.
© OSzone.net 2001-