помогите разобраться с функцией переключения - триггером

 

Ребята подскажите пожалуйста как написать триггер/переключатель...


допустим есть значение "А" (наше депо) при этом работает "Алгоритм1"

при изменении "А" в меньшую сторону на 1% вместо "Алгоритм1" начинает работать "Алгоритм2"...

при дальнейшем уменьшении "А" еще на 1% "Алгоритм2" переключается обратно на "Алгоритм1"


такая конструкция - у меня не работает:

double depo = AccountBalance( );

int triger = 0;

if (triger == 0)
{
   triger = 1;
   double   depo2 = depo;
}

if (triger == 1 && depo2 > depo + depo * 0.01) 
{
   triger = 2;
   depo2 = depo;
}

if (triger == 2 && depo2 > depo + depo * 0.01) 
{
   triger = 1;
   depo2 = depo;
}


if (triger == 1) Print("triger1 " + depo2);
if (triger == 2) Print("triger2 " + depo2);
в чем моя ошибка?
 
bor-ix:
в чем моя ошибка?

Первое что бросается в глаза переменная triger=0 каждый раз инициализируется нолём, сделайте её статичной.

 
Alexey Valeev:

Первое что бросается в глаза переменная triger=0 каждый раз инициализируется нолём, сделайте её статичной.

вынести в условия?

 
bor-ix:

вынести в условия?

static int, либо объявите её в глобальной области.
 
Artyom Trishkin:
static int, либо объявите её в глобальной области.

static int triger = 0; - не помогает, так же как и в глобальных (в начале кода)...


может каким другим способом можно реализовать?

 
bor-ix:

static int triger = 0; - не помогает, так же как и в глобальных (в начале кода)...

int triger; и  double depo2; на глобальном уровне(в начале кода)

 
Sergey Kolemanov:

int triger; и  double depo2; на глобальном уровне(в начале кода)

спасибо - все получилось! работает!

понял в чем ошибка - учту в дальнейшем!

всем большое спасибо за ответы!

 
bor-ix:
в чем моя ошибка?
double depo = AccountBalance( );

int triger = 0;                                              // При каждом последующем вызове обнуляется

if (triger == 0)
{
   triger = 1;
   double   depo2 = depo;                                   // depo2 объявлено в локальной области данного условия, то есть при следующем вызове когда данное условие не выполняется данной переменной не существует.
}

                                                            // Если условие было else переменной depo2 не существует

 

А не удобнее ли в этом случае использовать switch ?

if(...) x=1; else
if(...) x=2; else
if(...) x=3; else
и т.д. сколько надо


           switch ( x ) 
           {
              case 1:   "Алгоритм1";  break;
              case 2:   "Алгоритм2";  break;
              case 3:   "Алгоритм3";  break;
              и т.д. сколько надо
              default:  "Алгоритм0";   break;
           } 

 
Alexey Valeev:

спасибо за объяснение!

хорошо и доступно объяснил!

 
Олег avtomat:

А не удобнее ли в этом случае использовать switch ?

в том то и дело что условие - одинаковое... а алгоритм надо менять попеременно...

если бы было разное - можно было бы и switch


ЗЫ: хотя вы тоже наверное правы - можно и так...

Причина обращения: