Écrire une fonction pour renvoyer une valeur dans VEXcode Pro V5

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 de calcul du plus grand commun dénominateur (PGCD) (avec l'algorithme d'Euclide)

L'exemple suivant illustre également la façon dont 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, "PGCD ( %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, "PGCD ( %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;
  }
  return a;
}

int main() { 
  vexcodeInit();
  Brain.Screen.printAt(5, 60, "PGCD ( %d, %d ) = %d",getGCD(20, 64));
  Brain.Screen.printAt(5, 60, "PGCD ( %d, %d ) = %d",getGCD(60, 100));
}

La vidéo ci-dessous montre comment la séquence logique s'exécute depuis la fonction appelante main() :

Exemple : Calculer la moyenne d'un ensemble de nombres

float doAverage(int n1, int
, int n3)
  float avg = (n1
  n2 + n3)/3; return avg;


main() { 
  n1, n2, n3; Brain.Screen.print("moyenne(%d, %d, %d)
  %d", 10, 20, 30); doAverage(10, 20, 30);

  =10; n2=20; n3=40; Brain.Screen.print("moyenne(%d
 %d, %d) = %d", n1, n2, n3)
  doAverage(n1, n2, n3);


Exemple : Permettre à un robot d’avancer avec des valeurs d’encodeurs 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: avant, <0: arrière
  vexcodeInit();

  for(int i=0; i<10; i++){
    enc *= -1;
    goStraight(enc, 100);
    Brain.Screen.printAt(5,60, "Terminé");
    reportMotionValues();

    //ce délai est ici uniquement pour que vous puissiez visualiser ces actions.
    //Vous n'avez pas besoin d'insérer un 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.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: