Хитрая условная математика - PullRequest
0 голосов
/ 07 октября 2011

Это сложно для меня:

У меня четыре группы по 8 светодиодов. A равно 1-8, B равно 9-16, C равно 17-24 и D равно 25-32.

Я пытаюсь выяснить, как написать условное выражение, где

i = 0 //this would be the LED number

loop {
 i = //gets updated here
 if (i is in the first group) {
    //  do stuff
 }  else {
    //do other stuff
 }
}

По сути, мне нужно проверить светодиод перед его выключением, чтобы увидеть, находится ли он в той же группе, что и новый светодиод, который горит.

Если он находится в той же группе, он будет отключен, если он НЕ находится в той же группе, в которой он должен оставаться.

Так что по математике мне нужно посмотреть, находится ли число в определенном диапазоне. Я думаю, я мог бы написать четыре версии

if (i >=8)
...
if(i <=9 && >=16)
...

и т. Д., Но это не очень аккуратно ...

Ответы [ 2 ]

5 голосов
/ 07 октября 2011

Использовать целочисленное деление. Вычтите 1 из обоих значений, затем целочисленное деление на 8. Если они имеют одинаковый результат, то оба светодиода находятся в одном банке.

def samebank(i, j):
  return ((i - 1) // 8) == ((j - 1) // 8)
0 голосов
/ 07 октября 2011
GetLedGroup(i)
  string[] arrLed = {"A","B","C","D"};
  return arrLed[Math.floor(i/8)-1];
...