المسارات
/
Go
Go
/
التمارين
/
تجميع السيارات
تجميع السيارات

تجميع السيارات

تمرين تعلّمي

مقدمة

الأعداد

تحتوي Go على أنواع عددية أساسية يمكنها تمثيل مجموعات من القيم الصحيحة أو العشرية. وتوجد أنواع مختلفة حسب حجم القيمة التي تحتاجها وبنية الحاسوب الذي يعمل عليه التطبيق (مثل 32 بت و64 بت).

في هذا التمرين ستتعامل مع الأنواع التالية فقط:

  • int: مثل 0، 255، 2147483647. عدد صحيح مُوقَّع حجمه 32 بت على الأقل (نطاق القيم: من -2147483648 إلى 2147483647). لكن هذا يعتمد على بنية النظام. معظم الحواسيب الحديثة 64 بت، ولذلك سيكون حجم int هو 64 بت (نطاق القيم: من -9223372036854775808 إلى 9223372036854775807).

  • float64: مثل 0.0، 3.14. يحتوي على مجموعة جميع الأعداد العشرية ذات 64 بت.

  • uint: مثل 0، 255. عدد صحيح غير مُوقَّع يساوي int في الحجم (نطاق القيم: من 0 إلى 4294967295 لـ 32 بت، ومن 0 إلى 18446744073709551615 لـ 64 بت)

يمكن تحويل الأعداد إلى أنواع عددية أخرى من خلال تحويل الأنواع.

عوامل الحساب

تدعم Go العديد من عوامل الحساب القياسية:

Operator Example
+ 4 + 6 == 10
- 15 - 10 == 5
* 2 * 3 == 6
/ 13 / 3 == 4
% 13 % 3 == 1

في القسمة الصحيحة يُهمل الباقي (مثل 5 / 2 == 2).

توفّر Go إسنادًا مختصرًا للعوامل أعلاه (مثل a += 5 اختصار لـ a = a + 5). كما تدعم Go عبارتي الزيادة والنقصان ++ و-- (مثل a++).

التحويل بين الأنواع

يتم التحويل بين الأنواع عبر دالة تحمل اسم النوع الذي تريد التحويل إليه. مثل:

var x int = 42 // x has type int
f := float64(x) // f has type float64 (ie. 42.0)
var y float64 = 11.9 // y has type float64
i := int(y) // i has type int (ie. 11)

العمليات الحسابية على أنواع مختلفة

في لغات كثيرة يمكنك إجراء عمليات حسابية على أنواع مختلفة من المتغيرات، لكن في Go يؤدي هذا إلى خطأ. مثل:

var x int = 42

// this line produces an error
value := float32(2.0) * x // invalid operation: mismatched types float32 and int

// you must convert int type to float32 before performing arithmetic operation
value := float32(2.0) * float32(x)

التعليمات

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

1. احسب عدد السيارات الصالحة المنتَجة في الساعة

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

نفّذ دالة تأخذ عدد السيارات المنتَجة في الساعة ونسبة النجاح، وتحسب عدد السيارات الناجحة المنتَجة في الساعة. تُعطى نسبة النجاح كنسبة مئوية، من 0 إلى 100:

CalculateWorkingCarsPerHour(1547, 90)
// => 1392.3

ملاحظة: يجب أن تكون القيمة المُرجعة من النوع float64.

2. احسب عدد السيارات الصالحة المنتَجة في الدقيقة

نفّذ دالة تأخذ عدد السيارات المنتَجة في الساعة ونسبة النجاح، وتحسب عدد السيارات التي تُنتَج بنجاح كل دقيقة:

CalculateWorkingCarsPerMinute(1105, 90)
// => 16

ملاحظة: يجب أن تكون القيمة المُرجعة من النوع int.

3. احسب تكلفة الإنتاج

تكلّف كل سيارة 10,000 دولار لتُنتَج على حدة عادةً، بغض النظر عن كونها ناجحة أم لا. لكن مع قليل من التخطيط، يمكن إنتاج 10 سيارات معًا مقابل 95,000 دولار.

على سبيل المثال، يمكن إنتاج 37 سيارة بالطريقة التالية: 37 = 3 × مجموعات من عشر سيارات + 7 سيارات منفردة

إذن تكلفة 37 سيارة هي: 3*95,000+7*10,000=355,000

نفّذ الدالة CalculateCost التي تحسب تكلفة إنتاج عدد من السيارات، بغض النظر عن كونها ناجحة أم لا:

CalculateCost(37)
// => 355000

CalculateCost(21)
// => 200000

ملاحظة: يجب أن تكون القيمة المُرجعة من النوع uint.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Go Exercism

مستعد لبدء تجميع السيارات؟

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