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

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

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

دون استخدام وظيفة محددة من قبل المستخدم:

int main() { 
  int المتبقية = 1;
  كثافة العمليات a1، b1، a2، b2؛
  vexcodeInit();
  أ1 = أ2 = 20؛
  ب1 = ب2 = 64؛
  بينما(الباقي > 0){
    الباقي = a1 % b1;
    أ1 = ب1؛
    ب1 = الباقي؛
  }
  Brain.Screen.printAt(5, 60, "GCD ( %d, %d ) = %d", a2, b2, a1);

  أ1 = أ2 = 60;
  ب1 = ب2 = 200؛
  بينما(الباقي > 0){
    الباقي = a1 % b1;
    أ1 = ب1؛
    ب1 = الباقي؛
  }
  Brain.Screen.printAt(5, 60, "GCD ( %d, %d ) = %d", a2, b2, a1);
}

باستخدام وظيفة محددة من قبل المستخدم:

int getGCD(int a, int b){
  int المتبقية = 1;
  بينما(الباقي>0){
    الباقي = أ % ب;
    أ = ب؛
    ب = الباقي؛
  }
  إرجاع أ;
}

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;
  متوسط ​​العائد؛
}

int main() { 
  int n1, n2, n3;
  Brain.Screen.print("average(%d, %d, %d) = %d", 10, 20, 30); 
  دو متوسط ​​(10، 20، 30)؛

  ن1=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, بالمائة);
LeftMotor.spinToPosition(totalEnc, deg, true); عودة؛ } 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: