Двойной for

Я хотел бы чтобы сделалось два действия и с разными условиями одновременно в for.

Пробовали, что-то не получилось? - покажите код

Ну, “хотел бы”, так и “делал бы”.
Мы то здесь при чём?

1 лайк

@b707 а вообще понял чего он “хотел бы”? По мне, так это бессмысленный набор слов. Нет?

Не так давно тут один деятель хотел

два действия и с разными условиями одновременно

в return. Этот в for хочет. Чего им всем надо-то?

1 лайк

Нет. Но в данном случае это не имеет значения. В любом случае это вопрос из разряда “сделайте за меня”. Вот если он придет с кодом и покажет, что пытался сам - тогда и отвечать будем

Rostyslav, мне кажется, Вам нужен двухъядерный процессор.
Я угадал?

И кто тебе запрещает ?


for(int i=0,b=0,c=8;i<5&&b>3&&c==0;i++,b++,c--){
      //  что то делаем
    }

Два действия, с разными условиями, но одновременно. Я ничего не понял, если честно…

Или имелось ввиду что-то такое:

for (uint8_t i = 0; i < n; i++) {
    if (условие1) {
       // действие1
    }
    if (условие2) {
       // действие2
    }
}

Аккуратным надо быть с условиями. Как по мне конкретно этот фор ни разу не крутанётся из за b > 3

А где ТС???
Вот народ - задаст идиотский вопрос, весь форум голову ломает - а ТС может и не придет вовсе.

2 лайка

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

А я чё? Я ни чё. Просто предупредил последователей тройного фор на возможные грабли. Эта конструкция отлично работает, когда внутри цикла что нибудь делаешь с форными переменными. Иногда приходится прыгать туда сюда при переборе массивов. Максимальные значения форных переменных не дают вывалиться за границы массивов. Особенно если их область определения вынести за for и проанализировать после выхода. Но это очень специфическая задача.

1 лайк

Вышло
Спасибо!!!

Чё вышло-то? Код где? Тут никто толком не понял чего нужно было, а Вы - вышло! Код выкладывайте!

Ну, чо абычна из человеков выходит. Лишнее.

4 лайка

И почему мне сразу вспомнилась поговорка… “Толк из тебя выйдет!!! Бестолочь останется” :slight_smile:

2 лайка

Вот код

void setup()
{
  for (int i = 2; i < 6; i++)
  {
    pinMode(i, OUTPUT);
  }
  for (int m = 8; m < 12; m++)
  {
    pinMode(m, OUTPUT);
  }
}
void loop(){
  for (int i=2,m=8;i<6,m<12;i++,m++){
    digitalWrite(i, HIGH);
    digitalWrite(m, HIGH);
    delay(500);
    
  }
  delay(500);
  for (int i=5,m=11;i>1,m>7;i--,m--){
    digitalWrite(i, LOW);
        digitalWrite(m, LOW);
    delay(500);
  }
  delay(500);
}

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

А во-вторых, раз у вас в обоих группах по четыре пина (а иначе бы и не работало) - нафига вам циклы с двумя условиями?
Все что было нужно - задать первый пин в каждой группе, а дальше просто прокрутить цикл 4 раза.
Вместо вот этой зауми, в которой очень просто ошибится:

пишете так:

byte start_a =2;  // первый пин в первой группе
byte start_b =8; // первый пин во второй группе
for (int i =0; i<4; i++){
digitalWrite(start_a + i, HIGH);
digitalWrite(start_b + i, HIGH);
delay(500);
}

именно этот случай :slight_smile:

1 лайк

Как, по-Вашему, вот это работает? Можете объяснить толком? Что, в данном случае означает запятая в выражении i<6,m<12? “И”? “ИЛИ”? Ещё чёнить?