اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

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

أول مشكلة: كيف أجد الآحاد في رقم معين؟ في كل لغات البرمجة، يوجد مفهوم الـ modulus. الـ modulus هو العلامة % وتستخدم لإرجاع الباقي من رقم معين. مثلاً، إذا أردنا أن نحصل على الآحاد من الرقم 12345، يمكننا أن نفعل هذا:

12345 % 10 // => 5
56789 % 10 // => 9

تم حل أول مشكلة، ويمكننا الآن الحصول على الآحاد بسهولة.

الآن نريد أن نكتب دالة لتقوم بعمل حلقة حول المصفوفة المعطاه، وجمع الآحاد من الأرقام الموجودة بها. في هذه الحالة، يمكننا إستخدام reduce، وهي method جاهزة تعمل على المصفوفات في جافاسكريبت. تقوم هذه الدالة بأخذ مدخلين. المدخل الآخير هو القيمة التي سنبدأ بها الحلقة. فمثلاً، سنقوم بجمع أرقام الآن، لذا سنبدأ بـصفر. المدخل الأول، هو عبارة عن دالة، تأخذ مدخلين أيضاً. الأول هو المجموع الحالي الذي وصلنا إليه، والثاني هو العنصر الحالي.

function getOnesDigit(n) {
	return n % 10;
}

function sumRightDigits(digits) {
	return digits.reduce((total, current) => total + getOnesDigit(current), 0);
}

sumRightDigits([10, 21, 3, 8, 9, 11, 44, 62, 100]); // => 28

 

  • 0
نشر

الفكرة ككل هي في جلب رقم الآحاد لعدد مُعين و نحصل على هذا الرقم بإجراء قسمة إقليدية للعدد على 10 حيث باقي القسمة هو رقم الآحاد مثلاً لنأخذ العدد 62 عندما نقسمه على 10 نتحصل على 6 و باقي قسمة هو 2 و هو الرقم المطلوب.

غالباً في لغات البرمجة علامة باقي القسمة هي: % بعد هذه المعلومة تُصبح الأمور واضحة المعالم فكل ما يتبقى لك هو تعريف دالة تستقبل مُعامل واحد بالشكل التالي مثلاً بلغة بايثون: 

def sumRightDigit(numbers):

تعريف متغير داخل الدالة لتخزين المجموع و إسناد القيمة 0 له:

def sumRightDigit(numbers):
    sum = 0

عمل حلقة على عناصر المصفوفة و إضافة رقم الآحاد في كل لفة من الحلقة.

def sumRightDigit(numbers):
    sum = 0
    for number in numbers:
        sum += number % 10

في الأخير إرجاع قيمة المُتغير الذي يحمل مجموع الآحاد، ثم إستخدام الدالة:

def sumRightDigit(numbers):
    sum = 0
    for number in numbers:
        sum += number % 10
    return sum
    
    
print(sumRightDigit([10,21,3,8,9,11,44,62,100])) # 28

بنفس الطريقة يُمكننا إستخدام لغة جافاسكربت الفرق فقط في بعض الsyntax:

function sumRightDigit(numbers) {
    sum = 0
    for (i in numbers)
        sum += numbers[i] % 10
    return sum
}    
    
console.log(sumRightDigit([10,21,3,8,9,11,44,62,100])) // 28

إتبع نفس الطريقة في اي لغة تريد.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...