132 lines
7.7 KiB
Markdown
132 lines
7.7 KiB
Markdown
![]() |
---
|
|||
|
title: Sum All Numbers in a Range
|
|||
|
localeTitle: مجموع كل الأرقام في المدى
|
|||
|
---
|
|||
|
 تذكر استخدام **`Read-Search-Ask`** إذا واجهتك مشكلة. حاول إقران البرنامج  واكتب الكود الخاص بك 
|
|||
|
|
|||
|
###  شرح المشكلة:
|
|||
|
|
|||
|
تحتاج إلى إنشاء برنامج من شأنه أن يأخذ مجموعة من رقمين ليسا بالضرورة في ترتيب ، ثم يضيف ليس فقط تلك الأرقام ولكن أي أرقام بينهما. على سبيل المثال ، ستكون \[3،1\] هي نفس `1+2+3` وليس `3+1` فقط
|
|||
|
|
|||
|
##  تلميح: 1
|
|||
|
|
|||
|
استخدم `Math.max()` للبحث عن الحد الأقصى لقيمة رقمين.
|
|||
|
|
|||
|
> _حاول أن تحل المشكلة الآن_
|
|||
|
|
|||
|
##  تلميح: 2
|
|||
|
|
|||
|
استخدم `Math.min()` للبحث عن القيمة الدنيا من رقمين.
|
|||
|
|
|||
|
> _حاول أن تحل المشكلة الآن_
|
|||
|
|
|||
|
##  تلميح: 3
|
|||
|
|
|||
|
تذكر أنه يجب إضافة جميع الأرقام بينهما حتى يتطلب ذلك طريقة للحصول على هذه الأرقام.
|
|||
|
|
|||
|
> _حاول أن تحل المشكلة الآن_
|
|||
|
|
|||
|
## تنبيه المفسد!
|
|||
|
|
|||
|

|
|||
|
|
|||
|
**الحل في المستقبل!**
|
|||
|
|
|||
|
##  الحل الأساسي للكود:
|
|||
|
|
|||
|
`function sumAll(arr) {
|
|||
|
var max = Math.max(arr[0], arr[1]);
|
|||
|
var min = Math.min(arr[0], arr[1]);
|
|||
|
var temp = 0;
|
|||
|
for (var i=min; i <= max; i++){
|
|||
|
temp += i;
|
|||
|
}
|
|||
|
return(temp);
|
|||
|
}
|
|||
|
|
|||
|
sumAll([1, 4]);
|
|||
|
`
|
|||
|
|
|||
|
 [تشغيل الكود](https://repl.it/CLm6/0)
|
|||
|
|
|||
|
### شرح الشفرة:
|
|||
|
|
|||
|
* قم أولاً بإنشاء متغير لتخزين العدد الأقصى بين اثنين.
|
|||
|
* نفس الشيء كما كان من قبل لأصغر رقم.
|
|||
|
* نقوم بإنشاء متغير مؤقت لإضافة الأرقام.
|
|||
|
|
|||
|
نظرًا لأن الأرقام قد لا تكون دائمًا في الترتيب ، فإن استخدام `max()` و `min()` سيساعد في التنظيم.
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* [Math.max ()](http://forum.freecodecamp.com/t/javascript-math-max/14682)
|
|||
|
* [Math.min ()](http://forum.freecodecamp.com/t/javascript-math-min/14684)
|
|||
|
* [للحلقات](http://forum.freecodecamp.com/t/javascript-for-loop/14666)
|
|||
|
|
|||
|
##  حل الشفرة المتوسطة:
|
|||
|
|
|||
|
`function sumAll(arr) {
|
|||
|
// Buckle up everything to one!
|
|||
|
|
|||
|
// Using ES6 arrow function (one-liner)
|
|||
|
var sortedArr = arr.sort((a,b) => ab);
|
|||
|
var firstNum = arr[0];
|
|||
|
var lastNum = arr[1];
|
|||
|
// Using Arithmetic Progression summing formula
|
|||
|
|
|||
|
var sum = (lastNum - firstNum + 1) * (firstNum + lastNum) / 2;
|
|||
|
return sum;
|
|||
|
}
|
|||
|
`
|
|||
|
|
|||
|
 [تشغيل الكود](https://repl.it/CLm7/0)
|
|||
|
|
|||
|
### شرح الشفرة:
|
|||
|
|
|||
|
* أولاً ، نقوم بإنشاء متغير يسمى `sortedArr` الذي يقوم `sortedArr` من الأقل إلى أعلى قيمة.
|
|||
|
* `firstNum` يساوي الرقم الأول و `lastNum` يساوي الرقم الثاني.
|
|||
|
* بعد ذلك ، باستخدام صيغة التلخيص الحسابي ، سنترك `sum` متساوياً `(lastNum - firstNum + 1) * (firstNum + lastNum) / 2` .
|
|||
|
* وأخيرًا ، نرجع `sum` .
|
|||
|
|
|||
|
السطر `var sortedArr = arr.sort((a,b) => ab);` هو على الارجح ما سيكون عليك المزيد من الارتباك. سيكون هذا هو نفس إنشاء دالة تقوم بإرجاع `ab` `sort()` وهي الطريقة القياسية لفرز الأرقام من الأصغر إلى الأكبر. وبدلاً من استخدام وظيفة السهم أو الدهون ، يمكننا القيام بكل ذلك في سطر واحد مما يسمح لنا بالكتابة أقل.
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* [Array.sort ()](http://forum.freecodecamp.com/t/javascript-array-prototype-sort/14306)
|
|||
|
* [صيغة التلخيص الحسابي](https://en.wikipedia.org/wiki/Arithmetic_progression#Sum)
|
|||
|
* [وظيفة السهم ES6](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)
|
|||
|
|
|||
|
##  الحل المتقدم للكود:
|
|||
|
|
|||
|
`function sumAll(arr) {
|
|||
|
var sum = 0;
|
|||
|
for (var i = Math.min(...arr); i <= Math.max(...arr); i++){
|
|||
|
sum += i;
|
|||
|
}
|
|||
|
return sum;
|
|||
|
}
|
|||
|
|
|||
|
sumAll([1, 4]);
|
|||
|
`
|
|||
|
|
|||
|
 [تشغيل الكود](https://repl.it/CLm8/0)
|
|||
|
|
|||
|
### شرح الشفرة:
|
|||
|
|
|||
|
* إنشاء مبلغ متغير لتخزين مجموع العناصر.
|
|||
|
* بدء التكرار للحلقة من عنصر min في صفيف معين والتوقف عند وصوله إلى عنصر max.
|
|||
|
* يسمح استخدام عامل التوزيع (… arr) بتمرير الصفيف الفعلي إلى الوظيفة بدلاً من العناصر الفردية.
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* [انتشار المشغل](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)
|
|||
|
* [باستخدام Spread Operator في Math.max ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max)
|
|||
|
|
|||
|
##  ملاحظات للمساهمات:
|
|||
|
|
|||
|
*  **لا تقم** بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها **_مشابهة ولكن أفضل_** ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
|
|||
|
* أضف شرحًا لحلك.
|
|||
|
* تصنيف الحل في واحدة من الفئات التالية - **الأساسي** **والمتوسط** **والمتقدم** . 
|
|||
|
* الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي **محتويات رئيسية ذات صلة** . (  **_لا_** _تزيل أي أسماء مستخدمين حالية_ )
|
|||
|
|
|||
|
> نرى  [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272) كمرجع.
|