Последовательность с шагом 3

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Подскажите с формулой для следующей последовательности:

при x=1: y=0,1,2
при x=2: y=0,1,2
при x=3: y=0,1,2
при x=4: y=3,4,5
при x=5: y=3,4,5
при x=6: y=3,4,5
при x=7: y=6,7 (8 необязательно)
при x=8: y=6,7 (8 необязательно)

Этот код дает почти правильный результат:

byte y;
void setup() 
{                
  Serial.begin(9600);
  for (byte x = 1; x < 9; x++)
  {
    Serial.print("x=");
    Serial.print(x);
    Serial.print(": y=");
    for (byte i = 0; i < 3; i++)
    {
      y = 3*(x>3) + i;
      Serial.print(y);
      Serial.print(",");
    }
    Serial.println();
  }
}

void loop() 
{
}

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

во, если строку 12 заменить на 

if (x < 7) y = 3*(x>3) + i;
      else y = 6*(x>3) + i;

то вывод получается правильный.

Но это костыль какой-то, хочется изящности, т.е. одной универсальной формулы :)

step962
Offline
Зарегистрирован: 23.05.2011

Может быть так:

byte y;
void setup() 
{                
  Serial.begin(9600);
  for (byte x = 1; x < 9; x++)
  {
    Serial.print("x=");
    Serial.print(x);
    Serial.print(": y=");
    y=(x-1)/3;
    for (byte i = 0; i < 3; i++)
    {
      Serial.print(y++);
      Serial.print(",");
    }
    Serial.println();
  }
}

void loop() 
{
}