المسارات
/
C#
C#
/
التمارين
/
التضخم المفرط يضرب Hyperia
التضخم المفرط يضرب Hyperia

التضخم المفرط يضرب Hyperia

تمرين تعلّمي

مقدمة

الفيض

يحدث الفيض الحسابي عندما يؤدي حساب، مثل عملية حسابية أو تحويل نوع، إلى قيمة أكبر من سعة النوع المستقبِل.

ستلتف تعبيرات من النوع int وlong ونظيراتها غير الموقعة بصمت في هذه الظروف.

يمكن تعديل سلوك حسابات الأعداد الصحيحة باستخدام الكلمة المفتاحية checked. عندما يحدث فيض داخل كتلة checked، يُطرح مثيل من OverflowException.

int one = 1;
checked
{
    int expr = int.MaxValue + one;   // OverflowException is thrown
}

// or

int expr2 = checked(int.MaxValue + one);     // OverflowException is thrown

ستأخذ تعبيرات من النوع float وdouble قيمة خاصة هي اللانهاية.

ستطرح تعبيرات من النوع decimal مثيلًا من OverflowException.

التعليمات

تواجه دولة Hyperia مشكلاتها. فالتضخم فيها خارج عن السيطرة على وجه الخصوص. وقد جرى نقلُك إليها لتتولى عقدًا في البنك المركزي.

1. اطبع فئات الأوراق النقدية

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

وعند الطباعة تكون الفئات على الأوراق النقدية حاصل ضرب الأساس في المضاعف.

وبحلول الوقت الذي أُدخل فيه هذا النظام، كانت فئة أصغر ورقة نقدية تبلغ بالفعل 10,000,000. ويوضّح الجدول أدناه الوضع (للفئات الثلاث الأولى) عند إدخال النظام أول مرة. وقد ساءت الأمور كثيرًا منذ ذلك الحين، ولم يعد المضاعف وحده هو الذي يتغير، بل الأساس أيضًا.

الأساس المضاعف الفئة
10,000 1,000 10,000,000
50,000 1,000 50,000,000
100,000 1,000 100,000,000
... 1,000 ...

وخلاصة ذلك أن الفئة = الأساس * المضاعف.

من فضلك نفّذ الطريقة CentralBank.DisplayDenomination() التي تأخذ الأساس والمضاعف وتُرجع سلسلة نصية تمثل حاصل ضربهما (الأساس * المضاعف). ويجب ألا تُنسَّق السلسلة النصية الرقمية المُرجَعة.

وإذا أدّت عملية الضرب إلى تجاوز الحد، فيجب إرجاع السلسلة النصية "*** Too Big ***".

CentralBank.DisplayDenomination(10000L, 1000L);
// => "10000000"
CentralBank.DisplayDenomination(long.MaxValue / 2, 10000L);
// => "*** Too Big ***"

2. اعرض الناتج المحلي الإجمالي في Hyperia

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

من فضلك نفّذ الطريقة CentralBank.DisplayGDP() التي تأخذ الناتج المحلي الإجمالي الأساسي والمضاعف الحالي وتُرجع الناتج المحلي الإجمالي على هيئة سلسلة نصية.

وإذا تعذّر حساب الناتج المحلي الإجمالي، فستُرجَع السلسلة "*** Too Big ***".

CentralBank.DisplayGDP(555f, 10000f);
// => "5550000"
CentralBank.DisplayGDP(float.MaxValue / 2, 10000f);
// => "*** Too Big ***"

3. اعرض راتب كبير الاقتصاديين

يريد رئيسك في البنك أن يتأكد من عدم وجود مشكلات عند موعد صرف الرواتب.

نفّذ الطريقة CentralBank.DisplayChiefEconomistSalary() التي تأخذ راتبًا معبَّرًا عنه بوحدات الأساس (كما ورد أعلاه) ومضاعفًا، وتُرجع سلسلة نصية تحتوي على حاصل الضرب.

وإذا تعذّر حساب الراتب، فستُرجَع السلسلة "*** Much Too Big ***".

CentralBank.DisplayChiefEconomistSalary(555000m, 10000m);
// => "5550000000"
CentralBank.DisplayChiefEconomistSalary(555000m, decimal.MaxValue / 2L);
// => "*** Much Too Big ***"
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
C# Exercism

مستعد لبدء التضخم المفرط يضرب Hyperia؟

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