المسارات
/
C#
C#
/
التمارين
/
الحاجة إلى السرعة
الحاجة إلى السرعة

الحاجة إلى السرعة

تمرين تعلّمي

مقدمة

البانيات

يتم إنشاء نسخة من صنف باستدعاء بانيته عبر العامل new. البانية نوع خاص من الطُرق، هدفها تهيئة نسخة منشأة حديثًا. تبدو البانيات كالطُرق العادية، لكن دون نوع إرجاع، وباسم يطابق اسم الصنف.

class Library
{
    private int books;

    public Library()
    {
        // Initialize the books field
        this.books = 10;
    }
}

// This will call the constructor
var library = new Library();

مثل الطُرق العادية، يمكن للبانيات أن تملك معاملات. وعادةً ما تُخزَّن معاملات البانية في حقول (خاصة) للوصول إليها لاحقًا، أو تُستخدم في عملية حسابية لمرة واحدة. ويمكن تمرير الوسائط إلى البانيات تمامًا كما تُمرَّر الوسائط إلى الطُرق العادية.

class Building
{
    private int numberOfStories;
    private int totalHeight;

    public Building(int numberOfStories, double storyHeight)
    {
        this.numberOfStories = numberOfStories;
        this.totalHeight = numberOfStories * storyHeight;
    }
}

// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2)

التعليمات

في هذا التمرين ستُنظّم سباقات بين أنواع مختلفة من السيارات التي تُقاد عن بُعد. لكل سيارة سرعتها وخصائص استهلاكها للبطارية.

تبدأ السيارات ببطاريات ممتلئة بالكامل (100%). في كل مرة تقود فيها السيارة باستخدام جهاز التحكم عن بُعد، تقطع مسافة تساوي سرعتها بالأمتار، وتنقص نسبة البطارية المتبقية بمقدار استهلاك السيارة للبطارية.

إذا كانت بطارية السيارة أقل من نسبة استهلاكها للبطارية، فلن تتمكن من قيادتها بعد الآن.

لكل مضمار سباق مسافته الخاصة. تُختبر السيارات بالتحقق مما إذا كانت تستطيع إنهاء المضمار دون أن تنفد بطاريتها.

لديك ست مهام، وستتعامل كل مهمة منها مع نسخ من سيارة تحكم عن بُعد.

1. إنشاء سيارة تحكم عن بُعد

اسمح بإنشاء سيارة تحكم عن بُعد عبر تعريف مُنشئ لصنف RemoteControlCar يأخذ سرعة السيارة بالأمتار ونسبة استهلاك البطارية كمعامليه (وكلاهما من النوع int):

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);

2. إنشاء مضمار سباق

اسمح بإنشاء مضمار سباق عبر تعريف مُنشئ لصنف RaceTrack يأخذ مسافة المضمار بالأمتار كمعامله الوحيد (وهو من النوع int):

int distance = 800;
var raceTrack = new RaceTrack(distance);

3. قيادة السيارة

نفّذ الطريقة RemoteControlCar.Drive() التي تُحدّث عدد الأمتار المقطوعة بناءً على سرعة السيارة. نفّذ أيضًا الطريقة RemoteControlCar.DistanceDriven() لتُرجع عدد الأمتار التي قطعتها السيارة:

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();

car.DistanceDriven();
// => 5

4. التحقق من نفاد البطارية

حدّث الطريقة RemoteControlCar.Drive() لتستنزف البطارية بناءً على استهلاك السيارة للبطارية. نفّذ أيضًا الطريقة RemoteControlCar.BatteryDrained() التي تشير إلى ما إذا كانت البطارية قد نُفدت:

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();

car.BatteryDrained();
// => false

5. إنشاء سيارة التحكم عن بُعد Nitro

أكثر سيارات التحكم عن بُعد مبيعًا هي Nitro، التي تملك سرعة قصوى مذهلة تبلغ 50 مترًا مع استهلاك للبطارية نسبته 4%. نفّذ الطريقة (الساكنة) RemoteControlCar.Nitro() لتُرجع هذا النوع من السيارات:

var car = RemoteControlCar.Nitro();
car.Drive();
car.DistanceDriven();
// => 50

6. التحقق مما إذا كانت سيارة تحكم عن بُعد تستطيع إنهاء سباق

لإنهاء مضمار سباق، يجب أن تكون السيارة قادرة على قطع مسافة المضمار. وهذا يعني ألا تنفد بطاريتها قبل عبور خط النهاية. نفّذ الطريقة RaceTrack.TryFinishTrack() التي تأخذ نسخة من RemoteControlCar كمعاملها وتُرجع true إذا كانت السيارة تستطيع إنهاء مضمار السباق؛ وإلا فتُرجع false:

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);

int distance = 100;
var raceTrack = new RaceTrack(distance);

raceTrack.TryFinishTrack(car);
// => true
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
C# Exercism

مستعد لبدء الحاجة إلى السرعة؟

سجّل في Exercism لتتعلّم وتتقن C# عبر 62 مفهومًا178 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.