Arduino:Справочник языка Arduino/Управляющие операторы/for: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
Строка 8: Строка 8:
Заголовок цикла '''for''' состоит из трех частей:
Заголовок цикла '''for''' состоит из трех частей:


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
for (initialization; condition; increment)  
for (initialization; condition; increment)  
{
{
Строка 19: Строка 19:
== Пример ==
== Пример ==


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div"  highlight="9-12">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"  highlight="9-12">
// Затемнение светодиода с использованием ШИМ-вывода
// Затемнение светодиода с использованием ШИМ-вывода
int PWMpin = 10; // Светодиод последовательно с резистором 470 ом на 10 выводов
int PWMpin = 10; // Светодиод последовательно с резистором 470 ом на 10 выводов
Строка 41: Строка 41:
Например, использование умножения в операторе счетчика цикла позволяет создавать логарифмическую прогрессию:
Например, использование умножения в операторе счетчика цикла позволяет создавать логарифмическую прогрессию:


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
for(int x = 2; x < 100; x = x * 1.5){
for(int x = 2; x < 100; x = x * 1.5){
     println(x);
     println(x);
Строка 51: Строка 51:
Другой пример, плавное уменьшение или увеличение уровня сигнала на светодиод с помощью одного цикла '''for''':
Другой пример, плавное уменьшение или увеличение уровня сигнала на светодиод с помощью одного цикла '''for''':


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div"  highlight="4-8">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"  highlight="4-8">
void loop()
void loop()
{
{

Текущая версия от 12:40, 20 мая 2023

Проверка/Оформление/Редактирование: Мякишев Е.А.


Оператор For

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

Заголовок цикла for состоит из трех частей:

for (initialization; condition; increment) 
{
// операторы выполняющиеся в цикле
}

Инициализация (Initialization) выполняется самой первой и один раз. Каждый раз в цикле проверяется условие (condition), если оно верно, выполняется блок операторов и приращение (increment), затем условие проверяется вновь. Когда логическое значение условия становится ложным, цикл завершается.

Пример

// Затемнение светодиода с использованием ШИМ-вывода
int PWMpin = 10; // Светодиод последовательно с резистором 470 ом на 10 выводов
void setup()
{
 // настройка не нужна 
}
void loop()
{
   for (int i=0; i <= 255; i++){
      analogWrite(PWMpin, i);
      delay(10);
   }
}

Советы по применению

Цикл for в Си гораздо более гибкий, чем циклы for в других языках программирования, например, в Бейсике. Любой из трех или все три элемента заголовка могут быть опущены, хотя точки с запятой обязательны. Также операторы для инициализации, условия и приращения цикла могут быть любым допустимым в Си операторами с независимыми переменными, и использовать любой тип данных Си, включая данные с плавающей точкой (floats). Эти необычные для цикла for типы операторов позволяют обеспечить программное решение некоторых нестандартных проблем.

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

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);
   }
}

См.также

Внешние ссылки