بيتزا باي

بيتزا باي

تمرين تعلّمي

مقدمة

الأعداد الصحيحة

الأعداد الصحيحة هي أعداد كاملة تنتمي إلى المجموعة {..., -2, -1, 0, 1, 2, ...}. تتحدد القيمة العظمى والصغرى للعدد الصحيح وفق النظام الذي يعمل عليه PHP. وعلى الأنظمة الحديثة عادةً، يكون العدد الصحيح قيمة ذات 64 بت، أي أنه يستطيع تمثيل القيم من -9_223_372_036_854_775_808 إلى 9_223_372_036_854_775_807 ضمناً.

<?php

$a = 1234;
$a = 1_234_567;

يمكنك كتابة قيم الأعداد الصحيحة في أساس غير الأساس 10 باستخدام بادئة الأساس:

<?php

$a = 0123; // octal number (equivalent to 83 decimal)
$a = 0o123; // octal number (as of PHP 8.1.0)
$a = 0x1A; // hexadecimal number (equivalent to 26 decimal)
$a = 0b11111111; // binary number (equivalent to 255 decimal)

مأخوذ من التوثيق الخاص بـ PHP

الأعداد العائمة

تُستخدم الأعداد العائمة في PHP لتمثيل مجموعة جزئية من الأعداد الحقيقية. وهي تبدأ برقم واحد أو أكثر تفصل بينها فاصلة عشرية.

<?php

$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;
$d = 1_234.567; // as of PHP 7.4.0

الأخطاء الشائعة

لا يمكن تمثيل كل الأعداد ولا إجراء كل العمليات الحسابية باستخدام الأعداد العائمة. واستخدام الأعداد العائمة لتمثيل الدولارات والسنتات قد يؤدي إلى أخطاء في التقريب.

<?php

$result = 0.1 + 0.2; // => 0.30000000000000004

العوامل الحسابية

يوفر PHP عدداً من العوامل لتنفيذ العمليات الحسابية. ويتبع PHP الترتيب الرياضي القياسي للعمليات في عوامله الحسابية. والعوامل التي يوفرها PHP هي:

  • الهوية (+)
  • النفي (-)
  • الجمع (+)
  • الطرح (-)
  • الضرب (*)
  • القسمة (/)
  • باقي القسمة (%)
  • الرفع إلى قوة (**)
$moles = +'10';
$aLotOfMoles = 6.022 * 10**23 * $moles;

التعليمات

تحب Lilly الطهي. وهي تريد إقامة حفلة بيتزا مع أصدقائها. ولكي تستفيد إلى أقصى حد من مكوّناتها، تحتاج إلى معرفة الكمية التي تحتاجها من كل مكوّن قبل أن تبدأ.

ولحل هذه المشكلة، أعدّت Lilly برنامجًا لأتمتة جزء من التخطيط، لكنها تحتاج إلى مساعدتك لإكماله. فهل ستساعد Lilly في إقامة حفلة البيتزا المثالية من حيث النسب؟

1. نسبة العجين

تحب Lilly البيتزا الرقيقة المقرمشة ذات القشرة الرفيعة. العجين اللازم للجزء الأوسط 200 غرام كحد أدنى، لكن كل شخص تخدمه البيتزا يحتاج إلى 20 غرامًا إضافية من العجين.

grams = pizzas * ((persons * 20) + 200)

تحتاج Lilly إلى دالة تقوم بما يلي:

  • تأخذ عدد البيتزات
  • عدد الأشخاص الذين ستخدمهم كل بيتزا
  • وتُرجع كمية العجين اللازمة مقرّبة إلى أقرب غرام.

مثلًا، لإعداد 4 بيتزات تكفي 8 أشخاص:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateDoughRequirement(4, 8);
// => 1440

2. رشة من الصلصة

Lilly دقيقة جدًا في توزيع صلصتها، لكن أحجام بيتزاتها قد تكون متفاوتة. ومن خبرتها، تعرف أن كل بيتزا تحتاج إلى 125 مل من الصلصة. تحتاج Lilly إلى دالة تحسب عدد علب الصلصة التي يجب شراؤها.

cans of sauce = pizzas * sauce per pizza / sauce can volume

مثلًا، إذا كانت Lilly بحاجة إلى إعداد 8 بيتزات، وكانت كل علبة 250 مل:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateSauceRequirement(8, 250);
// => 4

3. قليل من الجبن، من فضلك

يُباع الجبن على شكل مكعبات تامة حسب الحجم.

الصيغة التي تستخدمها Lily ليست صيغة مساحة البيتزا، لأنها لا تريد أن تغطي الجبنة المساحة كاملة. لذلك قررت استخدام الصيغة التالية لمعرفة عدد البيتزات ذات قطر معيّن (diameter) التي يمكن إعدادها من مكعب جبن بطول ضلع معيّن (cheese_dimension):

pizzas = (cheese_dimension³) / (thickness * PI * diameter)

أنشئ دالة تقوم بما يلي:

  • تأخذ طول ضلع مكعب الجبن
  • تأخذ السماكة المطلوبة لطبقة الجبن
  • تأخذ قطر البيتزا
  • وتستخدم صيغة Lilly لتُرجع عدد البيتزات التي يمكن إعدادها مع التقريب للأسفل.

مثلًا، إذا كان لدينا مكعب جبن بأبعاد 25x25x25 سم، وطبقة جبن بسماكة 0.5 سم، وبيتزات بقطر 30 سم:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateCheeseCubeCoverage(25, 0.5, 30);
// => 331

4. نصيب عادل

وأخيرًا، تريد Lilly أن تُقسَّم بيتزاتها إلى 8 شرائح لكل بيتزا وأن تُوزَّع بالتساوي بين أصدقائها.

أنشئ دالة تقوم بما يلي:

  • تأخذ عدد البيتزات وعدد الأصدقاء
  • وتُرجع عدد الشرائح المتبقية إذا أخذ كل شخص عددًا متساويًا من الشرائح.

مثلًا:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateLeftOverSlices(2, 4);
// => 0
$pizza_pi->calculateLeftOverSlices(4, 3);
// => 2
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
PHP Exercism

مستعد لبدء بيتزا باي؟

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