freeCodeCamp/guide/arabic/certifications/javascript-algorithms-and-d.../javascript-algorithms-and-d.../cash-register/index.md

8.7 KiB

title localeTitle
Cash Register ماكينة تسجيل المدفوعات النقدية

:triangular_flag_on_post: تذكر استخدام Read-Search-Ask إذا واجهتك مشكلة. حاول إقران البرنامج :busts_in_silhouette: واكتب الكود الخاص بك :pencil:

:checkered_flag: شرح المشكلة:

  • يجب عليك إنشاء برنامج يقوم بإرجاع كائن يحتوي على مفتاح status ومفتاح change . قيمة status هي سلسلة INSUFFICIENT_FUNDS أو CLOSED أو OPEN ، وقيمة change هي صفيف ثنائي الأبعاد من التغيير المستحق.

روابط ذات صلة

  • هياكل البيانات هيكل

:speech_balloon: تلميح: 1

  • فمن الأسهل عندما تعرف كم من المال في السجل الخاص بك مسبقا. لهذا فمن المستحسن أن يكون لديك وظيفة لتعيين هذه المعلومات إلى متغير. ثم يمكنك معرفة ما إذا كان لديك ما يكفي من المال لإتمام المعاملة وإرجاع التغيير ، أو إذا كان يجب عليك إغلاق السجل.

حاول أن تحل المشكلة الآن

:speech_balloon: تلميح: 2

  • هذه المشكلة أسهل عندما تعرف قيمة كل فاتورة أو عملة تعمل معها ، وليس مجرد مجموع كل منها في السجل. على سبيل المثال ، من المفيد أن تعرف أن النيكل يستحق 0.05 ، إلى جانب حقيقة أن لديك نيكل بقيمة 2.05 دولار في سجل النقدية.

حاول أن تحل المشكلة الآن

:speech_balloon: تلميح: 3

  • سيكون عليك الحصول على أكبر قدر من التغيير من نوع واحد من الفاتورة أو العملة قبل الانتقال إلى التالي ، من قيمة أكبر إلى أقل. استمر حتى تحسب كل التغير المستحق.

حاول أن تحل المشكلة الآن

تنبيه المفسد!

علامة تحذير

الحل في المستقبل!

:beginner: حل رمز المبتدئين:

`// Create an array of objects which hold the denominations and their values var denom = [ { name: 'ONE HUNDRED', val: 100.00}, { name: 'TWENTY', val: 20.00}, { name: 'TEN', val: 10.00}, { name: 'FIVE', val: 5.00}, { name: 'ONE', val: 1.00}, { name: 'QUARTER', val: 0.25}, { name: 'DIME', val: 0.10}, { name: 'NICKEL', val: 0.05}, { name: 'PENNY', val: 0.01} ];

function checkCashRegister(price, cash, cid) { var output = { status: null, change: [] }; var change = cash - price;

// Transform CID array into drawer object var register = cid.reduce(function(acc, curr) { acc.total += curr[1]; acc[curr[0]] = curr[1]; return acc; }, { total: 0 });

// Handle exact change if (register.total === change) { output.status = 'CLOSED'; output.change = cid; return output; }

// Handle obvious insufficient funds if (register.total < change) { output.status = 'INSUFFICIENT_FUNDS'; return output; }

// Loop through the denomination array var change_arr = denom.reduce(function(acc, curr) { var value = 0; // While there is still money of this type in the drawer // And while the denomination is larger than the change remaining while (register[curr.name] > 0 && change >= curr.val) { change -= curr.val; register[curr.name] -= curr.val; value += curr.val;

  // Round change to the nearest hundreth deals with precision errors 
  change = Math.round(change * 100) / 100; 
} 
// Add this denomination to the output only if any was used. 
if (value > 0) { 
    acc.push([ curr.name, value ]); 
} 
return acc; // Return the current change_arr 

}, []); // Initial value of empty array for reduce

// If there are no elements in change_arr or we have leftover change, return // the string "Insufficient Funds" if (change_arr.length < 1 || change > 0) { output.status = 'INSUFFICIENT_FUNDS'; return output; }

// Here is your change, ma'am. output.status = 'OPEN'; output.change = change_arr; return output; }

// test here checkCashRegister(19.50, 20.00, "PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.10], ["QUARTER", 4.25], ["ONE", 90.00], ["FIVE", 55.00], ["TEN", 20.00], ["TWENTY", 60.00], ["ONE HUNDRED", 100.00); `

:rocket: تشغيل الكود

شرح الشفرة:

أولاً ، قم بإنشاء صفيف من الكائنات بقيمة كل فئة من الفواتير أو العملة ، مع كائن الإخراج مع مفاتيح الحالة والتغيير. بعد ذلك ، قم بتحويل مصفوفة CID إلى كائن درج. ثم ، التعامل مع شروط التغيير الدقيق والأموال غير كافية. قم denom من خلال مجموعة الصفيف وقم بتحديث التغيير والقيم بينما لا يزال هناك نقود من كل نوع في الدرج وبينما تكون التسمية أكبر من التغيير المتبقي. إضافة هذه التسمية إلى تراكم change_arr إذا تم استخدام أي من هذا النوع. بعد الحلقة ، يكون change_arr عبارة عن مصفوفة ثنائية الأبعاد من التغيير المستحق ، تم فرزه من أعلى إلى أدنى فئة. إذا لم تكن هناك عناصر في change_arr أو كنت لا تزال مدينًا بالتغيير ، INSUFFICIENT_FUNDS كائن المخرجات إلى حالة INSUFFICIENT_FUNDS . أخيرا يمكنك إعطاء التغيير الصحيح. إرجاع كائن الإخراج مع حالة OPEN و change_arr كقيمة التغيير.

روابط ذات صلة

:clipboard: ملاحظات للمساهمات:

  • :warning: لا تقم بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها مشابهة ولكن أفضل ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
  • أضف شرحًا لحلك.
  • تصنيف الحل في واحدة من الفئات التالية - الأساسي والمتوسط والمتقدم . :traffic_light:
  • الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي محتويات رئيسية ذات صلة . ( :warning: لا تزيل أي أسماء مستخدمين حالية )

نرى :point_right: Wiki Challenge Solution Template كمرجع.