كتابة دالة لإرجاع قيمة في 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.

مثال: دالة بسيطة لإيجاد القاسم المشترك الأكبر (باستخدام خوارزمية إقليدس)

يوضح النموذج التالي أيضًا كيفية استخدامه في بنية حلقة بسيطة.

بدون استخدام دالة معرفة من قبل المستخدم:

int main() { 
  int remainder = 1;
  int a1, b1, a2, b2;
  vexcodeInit();
  a1 = a2 = 20;
  b1 = b2 = 64;
  while(remainder > 0){
    remainder = a1 % b1;
    a1 = b1;
    b1 = remainder;
  }
  Brain.Screen.printAt(5, 60, "GCD ( %d, %d ) = %d", a2, b2, a1);

  a1 = a2 = 60;
  b1 = b2 = 200;
  while(remainder > 0){
    remainder = a1 % b1;
    a1 = b1;
    b1 = remainder;
  }
  Brain.Screen.printAt(5, 60, "GCD ( %d, %d ) = %d", a2, b2, a1);
}

استخدام دالة معرفة من قبل المستخدم:

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, "GCD ( %d, %d ) = %d",getGCD(20, 64));
  Brain.Screen.printAt(5, 60, "GCD ( %d, %d ) = %d",getGCD(60, 100));
}

يُظهر الفيديو أدناه كيفية تدفق تسلسل المنطق من الدالة الرئيسية main():

مثال: حساب متوسط ​​مجموعة من الأرقام

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);
}

مثال: تمكين الروبوت من التحرك للأمام باستخدام قيمة مشفرات متغيرة

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: للأمام، <0: للخلف
  vexcodeInit();

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

    // هذا التأخير موجود هنا فقط لعرض هذه الإجراءات.
    //لست مضطراً لوضع تأخير هنا.
    انتظر (2000 مللي ثانية)؛
  }
}

كما ترى، من شبه المستحيل تمكين الروبوت من التحرك للأمام والخلف بعدد متغير من المرات؛ لأنه لا يمكن تحديده إلا في وقت التشغيل.

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

Last Updated: