Контроль#
Введение#
В состав системы управления входят функции для управления временем выполнения, потоком выполнения программы, условной логикой и завершением проекта. Эти элементы управления позволяют приостанавливать выполнение, создавать циклы, определять логические пути и завершать программу.
Функции и ключевые слова#
Ниже приведён список доступных элементов управления, включая функции API и ключевые слова C++:
wait– Приостанавливает проект на заданное время.for– Повторяет блок кода заданное количество раз.if– Выполняет блок кода, если условие истинно.if/else– Выполняет один блок кода, если условие истинно, или другой блок, если оно ложно.if/else if/else– Проверяет несколько условий по порядку и выполняет первый блок, условие которого истинно.while– Повторяет блок кода, пока условие остается истинным.break– Немедленно выходит из текущего цикла.programStop– Немедленно завершает проект.
wait#
Приостанавливает выполнение проекта на определённое время, прежде чем перейти к следующей строке кода.
Available Functionsvoid wait(
double time,
timeUnits units );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Время ожидания, выраженное в виде положительного значения |
|
|
Единица измерения времени: |
Эта функция не возвращает значения.
Examples// Stop driving after 1 second
Drivetrain.drive(forward);
wait(1, seconds);
Drivetrain.stop();
for#
Повторяет блок кода. Форма подсчета выполняется заданное количество раз; форма на основе диапазона выполняется один раз для каждого элемента в коллекции.
Syntax1 — Цикл подсчета — выполняется фиксированное количество раз.
for (int i = 0; i < count; i++) { // code block }
Parameters2 — Цикл на основе диапазона — выполняется один раз для каждого элемента в коллекции.
for (type element : collection) { // code block }
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Количество повторений блока кода. |
|
Тип Имя |
Тип данных каждого элемента в коллекции (например |
|
|
Имя переменной, которая будет хранить значение текущего элемента цикла. |
|
|
Массив (или вектор), содержащий элементы, которые будут перебираться в цикле. |
Данная структура управления не возвращает значения.
Examples// Drive in a square
for (int i = 0; i < 4; i++) {
Drivetrain.driveFor(forward, 100, mm);
Drivetrain.turnFor(right, 90, degrees);
}
// Drive forward different distances
int distances[] = {100, 150, 200};
for (int d : distances) {
Drivetrain.driveFor(forward, d, mm);
wait(0.5, seconds);
}
if#
Выполняется прилагаемый блок кода, если условие равно true.
if (condition) {
// code block
}
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Выражение или переменная, которая вычисляется при выполнении оператора. Если она равна |
Данная структура управления не возвращает значения.
Exampleswhile (true) {
if (Brain.Screen.pressing()) {
// Display a message once the screen is pressed
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print("Screen pressed!");
break;
}
wait(5, msec);
}
if/else#
Определяет, какой из заключенных в скобки блоков кода будет выполнен в зависимости от того, является ли условие true или false.
if (condition) {
// code block if true
}
else {
// code block if false
}
Параметр |
Тип |
Описание |
|---|---|---|
|
|
An expression or variable that is evaluated when the statement runs. If it is |
Данная структура управления не возвращает значения.
Exampleswhile (true) {
if (Brain.Screen.pressing()) {
// Turn the screen green when pressed
Brain.Screen.clearScreen(green);
} else {
Brain.Screen.clearScreen();
}
}
if/else if/else#
Выбирает, какой из заключенных в блок кода будет выполнен, на основе нескольких условий.
Syntaxif (condition) {
// code block if first condition is true
}
else if (condition) {
// code block if second condition is true
}
else {
// code block if no conditions are true
}
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Выражение или переменная, которая оценивается при выполнении оператора. Первое условие, которое равно |
Данная структура управления не возвращает значения.
Notesifвыполняет свой блок, если условие истинно,true.else ifпроверяет дополнительные условия только в том случае, если все предыдущие условия ложныfalseМожно использовать несколько операторовelse if.elseвыполняет свой блок только в том случае, если ни одно из предыдущих условий не выполняетсяtrue.
while (true) {
// Turn screen blue if pressed on the left half
if (Brain.Screen.pressing() && Brain.Screen.xPosition() < 240) {
Brain.Screen.clearScreen(blue);
// Turn screen green if pressed on the right half
} else if (Brain.Screen.pressing() && Brain.Screen.xPosition() > 240) {
Brain.Screen.clearScreen(green);
} else {
Brain.Screen.clearScreen();
}
wait(20, msec);
}
while#
Код выполняется многократно, пока условие равно true.
while (condition) {
// code block
}
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Выражение или переменная, которая вычисляется перед каждой итерацией. Если она равна |
Данная структура управления не возвращает значения.
NotesЕго также можно использовать как оператор «Ждать до», добавив
!перед условием, как показано в примерах ниже.
while (true) {
if (Brain.Screen.pressing()) {
// Turn the screen green whenever it's pressed
Brain.Screen.clearScreen(green);
} else {
Brain.Screen.clearScreen();
}
}
// Wait until the screen is pressed to turn it green
while (!Brain.Screen.pressing()) {
wait(20, msec);
}
Brain.Screen.clearScreen(green);
break#
Выход из текущего цикла происходит немедленно. Если цикл вложенный, break — выход из самого внутреннего цикла.
break;
Данное выражение не принимает никаких параметров.
Return ValuesДанное выражение не возвращает значения.
Exampleswhile (true) {
// Press the screen to pause on a color
Brain.Screen.clearScreen(red);
wait(500, msec);
if (Brain.Screen.pressing()) {
break;
}
Brain.Screen.clearScreen(green);
wait(500, msec);
if (Brain.Screen.pressing()) {
break;
}
}
programStop#
Немедленно завершает проект.
SyntaxBrain.programStop();
Данное выражение не принимает никаких параметров.
Return ValuesДанное выражение не возвращает значения.
Exampleswhile (true) {
// Press the screen to end the project
Brain.Screen.clearScreen(red);
wait(500, msec);
if (Brain.Screen.pressing()) {
Brain.programStop();
}
Brain.Screen.clearScreen(green);
wait(500, msec);
if (Brain.Screen.pressing()) {
Brain.programStop();
}
}