For

Материал из MK90.ORG wiki
Перейти к:навигация, поиск

Справка Язык | Библиотеки | Сравнение | Изменения

Оператор for

Описание

Оператор for обычно используется для многократного повторения блока операторов, заключенных в фигурные скобки. Для управления повторениями и выходом из цикла обычно используется переменная-инкрементальный счетчик. For пригоден для любой повторяющейся операции - например, при работе с массивами или инициализации группы универсальных пинов.

В круглых скобках после ключевого слова for указываются три секции:


for (инициализация; условие; инкремент) {
  //оператор(ы);
}

ForLoopIllustratedRu.png

Сначала выполняется Инициализация, причем только один раз. Затем проверяется условие; если оно истинно, выполняется блок операторов в фигурных скобках, затем - выполняется секция инкремента. После этого снова проверяется условие - и так далее, пока условие не станет ложно - в этом случае цикл завершится. Обратите внимание, что если после инициализации условие ложно, то операторы в фигурных скобках не будут выполнены ни одного раза.

Пример


// Плавное изменение яркости светодиода через ШИМ

int PWMpin = 10; // светодиод подключен к пину 10 последовательно с резистором 470 Ом

void setup()
{
  // setup не требуется
}

void loop()
{
   for (int i=0; i <= 255; i++){
      analogWrite(PWMpin, i);
      delay(10);
   } 
}

Советы по использованию

Оператор for в C намного более гибок, чем в других языках программирования, включая BASIC. Например, любая из трех секций может быть опущена (присутствие точки с запятой обязательно). Кроме того, в секциях инициализации, условия и инкремента можно использовать любое выражение C, использующее произвольные переменные, любых объявленных типов (даже с плавающей точкой). Таким образом можно реализовать нестандартные (на первый взгляд) решения.

Например, используя в секции инкремента умножение, можно генерировать логарифмическую прогрессию:


for (int x = 2; x < 100; x = x * 1.5) {
   println(x);
}

Вывод: 2,3,4,6,9,13,19,28,42,63,94

Или, плавное гашение и зажигание светодиода в одном цикле for:


void loop()
{
   int x = 1;
   for (int i = 0; i > -1; i = i + x){
      analogWrite(PWMpin, i);
      if (i == 255) x = -1;         // переключаем направление на пике яркости
      delay(10);
   } 
}

Смотри также:

Руководство по Wiring


Исправления, пожелания и новые статьи должны быть опубликованы через Форум.

Оригинальные тексты руководств и переводы распространяются Arduino и MK90 на условиях лицензии Creative Commons Attribution-ShareAlike 3.0 License. Примеры исходных кодов и ссылки являются общественным достоянием.