Здраввствуйте, не могу понять почему не работает цикл do-while...

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Лидочка Математик
Сообщения: 1
Зарегистрирован: 29 мар 2017, 16:02

29 мар 2017, 16:05

Не могу понять вы чем у меня ошибка...

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

#include <iostream>
using namespace std;

const int n(5);
int x[n];
int a[][n]{{ 3,-2, 5, 7,1},
              { 2, 8,10,-3,6},
              { 1, 8, 7, 2,1},
              {-6,-2, 3, 5,6},
              {-1, 3, 5, 5,7}};

// функция для обмена значений между парой переменных
inline void swap(int& a,int& b)
{
     int c(a);
     a = b;
     b = c;
}

// функция для генерации очередной перестановки по предыдущей (из чисел 0,1,2,...,n-1)
bool hasNextPermutation()
{
    static int callNum(1);
    int i(n-2);
    int j(0);
    while((i>=0) && (x[i] >= x[i+1])) --i;
    if(i>=0)
    {
        j = i+1;
        while ((j<(n-1)) && (x[j+1]>x[i])) ++j;
        swap(x[i],x[j]);
        for(j = i+1; j < (n+i+1)/2;
            swap(x[j],x[n-j+i]),++j);
        callNum++;
        return true;
    }
    return false;
}

int main( int argc,char *argv[])
{
      int i(0) ;
      int j(0);
      int det(0);
      int invCount(0);
      int addend(0);

      for (int i = 0; i < n; ++i)
          x[i]= i;

      do{
          for (int i = 0; i < n; i++ )
         {
            for (int j = 0; j < n; ++j)
            {
                  if  (x[i-1] > x[i]) 
                  {
                      invCount++;
                  }

                  for (int i = 0; i < n; i++ )
                  {
                     if (invCount % 2 == 0) { addend ==  a[i][x[i]];}
                     else addend == (-1)*a[i][x[i]] ;
                  }
                  det += addend;
            }
         }
    } 
    while (hasNextPermutation());

    printf("\n\nDeterminant equals= %d\n",det);
    return 0;
}
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

02 апр 2017, 13:22

А как ошибка проявляется?

У меня, к сожалению, сейчас нет времени разбираться в коде, чтобы понять, что было нужно сделать и что было сделано не так.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

02 апр 2017, 17:25

Расскажите, что Вы хотели сделать. Потому что иначе понять, что принимаете за ошибку, не возможно. Все циклы выполняются, но не бесконечны. Как в принципе и должно быть.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить