العمليات الحسابية (Arithmetic)
مقدمة
تحدثنا عن التعبيرات وبعض العلامات الحسابية في درس التعبيرات (مستوى ابتدائي) ويفضل الرجوع له أولاً قبل قراءة هذا الدرس ﻷننا سنستكمل الشرح بالتفصيل وسنتحدث عن التعبيرات الحسابية المتقدمة.
تسمى العلامات باﻹنجليزية Operators، يجب معرفتها ﻷنك ربما تستخدمها مستقبلاً...
العلامات الحسابية
العلامات اﻷساسية
درسنا هذه العلامات من قبل، وهي العلامات الحسابية اﻷساسية...
الاسم | العلامة الحسابية |
---|---|
علامة الجمع | + |
علامة الطرح | - |
علامة الضرب | * |
علامة القسمة | / |
علامة الجمع | + |
العلامات الجديدة
الاسم | العلامة الحسابية | الوصف |
---|---|---|
علامة المتبقي (modulo) | % | معرفة المتبقي من ناتج قسمة العددين |
علامة اﻷُس (Exponentiation) | ** | تكرار ضرب العدد في نفسه (الرفع إلى أُسّ) |
علامة الزيادة | ++ | زيادة 1 على قيمة العدد |
علامة الإنقاص | -- | إنقاص أو طرح 1 من قيمة العدد |
%
علامة المتبقي تُستخدم لمعرفة باقي عملية القسمة، فمثلاً إذا قمنا بقسمة 4 / 2
سيكون الناتج 2
لكن تخيل أننا نقوم بقسمة 5/2
كم سيكون الناتج؟ سيكون هناك كسر، أي سيكون هناك باقي من القسمة، والباقي هو 1
ﻷن أقرب عدد من 5 يمكن قسمته على 2 هو 4 ويتبقى 1، وبالتالي 4 % 2
تساوي 0 لكن 5 % 2
تساوي 1 وكذلك 11 % 3
تساوي 2 ﻷن أقرب عدد من 11 يقبل القسمة على 3 هو 9 ويكون الباقي من 11 هو 2
console.log(5%2);
console.log(4%2);
console.log(11%3);
console.log(15%3);
console.log(15%4);
console.log(5%4);
0
2
0
3
1
معرفة هل العدد يقبل القسمة أم ﻻ
يمكن استخدام علامة باقي القسمة %
في معرفة هل العدد يقبل القسمة على عدد آخر أم ﻻ، إن كانت تقبل القسمة سيكون الناتج 0 ﻷن في هذه الحالة لن يكون هناك متبقي من القسمة، أما إن كان لا يقبل القسمة سيكون هناك متبقي بالتالي سيكون الناتج أكبر من 0
مثال إنشاء دالة تقوم بإرجاع هل العدد يقبل القسمة على 4 أم ﻻ
function divisibleByFour(num){
if (num % 4 === 0){
return true;
}else{
return false;
}
}
console.log(divisibleByFour(8));
console.log(divisibleByFour(6));
console.log(divisibleByFour(9));
console.log(divisibleByFour(4));
false
false
true
معرفة العدد زوجي أم فردي
يمكن استخدام علامة معرفة باقي القسمة %
في معرفة هل العدد زوجي أم فردي، وهذا من أهم وأشهر استخداماتها
اﻷعداد الزوجية هي: 0, 2, 4, 6, 8, 10 ... واﻷعداد الفردية هي: 1, 3, 5, 7, 9, 11 ...
خوارزمية معرفة العدد زوجي أم فردي:
- إذا كان العدد يقبل القسمة على 2 إذن هو عدد زوجي
- غير ذلك العدد فردي
مثال دالة تقوم بطباعة "زوجي" إن كان العدد زوجي، و"فردي" إن كان العدد فردي
function evenOrOdd(num){
if (num % 2 === 0){
console.log(num + ": زوجي");
}else{
console.log(num + ": فردي");
}
}
evenOrOdd(2);
evenOrOdd(3);
evenOrOdd(4);
evenOrOdd(5);
evenOrOdd(10);
3: فردي
4: زوجي
5: فردي
10: زوجي
**
علامة اﻷُسّ (تكرار الضرب) تستخدم في تكرار الضرب، أو رفع العدد لأُس كما في الرياضيات، فمثلاً 32 = 9 يمكن كتابتها برمجياً 3 ** 2
وسيكون ناتج التعبير 9
console.log(3**2);
var n = 2;
var x = n**n; // = 2**2 = 4
console.log(x**n); // = 4**2 = 16
16
علامة اﻷُس ليست موجودة في كل اللغات البرمجية، ولم تكن موجودة في اﻹصدارات القديمة من لغة جافاسكريبت وأضيفت في التحديثات اﻷخيرة للغة، لكننا ذكرناها لتعرف فيمَ تُستخدم إن لاحظتها في أي كود.
دالة تكرار الضرب
يمكننا بنفسنا إنشاء دالة تقوم بنفس دور علامة اﻷُس **
لتكرار الضرب ويمكننا استخدام هذه الدالة في برنامجنا، ولهذا السبب اللغات القديمة لا تحتوي على علامة اﻷس، لأن من الممكن كتابة دالة بسيطة تقوم بنفس الدور!
هذا المثال للمعرفة والتطبيق على ما تعلّمنا فقط، لكن مادامت اللغة تحتوي على علامة ستسهّل عليك عملية ما فاستخدمها بدون إنشاء دوال مخصصة.
في هذا المثال ننشئ دالة اسمها pow
تأخذ مُدخلين، اﻷول هو العدد والثاني هو اﻷُس أو عدد تكرارات الضرب، وتقوم الدالة بإرجاع ناتج العدد اﻷول أُس العدد الثاني باستخدام الحلقات التكرارية
function pow(num, power){
var result = 1;
var i = 0;
while (i < power){
result = result * num;
i = i + 1;
}
return result;
}
console.log(pow(3, 2));
استخدام هذه العلامات يُعدّ استخداماً للتعبيرات، وبالتالي ينطبق على كل العلامات خصائص التعبيرات البرمجية
والتعبيرات البرمجية كما قلنا يُمكن استخدامها في كثير من المواضع، فيمكن أن تكون قيمة المتغير تعبيراً، ويمكن أن يكون مُدخل الدالة تعبيراً، لذلك يمكنك مثلاً إدخال عملية حسابية لدالة الطباعة كمُدخل: console.log(5%2)
ويمكن أن تكون قيمة لمتغير، وهكذا.
++
علامة الزيادة تستخدم لزيادة 1 على قيمة العدد، لذلك مثلاً في الحلقات التكرارية تُستخدم بكثرة! فأنت في الحلقات التكرارية غالباً تقوم بزيادة قيمة متغير العدّاد بواحد أو إنقاصها بواحد، لذلك هذه العلامة تكون حل أمثل وخيار سريع
var n = 5;
n++;
console.log(n);
n++
في المثال السابق تعتبر بديلاً لكتابة n = n+1
استخدام علامة الزيادة في الحلقات التكرارية
وتُستخدم بكثرة في الحلقات التكرارية، لذلك من اﻵن يفضل أن تستخدمها في أي حلقة تكرارية لزيادة قيمة متغير العداد i
var i = 0;
while (i <= 3){
console.log(i);
i++;
}
1
2
3
--
علامة الإنقاص بالضبط مثل علامة الزيادة لكنها تقوم بإنقاص 1 من قيمة العدد
var n = 5;
n--;
console.log(n);
الزيادة واﻹنقاص كتعبيرات
علامة الزيادة وعلامة اﻹنقاص تُعتبر تعبيراً (expression) أي أن المفسر يقوم بترجمتها وإستبدالها بقيمة أخرى راجعة منها، فهي تقوم بإرجاع قيمة بالضبط كما تقوم الدوال بإرجاع قيمة، ولكنها تقوم بإرجاع قيمة المتغير قبل الزيادة أو الإنقاص ثم تقوم بزيادته أو إنقاصه
var x = 1;
console.log(x++);
console.log(x);
2
في المثال السابق
console.log(x++)
تقوم بطباعة قيمةx
الحالية قبل الزيادة فتقوم بطباعة1
، وبعد الطباعة تقوم بإضافة 1 إلى قيمةx
، لذلكconsole.log(x)
في السطر التالي تقوم بطباعة2
ﻷن قيمةx
قد تغيرت اﻵن وزادت بمقدار 1
ويُمكن أن تُستخدم كقيمة لمتغير، مثلها مثل أي تعبير آخر!
var x = 1;
var y = x++;
console.log('x: ' + x);
console.log('y: ' + y);
y: 1
المثال السابق يقوم بإنشاء متغير اسمه
y
وقيمتهx++
فتكون قيمته تساوي قيمةx
القديمة ﻷن التعبيرx++
يقوم بإرجاع قيمةx
القديمة، وبعدها سيتم تغيير قيمةx
وإضافة واحد إليها، فتكون قيمةx
الجديدة تساوي2
الزيادة واﻹنقاص قبل اﻹرجاع
ماذا لو أردنا الزيادة واﻹنقاص أولاً ثم إرجاع القيمة؟ هنا نستخدم ++x
و --x
، لاحظ أن علامة الزيادة واﻹنقاص أصبحت قبل المتغير، فسيقوم بالزيادة واﻹنقاص أولاً...
var x = 1;
var y = ++x;
console.log('x: ' + x);
console.log('y: ' + y);
y: 2
()
عامل التجميع يُستخدم عامل التجميع لتجميع عملية حسابية معينة أو عدة عمليات، وهو نفسه الموجود بالرياضيات، فمثلاً تخيل أنك تريد ناتج هذه العملية الحسابية 5+5*2
وبالطبع سيتم تنفيذ عملية الضرب أولاً ثم يتم تنفيذ الجمع فيكون الناتج 10+5 = 15
ولكن تخيل أنك تريد تنفيذ عملية الجمع أولاً ثم عملية الضرب، في هذه الحالة سنستخدم عامل التجميع (5+5) * 2
وفي هذه الحالة سيقوم المفسّر بالمرور على ما بداخل عامل التجميع أولاً، فيجمع 5+5 ثم يضربها * 2 فيكون الناتج 10*2 = 20
ولاحظ اختلاف الناتج بين المثالين، لذلك هذا العامل من العوامل المهمة، لاحظ الأمثلة التالية:
console.log(1 + 2 * 3); // 1 + 6
// output: 7
console.log(1 + (2 * 3)); // 1 + 6
// output: 7
console.log((1 + 2) * 3); // 3 * 3
// output: 9
console.log((5 + 5) * 2; // 10 * 2
// output: 20
7
9
20
قم بكتابة دالة تحسب محيط المستطيل، تأخذ مُدخلين، العرض width
والطول height
وتقوم بإرجاع محيط المستطيل، مع العلم أن محيط المستطيل يساوي (الطول + العرض) * 2
محيط المثلث يستخدم علامة التجميع
()
ﻷنه يجب حساب مجموع الطول + العرض أولاً ثم ضرب الناتج * 2
المساهمين
وجدت خطأ أو تريد المساهمة في محتوى الدرس؟ عدل الصفحة على Github