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.
Exemple : une fonction simple du plus grand dénominateur commun (GCD) (avec l'algorithme d'Euclide)
L'exemple suivant illustre également comment il est utilisé dans une structure de boucle simple.
Sans utiliser de fonction définie par l'utilisateur :
int main() {
int reste = 1 ;
int a1, b1, a2, b2 ;
vexcodeInit();
a1 = a2 = 20 ;
b1 = b2 = 64 ;
while(reste > 0){
reste = a1 % b1 ;
a1 = b1 ;
b1 = reste ;
}
Brain.Screen.printAt(5, 60, "GCD ( %d, %d ) = %d", a2, b2, a1) ;
a1 = a2 = 60 ;
b1 = b2 = 200 ;
while(reste > 0){
reste = a1 % b1 ;
a1 = b1 ;
b1 = reste ;
}
Brain.Screen.printAt(5, 60, "GCD ( %d, %d ) = %d", a2, b2, a1) ;
}
Utilisation d'une fonction définie par l'utilisateur :
int getGCD(int a, int b){
int reste = 1 ;
while(reste>0){
reste = a % b ;
a = b ;
b = reste ;
}
renvoie 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));
}
Voici la séquence du flux logique de la fonction appelante main() :
Exemple : faire la moyenne d'un ensemble de nombres
float doAverage(int n1, int n2, int n3){
float moy = (n1 + n2 + n3)/3 ;
renvoie la moyenne ;
}
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) ;
}
Exemple : permettre à un robot d'avancer avec la valeur des encodeurs variables
void reportMotionValues(){
Brain.Screen.printAt(5,100, "%8.2lf%8.2lf%8.2f",
LeftMotor.position(rev),
MoteurGauche.position(deg));
}
void goStraight(float totalEnc, float vel){
LeftMotor.resetPosition();
LeftMotor.setVelocity(50,0, pour cent);
LeftMotor.spinToPosition(totalEnc, deg, true);
retour ;
}
int main() {
int enc=1000; // >0 : avant, <0 : arrière
vexcodeInit( );
pour (int i=0; i<10; i++){
enc *= -1 ;
goStraight(enc, 100);
Brain.Screen.printAt(5,60, "Terminé");
reportMotionValues();
//ce délai est là uniquement pour vous permettre de visualiser ces actions.
//Vous n'avez pas à mettre de délai ici.
attendre (2000, ms);
}
}
Comme vous le voyez, il est presque impossible de permettre au robot d'avancer et de reculer à un nombre variable de fois ; car il ne peut être déterminé qu'au moment de l'exécution.