Змінні#
Вступ#
Змінні зберігають дані та дозволяють вам повторно використовувати їх і маніпулювати ними протягом усієї програми. C++ — це статично типізована мова, тобто ви повинні явно оголосити тип змінної під час її створення. Тип не можна змінити після оголошення. Наприклад:
int angle = 90; // angle is an integer
char dist[] = "Distance"; // dist is an array of characters
double steps = 2.5; // steps is a double
C++ також є строго типізованою мовою, що означає, що ви не можете виконувати операції над несумісними типами без явного перетворення. Наприклад:
int blocks = 2; // blocks is an integer
char rings[] = "4"; // rings is a string
int result = blocks + rings; // Creates a compilation error
Цей API пояснює поширені типи змінних у C++. Хоча список не є вичерпним, він охоплює типи, які ви найімовірніше використовуватимете на практиці.
Локальні змінні — Оголошуються всередині функції та використовуються лише в межах цієї області видимості; найкраще підходить для тимчасових або ізольованих значень.
Глобальні змінні — Оголошуються поза будь-якою функцією та використовуються протягом усього проєкту; добре підходять для обміну даними між функціями.
Ціле число — Цілі числа, що використовуються для підрахунку, відстаней або будь-чого без десяткових знаків.
Double — Високоточні десяткові числа для математичних обчислень, що потребують точності.
Float — Десяткові числа стандартної точності, корисні для вимірювань або обчислень.
Рядок у стилі C — Текстові значення, що використовуються для повідомлень, міток або відображення читабельного виводу.
Boolean (bool) —
trueабоfalseзначення для логіки та прийняття рішень.Масиви — Колекції елементів одного типу фіксованого розміру.
2D Arrays — Масиви масивів; ідеально підходять для представлення рядків, сіток або таблично подібних даних.
Const — Змінну, оголошену з
constне можна змінити.
Оголошення та присвоєння змінної#
Щоб створити змінну в C++, потрібно оголосити її тип, потім вказати ім’я змінної, а потім, за бажанням, присвоїти значення за допомогою оператора =:
int distance = 100;
Під час найменування змінної необхідно дотримуватися таких правил:
Ім’я не може містити спеціальні символи (наприклад, знак оклику).
Ім’я не може починатися з цифри.
Ім’я не може містити пробіли.
Назва не може конфліктувати з попередньо визначеними об’єктами VEXcode (наприклад,
Drivetrain).Ім’я не може бути зарезервованим ключовим словом C++ (наприклад,
int,forтощо).Назви змінних чутливі до регістру (наприклад,
Distanceтаdistance– це різні змінні).
Local Variables#
Локальні змінні визначені всередині функції або блоку коду. Вони доступні лише в межах області видимості цієї функції або блоку та невидимі поза нею.
Визначити функцію (поза
int main())void show_local() { // This variable only exists inside this function int angle = 90; Brain.Screen.print("%d", angle); }Викликати функцію всередині
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code show_local(); }
Локальні змінні зазвичай використовуються для зберігання тимчасових значень, які є релевантними лише в межах певної функції або частини програми.
Global Variables#
Глобальні змінні визначені поза будь-якою функцією або блоком. До них можна отримати доступ та їх можна прочитати будь-де в програмі, включаючи всередині функцій.
Примітка: Глобальні змінні доступні з будь-якого місця програми, що робить їх зручними для обміну даними між функціями. Однак надмірна залежність від глобальних змінних може призвести до небажаних побічних ефектів, оскільки зміни змінної в одній частині програми можуть непередбачувано вплинути на інші частини. З цієї причини, як правило, перевага надається локальних змінних, коли це можливо, оскільки вони обмежують область дії змінної конкретною функцією, де вона визначена. Це зменшує ймовірність конфліктів і спрощує налагодження.
Визначити функцію (поза
int main())// The variable is defined outside a function int angle = 90; void show_global() { // You can access 'angle' inside a function Brain.Screen.print("%d", angle); Brain.Screen.newLine(); }Викликати функцію всередині
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code show_global(); Brain.Screen.print("%d", angle); }
У C++ до глобальних змінних можна отримати безпосередній доступ та змінити їх з функцій без використання спеціальних ключових слів. Однак, якщо у вас є локальна змінна з таким самим іменем, ви можете використовувати оператор визначення області видимості :: для доступу до глобальної змінної.
Визначити функцію (поза
int main())// Define the global variable int count = 0; void increase_count() { // Global variables can be accessed directly count = count + 1; Brain.Screen.print("Count: %d", count); Brain.Screen.newLine(); }Викликати функцію всередині
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code increase_count(); increase_count(); }
Типи даних#
C++ підтримує кілька типів даних, які можна зберігати у змінних. Деякі типи можна перепризначати, тоді як інші дозволяють змінювати окремі елементи. Нижче наведено найпоширеніші типи:
Integer#
Ціле число (int) — це ціле число.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
int distance = 100;
// Move the robot forward for the variable value in mm
Drivetrain.driveFor(forward, distance, mm);
// Add to the variable and move forward the new value,
// for 200mm total
wait(1, seconds);
distance = distance + 100;
Drivetrain.driveFor(forward, distance, mm);
}
Double#
Double — це десяткове число з високою точністю (зазвичай 64-бітне).
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Store a value with decimal points
double raw_value = 0.88;
// Print the decimal value as a percentage
Brain.Screen.print("%.1f%%", raw_value * 100);
}
Float#
Тип float зберігає десяткові числа. У більшості проектів VEX тип doubles є кращим за тип float, якщо використання пам’яті не є проблемою.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Store a value with decimal points
float raw_value = 0.88;
// Print the decimal value as a percentage
Brain.Screen.print("%.1f%%", raw_value * 100);
}
String#
Рядок у стилі C (char variable_name[]) – це послідовність символів, що зберігається в масиві символів. Рядки у стилі C повинні бути достатньо великими, щоб зберігати текст та нульовий символ завершення.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Set the variable to a string then print the string
char message[] = "Ready!";
Brain.Screen.print(message);
}
Boolean#
Логічне значення (bool) представляє true або false.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Set the state of the variable
bool delivered = false;
// Print different messages depending on the Boolean.
if (delivered) {
Brain.Screen.print("Package delivered!");
} else {
Brain.Screen.print("Delivering...");
}
}
Булеві значення можна змінити в будь-який момент проекту.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Print the value of the delivered variable
bool delivered = false;
// Print different messages depending on the Boolean.
if (delivered) {
Brain.Screen.print("Package delivered!");
} else {
Brain.Screen.print("Delivering...");
}
wait(2, seconds);
// Clear the screen and print the value of the variable again
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1,1);
delivered = true;
// Print different messages depending on the Boolean.
if (delivered) {
Brain.Screen.print("Package delivered!");
} else {
Brain.Screen.print("Delivering...");
}
}
Arrays#
Масиви – це колекції елементів одного типу фіксованого розміру, починаючи з індексу 0. Рекомендується знати довжину масиву та оголошувати його під час створення.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Declare an array of 5 integers
int distances[5] = {100, 200, 150, 300, 250};
// Drive and turn 4 times to move the distance of the first four distances of the array
for (int i = 0; i < 4; i++) {
Drivetrain.driveFor(forward, distances[i], mm);
Drivetrain.turnFor(right, 90, degrees);
}
}
2D Arrays#
Двовимірний масив зазвичай використовується для представлення сіток, таблиць або матриць. Кожен рядок представляє певну групу даних.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Assign the values in the matrix 2D array
int matrix[3][3] = {
{ 0, 1, 2 },
{ 3, 4, 5 },
{ 6, 7, 8 }
};
// Loop through each row
for (int i = 0; i < 3; i++) {
// Loop through each column in the row
for (int j = 0; j < 3; j++) {
Brain.Screen.print("%d, ", matrix[i][j]);
}
Brain.Screen.newLine();
}
}
Ви можете змінювати певні елементи в межах 2D-масиву:
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Assign the values in the matrix 2D array
int matrix[3][3] = {
{ 0, 1, 2 },
{ 3, 4, 5 },
{ 6, 7, 8 }
};
// Modify the color (in column 2) in row 0
matrix[0][1] = 200;
// Print the modified row from the matrix 2D array
for (int j = 0; j < 3; j++) {
Brain.Screen.print("%d, ", matrix[0][j]);
}
}
Constant Variables#
Змінну, оголошену з const не можна змінити після її ініціалізації.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
const int maxSpeed = 100;
// maxSpeed can be used like a normal variable
Drivetrain.setDriveVelocity(maxSpeed, percent);
}