Как считать вверх и вниз, используя For Loop - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу получить вывод, подобный этому, используя вложенные циклы:

0 0
0 1
0 2
0 3
1 3
1 2
1 1
1 0
2 0
2 1
2 2
2 3
3 3
3 2
3 1
3 0

Итак, я пришел к такому решению:

for(i=0;i<4;i++) {    
 if(i == 1){      
  for(j=3;j>=0;--j) {
    Serial.print(i);
    Serial.print(" ");
    Serial.println(j);       
  }      
}else if(i == 3){      
  for(j=3;j>=0;--j) {
    Serial.print(i);
    Serial.print(" ");
    Serial.println(j);     
  }      
}else{
  for(j=0;j<4;j++) {
    Serial.print(i);
    Serial.print(" ");
    Serial.println(j);
  }      
}
}

Это работает, но есть способ сделать это без условий внутри петель?

Ответы [ 3 ]

2 голосов
/ 17 апреля 2020

Вот, пожалуйста.

#include <stdio.h>

int main(void) 
{
    const int N = 3;

    for ( int i = 0; i <= N; i++ )
    {
        for ( int j = 0; j <= N; j++ )
        {
            printf( "%d %d\n", i , i % 2 == 0 ? j : N - j );
        }
    }

    return 0;
}

Вывод программы:

0 0
0 1
0 2
0 3
1 3
1 2
1 1
1 0
2 0
2 1
2 2
2 3
3 3
3 2
3 1
3 0

Или циклы можно записать как

const int N = 4;

for ( int i = 0; i < N; i++ )
{
    for ( int j = 0; j < N; j++ )
    {
        printf( "%d %d\n", i , i % 2 == 0 ? j : N - j - 1 );
    }
}
1 голос
/ 17 апреля 2020

Я не парень Arduino, но так как он похож на C, и этот вопрос больше об алгоритме, позвольте мне набросать подход в C:

#define LEFT_START (0)
#define LEFT_END (3)
#define RIGHT_START (0)
#define RIGHT_END (3)

enum DIRECTION {
  DOWN = -1,
  UP = 1
};

int main(void)
{
  for (int direction = UP, i = LEFT_START, j = RIGHT_START - sign; 
    i <= LEFT_END; 
    ++i, direction *= -1)
  {
    for (j += direction;
      j >= RIGHT_START && j <= RIGHT_END;
      j += direction)
    {
      printf("%d %d\n", i, j);
    }
  }
}

Нет, если / тогда, не явно, ни неявно через троичный оператор, кстати. ;)

0 голосов
/ 17 апреля 2020

Я не знаю, какова была ваша цель, но вам нужно использовать утверждение if. Этот код будет делать то, что вы хотите

int n =3;

void setup() {
  // put your setup code here, to run once:
    Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
   for (int i=0; i<=n; i++){
       if(i%2 == 0){
           for (int j=0; j<=n; j++){
               Serial.print(i);
               Serial.print(" ");
               Serial.println(j); 
           }
       }
       else{
           for (int j=n; j>=0; j--){
               Serial.print(i);
               Serial.print(" ");
               Serial.println(j); 
           }
      }
   }
}

Вывод выглядит следующим образом: enter image description here Определение переменных / константы n, i, j полностью выполнено вам на основе вашего проекта. Этот код является простой демонстрацией.

...