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.
Ejemplo: Una función simple de máximo común denominador (MCD) (con el algoritmo de Euclides)
El siguiente ejemplo también ejemplifica cómo se utiliza en una estructura de bucle simple.
Sin utilizar 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, "MCD ( %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, "MCD ( %d, %d ) = %d", a2, b2, a1);
}
Utilizando una función definida por el usuario:
int getGCD(int a, int b){
int remainder = 1;
while(remainder>0){
remainder = a % b;
a = b;
b = remainder;
}
return a;
}
int main() {
vexcodeInit();
Brain.Screen.printAt(5, 60, "MCD ( %d, %d ) = %d",getGCD(20, 64));
Brain.Screen.printAt(5, 60, "MCD ( %d, %d ) = %d",getGCD(60, 100));
}
El siguiente video muestra cómo fluye la secuencia lógica desde la función que realiza la llamada, main():
Ejemplo: Calcular el promedio de 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("promedio(%d, %d, %d) = %d", 10, 20, 30);
doAverage(10, 20, 30);
n1=10; n2=20; n3=40;
Brain.Screen.print("promedio(%d, %d, %d) = %d", n1, n2, n3);
doAverage(n1, n2, n3);
}
Ejemplo: Permitir que un robot avance con valores de codificadores 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: adelante, <0: atrás
vexcodeInit();
for(int i=0; i<10; i++){
enc *= -1;
goStraight(enc, 100);
Brain.Screen.printAt(5,60, "Listo");
reportMotionValues();
//Este retraso está aquí solo para que puedas ver estas acciones.
//No es necesario poner un retardo aquí.
esperar(2000, mseg);
}
}Como puede ver, es casi imposible permitir que el robot avance y retroceda un número variable de veces; ya que sólo se puede determinar en tiempo de ejecución.