Вопрос к программистам!!! Пожалуйста помогите решить простую задачу! - страница 3

 
fxsaber:
Вы сильно ошиблись.

да, тот вариант со структурами ничего хорошего не дает, покрайней мере не решает задачу так как нужно. 

Идеальный и самый лучший вариант решения этой задачи от pavlick!!!

 
I_Alex_I:
Ваш вариант не хочет работать, Функция GET_BIT в вашем варианте возвращает значение?
Ну так не проверял же. Скобочку не поставил. Держите
#define GET_BIT(num, bit_pos) ((num >> bit_pos) & 1)
 

Я думаю, тему можно закрыть. варианты решения задачи, есть, аж 2, последний будет самым удобным и быстрым. Быстрота важна, так как данные вычисления, будут происходить внутри цикла, поэтому и заморачивался так. простые алгоритмы умею и сам составлять а вот иногда получается что знаю что нужно сделать а как это сделать (да еще и быстро) не имею представления, но такое как правило редко бывает.

Данные действия мне нужны были для автоматической оптимизации. может и правда кому-то пригодится данный вариант решения. всем спасибо!

 
fxsaber:
Ну так не проверял же. Скобочку не поставил. Держите

щас еще раз перепроверю ))

 
fxsaber:
Ну так не проверял же. Скобочку не поставил. Держите
Да, пожалуй это решение самое верное. и лучше уже и не нужно! СПАСИБО! Знал что можно решить эту задачу сдвигом, только вот с подобными действиями у меня проблемы )))
 
#property strict

#define ALG_SIZE 4
#define ALG1 0
#define ALG2 1
#define ALG3 2
#define ALG4 3

#define GET_BIT(num, bit_pos) ((num >> bit_pos) & 1)
#define IS_ACTIVE(b,n) bool(GET_BIT(n,b)>0)
//#define GET_BIT(num, bit_pos)  uchar((num & (ulong)MathPow(2, bit_pos)) == 0 ? 0 : 1)

void OnStart()
{
   int count = MathPow(2,ALG_SIZE);
   // Проверим битовое представление чисел в диапазоне от 0 - 9
   for(int i=0;  i<count;++ i){
    // Выводим 4 первых бита
      Print( "i=", IntegerToString(i,3), "  ", GET_BIT(i,3), GET_BIT(i,2), GET_BIT(i,1), GET_BIT(i,0) );
//      Print( "i=", IntegerToString(i,3), "  ", IS_ACTIVE(3,i), IS_ACTIVE(2,i), IS_ACTIVE(1,i), IS_ACTIVE(0,i));

      if (IS_ACTIVE(ALG1,i)){
         //действия алгоритма 1
         //...   
      }
      if (IS_ACTIVE(ALG2,i)){
         //действия алгоритма 2
         //...   
      }
      if (IS_ACTIVE(ALG3,i)){
         //действия алгоритма 3
         //...   
      }
      if (IS_ACTIVE(ALG4,i)){
         //действия алгоритма 4
         //...   
      }
   }
}
Вот собственно что мне было нужно )). Благодарю всех кто принял участие в дискуссии! И за предоставленные варианты!
 
Только аргументы в макросах в скобки заключите. А то при вызовах вроде GET_BIT(i + 1, 2 + 3) сюрпризы будут.
 
Sergei Vladimirov:
Только аргументы в макросах в скобки заключите. А то при вызовах вроде GET_BIT(i + 1, 2 + 3) сюрпризы будут.
#define GET_BIT(num,bit_pos) (((num) >> (bit_pos))&1)
#define IS_ACTIVE(b,n) (bool(GET_BIT(n,b)>(0)))
так?
 
Да.
 
Sergei Vladimirov:
Да.
спасибо ;)!
Причина обращения: