المسارات
/
Go
Go
/
التمارين
/
مراقب الطيور
مراقب الطيور

مراقب الطيور

تمرين تعلّمي

مقدمة

الصيغة العامة

حلقة for هي إحدى العبارات الأكثر استخدامًا لتنفيذ بعض المنطق بشكل متكرر. في Go تتكوّن من الكلمة المفتاحية for، وترويسة، وكتلة كود تحتوي على جسم الحلقة محاطًا بالأقواس المعقوفة. تتكوّن الترويسة من 3 مكوّنات تفصل بينها الفواصل المنقوطة ;: التهيئة، والشرط، والخطوة اللاحقة.

for init; condition; post {
  // loop body - code that is executed repeatedly as long as the condition is true
}
  • مكوّن التهيئة هو كود يعمل مرة واحدة فقط قبل أن تبدأ الحلقة.
  • يجب أن يكون مكوّن الشرط تعبيرًا يُقيَّم إلى قيمة منطقية، ويتحكم في موعد توقف الحلقة. سيُنفَّذ الكود الموجود داخل الحلقة ما دام هذا الشرط يُقيَّم إلى صحيح. بمجرد أن يُقيَّم هذا التعبير إلى خطأ، لن تُنفَّذ أي تكرارات أخرى للحلقة.
  • مكوّن الخطوة اللاحقة هو كود سيُنفَّذ في نهاية كل تكرار.

ملاحظة: بخلاف اللغات الأخرى، لا توجد أقواس هلالية () تحيط بمكوّنات الترويسة الثلاثة. بل إن إدراج مثل هذه الأقواس يُعد خطأ في الترجمة. ومع ذلك، فإن الأقواس المعقوفة { } التي تحيط بجسم الحلقة مطلوبة دائمًا.

حلقات for: مثال

عادةً ما يُهيّئ مكوّن التهيئة متغير عدّاد، ويتحقق مكوّن الشرط مما إذا كان ينبغي مواصلة الحلقة أم إيقافها، وعادةً ما يزيد مكوّن الخطوة اللاحقة العدّاد في نهاية كل تكرار.

for i := 1; i < 10; i++ {
  fmt.Println(i)
}

ستطبع هذه الحلقة الأعداد من 1 إلى 9 (بما في ذلك 9). غالبًا ما يتم تعريف الخطوة باستخدام عبارة زيادة أو إنقاص، كما هو موضح في المثال أعلاه.

التعليمات

أنت مراقب طيور شغوف يتابع عدد الطيور التي زارت حديقتك. عادةً ما تستخدم سجلًّا في دفتر لعدّ الطيور، ولكن للتعامل مع بياناتك بشكل أفضل، رقمنت أعداد الطيور على مدار الأسابيع الماضية.

1. حدّد العدد الإجمالي للطيور التي أحصيتها حتى الآن

لنبدأ تحليل البيانات بالحصول على نظرة عامة. اعرف عدد الطيور التي أحصيتها إجمالًا منذ أن بدأت تسجيل بياناتك.

نفّذ دالة TotalBirdCount تستقبل شريحة من قيم int تحتوي على عدد الطيور في كل يوم. ينبغي أن تُرجع العدد الإجمالي للطيور التي أحصيتها.

birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
TotalBirdCount(birdsPerDay)
// => 34

2. احسب عدد الطيور الزائرة في أسبوع محدّد

الآن بعد أن أصبحت لديك فكرة عامة عن أعداد طيورك، تريد إجراء تحليل أكثر تفصيلًا.

نفّذ دالة BirdsInWeek تستقبل شريحة تحتوي على أعداد الطيور في كل يوم ورقم الأسبوع.

تُرجع العدد الإجمالي للطيور التي أحصيتها في ذلك الأسبوع المحدّد. يمكنك افتراض أن الأسابيع تُسجَّل دائمًا بشكل كامل.

birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
BirdsInWeek(birdsPerDay, 2)
// => 12

3. صحّح خطأً في العدّ

أدركت أنه طوال الوقت الذي كنت تحاول فيه متابعة الطيور، كان هناك طائر واحد يختبئ في زاوية بعيدة من الحديقة.

اكتشفت أن هذا الطائر كان يقضي يومًا في حديقتك ويغيب في اليوم التالي.

لا تعرف بالضبط أين كان في الأيام الفاصلة بينها، لكنه بالتأكيد لم يكن في حديقتك.

كما يخبرك حدسك كمراقب طيور أن الطائر كان في حديقتك في اليوم الأول الذي سجّلته في قائمتك.

بناءً على هذه المعلومات الجديدة، اكتب دالة FixBirdCountLog تستقبل شريحة تحتوي على أعداد الطيور المُحصاة في كل يوم كوسيط، وتُرجع الشريحة بعد تصحيح خطأ العدّ.

birdsPerDay := []int{2, 5, 0, 7, 4, 1}
FixBirdCountLog(birdsPerDay)
// => [3 5 1 7 5 1]
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Go Exercism

مستعد لبدء مراقب الطيور؟

سجّل في Exercism لتتعلّم وتتقن Go عبر 34 مفهومًا166 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.