The VEX Visual Studio Code Extension has replaced VEXcode Pro V5, which is now end-of-life.
VEXcode Blocks and VEXcode Text remain actively developed and supported for all VEX platforms.
Muestra: Una función simple de máximo común denominador (GCD) (con algoritmo euclídeo)
La siguiente muestra también ejemplifica cómo se está utilizando en una estructura de bucle simple.
Sin usar una función definida por el usuario:
int main() {
int resto = 1;
int a1, b1, a2, b2;
vexcodeInit ();
a1 = a2 = 20;
b1 = b2 = 64;
while(resto > 0){
resto = a1 % b1;
a1 = b1;
b1 = resto;
}
Brain.Screen.printAt (5, 60, "GCD ( %d, %d ) = %d", a2, b2, a1);
a1 = a2 = 60;
b1 = b2 = 200;
while(resto > 0){
resto = a1 % b1;
a1 = b1;
b1 = resto;
}
Brain.Screen.printAt (5, 60, "GCD ( %d, %d ) = %d", a2, b2, a1);
}
Uso de una función definida por el usuario:
int getGCD(int a, int b){
int resto = 1;
while(resto>0){
resto = a % b;
a = b;
b = resto;
}
return a;
}
int main() {
vexcodeInit ();
Brain.Screen.printAt (5, 60, "GCD ( %d, %d ) = %d", getGCD (20, 64));
Brain.Screen.printAt (5, 60, "GCD ( %d, %d ) = %d", getGCD (60, 100));
}
Aquí se muestra la secuencia del flujo lógico de la función de llamada main():
Muestra: Promediar un conjunto de números
float doAverage(int n1, int n2, int n3){
float avg = (n1 + n2 + n3)/3;
return avg;
}
int main() {
int n1, n2, n3;
Brain.Screen.print ("average(%d, %d, %d) = %d", 10, 20, 30);
doAverage (10, 20, 30);
n1=10; n2=20; n3=40;
Brain.Screen.print ("average(%d, %d, %d) = %d", n1, n2, n3);
doAverage (n1, n2, n3);
}
Ejemplo: Permitir que un robot avance con el valor de los codificadores de variables
void reportMotionValues (){
Brain.Screen.printAt (5,100, "%8.2lf%8.2lf%8.2f",
LeftMotor.position (rev),
LeftMotor.position (deg));
}
void goStraight (float totalEnc, float vel){
LeftMotor.resetPosition ();
LeftMotor.setVelocity (50.0, percent);
LeftMotor.spinToPosition (totalEnc, deg, true);
return;
}
int main() {
int enc=1000; // >0: forward, <0: backward
vexcodeInit ();
for(int i=0; i<10; i++){
enc *= -1;
goStraight (enc, 100);
Brain.Screen.printAt (5,60, "Done");
reportMotionValues ();
//this delay is here only for you to view these actions.
//No tienes que poner un retraso aquí.
wait(2000, msec);
}
}
Como puede ver, es casi imposible permitir que el robot avance y retroceda un número variable de veces; ya que solo se puede determinar en tiempo de ejecución.