Változók#
Bevezetés#
A változók tárolják az adatokat, és lehetővé teszik azok újrafelhasználását és manipulálását a programban. A C++ egy statikusan típusos nyelv, ami azt jelenti, hogy a változó típusát explicit módon kell deklarálni a létrehozásakor. A típus a deklarálás után nem módosítható. Például:
int angle = 90; // angle is an integer
char dist[] = "Distance"; // dist is an array of characters
double steps = 2.5; // steps is a double
A C++ erősen típusos, ami azt jelenti, hogy nem lehet műveleteket végrehajtani inkompatibilis típusokon explicit konverzió nélkül. Például:
int blocks = 2; // blocks is an integer
char rings[] = "4"; // rings is a string
int result = blocks + rings; // Creates a compilation error
Ez az API a C+±ban elterjedt változótípusokat ismerteti. Bár nem teljes lista, lefedi azokat a típusokat, amelyeket a gyakorlatban a legnagyobb valószínűséggel használsz.
Lokális változók — Függvényen belül deklarálva, és csak az adott hatókörön belül használva; ideiglenes vagy elszigetelt értékekhez a legmegfelelőbb.
Globális változók — Függvényeken kívül deklarálhatók, és a projekt során használják; jól használhatók függvények közötti adatmegosztásra.
Integer — Egész számok, amelyeket számlálásra, távolságokra vagy tizedesjegyek nélküli bármi másra használnak.
Double — Nagy pontosságú decimális számok pontosságot igénylő matematikai számításokhoz.
Float — Standard pontosságú decimális számok, hasznosak mérésekhez vagy számításokhoz.
C stílusú karakterlánc — Szöveges értékek, üzenetekhez, címkékhez vagy olvasható kimenet megjelenítéséhez használatos.
Boolean(bool) —
truevagyfalseérték a logikához és a döntéshozatalhoz.Tömbök — Azonos típusú elemek fix méretű gyűjteményei.
2D tömbök — Tömbök tömbjei; ideális sorok, rácsok vagy táblázatszerű adatok ábrázolására.
Const —
constkonstanssal deklarált változó nem módosítható.
Változó deklarálása és értékadása#
C+±ban változó létrehozásához először a típusát kell megadni, majd a változó nevét, és opcionálisan értéket kell hozzárendelni a = operátorral:
int distance = 100;
Változók elnevezésekor a következő szabályokat kell betartani:
A név nem tartalmazhat speciális karaktereket (pl. felkiáltójelet).
A név nem kezdődhet számmal.
A név nem tartalmazhat szóközöket.
A név nem ütközhet előre definiált VEXcode objektumokkal (például:
Drivetrain).A név nem lehet C+±ban foglalt kulcsszó (pl.
int,forstb.).A változók nevei megkülönböztetik a kis- és nagybetűket (pl. a
Distancetávolság ésdistancetávolság különböző változók).
Local Variables#
A lokális változók egy függvényen vagy kódblokkon belül vannak definiálva. Csak az adott függvény vagy blokk hatókörén belül érhetők el, azon kívül nem láthatók.
Definiáld a függvényt (
int main())void show_local() { // This variable only exists inside this function int angle = 90; Brain.Screen.print("%d", angle); }Hívjuk meg a függvényt
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code show_local(); }
A lokális változókat általában olyan ideiglenes értékek tárolására használják, amelyek csak egy adott függvényen vagy a program egy részén belül relevánsak.
Global Variables#
A globális változók bármely függvényen vagy blokkon kívül definiálhatók. Hozzáférhetők és olvashatók a program bárhonnan, beleértve a függvényeken belül is.
Megjegyzés: A globális változók a program bármely pontjáról elérhetők, ami kényelmessé teheti az adatok függvények közötti megosztását. A globális változókra való túlzott támaszkodás azonban nem kívánt mellékhatásokhoz vezethet, mivel a változónak a program egyik részében történő módosítása kiszámíthatatlanul befolyásolhatja a többi részt. Emiatt a lokális változókat általában előnyben részesítjük, amikor csak lehetséges, mivel ezek a változó hatókörét arra az adott függvényre korlátozzák, amelyben definiálva van. Ez csökkenti a konfliktusok valószínűségét és megkönnyíti a hibakeresést.
Definiáld a függvényt (
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(); }Hívjuk meg a függvényt
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); }
A C+±ban a globális változók közvetlenül elérhetők és módosíthatók függvényeken belül, speciális kulcsszavak nélkül. Ha azonban van egy azonos nevű lokális változód, akkor a :: hatókör-feloldási operátorral érheted el a globális változót.
Definiáld a függvényt (
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(); }Hívjuk meg a függvényt
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(); }
Adattípusok#
A C++ számos olyan adattípust támogat, amelyek változókban tárolhatók. Egyes típusok áthelyezhetők, míg mások lehetővé teszik az egyes elemek módosítását. Az alábbiakban a leggyakrabban használt típusok láthatók:
Integer#
Az integer (int) egy egész szám.
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#
A double egy nagy pontosságú (általában 64 bites) tizedesvesszős szám.
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#
A float decimális számokat tárol. A legtöbb VEX projektben a doubles értékeket részesítjük előnyben a float értékekkel szemben, kivéve, ha a memóriahasználat fontos.
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#
A C stílusú karakterlánc (char variable_name[]) egy karaktertömbben tárolt karaktersorozat. A C stílusú karakterláncoknak elég nagynak kell lenniük ahhoz, hogy a szöveget és egy null terminátort tároljanak.
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#
A Boolean (bool) true vagy false értéket jelöl.
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...");
}
}
A logikai értékek a projekt bármely pontján módosíthatók.
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#
A tömbök azonos típusú elemek fix méretű gyűjteményei, a 0. indexszel kezdődően. Jó gyakorlat, ha ismerjük a tömb hosszát, és a létrehozáskor deklaráljuk.
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#
A 2D tömböket általában rácsok, táblázatok vagy mátrixok ábrázolására használják. Minden sor egy adott adatcsoportot jelöl.
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();
}
}
Módosíthatja a 2D tömbön belüli egyes elemeket:
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#
Egy const deklarált változó inicializálása után nem módosítható.
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);
}