Программирование LEGO NXT роботов на языке NXC - Управляющие структуры

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск

Автор: Daniele Benedettelli

Перевод: © Ботов Антон aka =DeaD=, 2009

Эксклюзивно для www.roboforum.ru
копирование на другие ресурсы и публикация перевода
без разрешения его автора запрещены

Управляющие структуры

В предыдущих главах мы видели операторы "repeat" и "while". Эти операторы управляют тем, каким образом выполняются или не выполняются другие операторы программы. Такие операторы называются “управляющие структуры”. В этой главе мы познакомимся с другими управляющими структурами.

Оператор "if"

Иногда возникает необходимость выполнять какую-то часть программы только в какой-то ситуации. В этом случае используется оператор "if". Давайте я вам покажу как это делается на примере. Для этого мы добавим новый трюк в программу, с которой мы работали в предыдущей главе. Мы хотим, чтобы робот проезжал прямо, а потом поворачивал случайным образом либо вправо, либо влево. Чтоб добиться такого поведения от робота мы опять будем использовать случайные числа. Мы берём случайное число, которое либо положительное, либо отрицательное. Если это число меньше 0 мы делаем поворот направо, иначе поворот налево. Вот получившаяся программа:

#define MOVE_TIME 500
#define TURN_TIME 360
task main()
{
  while(true)
  {
    OnFwd(OUT_AC, 75);
    Wait(MOVE_TIME);
    if (Random() >= 0)
    {
      OnRev(OUT_C, 75);
    }
    else
    {
      OnRev(OUT_A, 75);
    }
    Wait(TURN_TIME);
  }
}

Оператор "if" выглядит похожим на оператор "while". Если условие внутри круглых скобок истинно, тогда выполняется часть программы заключенная в фигурные скобки. В противном случае, выполняется часть программы заключенная в фигурные скобки после ключевого слова "else". Давайте подробнее взглянем на условие которое мы использовали. Оно выглядит как "Random() >= 0". Это означает что значение Random() должно быть больше или равно 0, чтобы условие считалось истинным. Вы можете сравнивать значения различными способами, вот наиболее важные из них:

  • "==" равно;
  • "<" меньше;
  • "<=" меньше или равно;
  • ">" больше;
  • ">=" больше или равно;
  • "!=" не равно.

Вы можете комбинировать условия используя ключевое связку "&&", которая означает логическое "и", или связку "||", которая означает логическое “или”. Вот некоторые примеры условий:

"true" всегда истинно
"false" никогда не истинно
"ttt != 3" истинно, когда "ttt" не равно 3
"(ttt >= 5) && (ttt <= 10)" истинно, когда "ttt" лежит между 5 и 10 включительно
"(aaa == 10) || (bbb == 10)" истинно, если "aaa" или "bbb" (или и то и другое) равно 10

Note that the if statement has two parts. The part immediately after the condition, which is executed when the condition is true, and the part after the else, which is executed when the condition is false. The keyword else and the part after it are optional. So you can omit them if there is nothing to do when the condition is false.

Оператор "do"

There is another control structure, the do statement. It has the following form: do { statements; } while (condition); The statements between the brackets after the do part are executed as long as the condition is true. The condition has the same form as in the if statement described above. Here is an example of a program. The robot runs around randomly for 20 seconds and then stops. int move_time, turn_time, total_time; task main() { total_time = 0; do { move_time = Random(1000); turn_time = Random(1000); OnFwd(OUT_AC, 75); Wait(move_time); OnRev(OUT_C, 75); Wait(turn_time); total_time += move_time; total_time += turn_time; } while (total_time < 20000); Off(OUT_AC); } Note also that the do statement behaves almost the same as the while statement. But in the while statement the condition is tested before executing the statements, while in the do statement the condition is tested at the end. For the while statement, the statements might never be executed, but for the do statement they are executed at least once. Summary In this chapter we have seen two new control structures: the if statement and the do statement. Together with the repeat statement and the while statement they are the statements that control the way in which the program is executed. It is very important that you understand what they do. So better try some more examples yourself before continuing.