باقي القسمة Remainder لغة C++
باقي القسمة Remainder, في هذا الدرس سوف نقوم بتطبيق تطبيقات اكثر على جملة if و سوف نتعلم. على أداة رياضية تُدعى باقي القسمة Remainder و سوف نقوم بعمل بعض التطبيقات عليها.
باقي القسمة Remainder مفهوم مهم جداً في البرمجة سنقوم بفهمه في هذا الدرس, و هو ما يتبقى من عملية القسمة المطوَّلة the remainder theorem.
مثال 1
#include <iostream>
using namespace std;
int main()
{
int x = 22;
int y;
cout << "Enter the value for y : ";
cin >> y;
cout << x << " / " << y << " = " << x / y << endl;
return 0;
}
لقد قُمنا بإنشاء متغير عددي صحيح و هو x و قيمته هي 22 ثم أنشأنا متغير مجهول y ليتم مطالبة المستخدم بإدخاله.
ثم بنينا دالة الطباعة cout و طلبنا من البرنامج يطبع x و من ثم يضع إشارة القسمة / ثم بعدها إشارة = و بعدها يقوم بتقسيم x على y و يظهر نتيجة بعدها على الشاشة.
و عند تنفيذ run للبرنامج و إدخال الرقم 2 ستكون النتيجة بالشكل.
Enter the value for y : 2
22 / 2 = 11
مثال 2
#include <iostream>
using namespace std;
int main()
{
int x = 22;
int y;
cout << "Enter the value y : ";
cin >> y;
cout << x << " / " << y << " = " << x / y << endl;
cout << x << " % " << y << " = " << x % y << endl;
return 0;
}
لقد قمنا بإنشاء متغير عددي صحيح و هو x و قيمته هي 22 ثم أنشأنا متغير مجهول y ليتم مطالبة المستخدم بإدخاله.
ثم بنينا دالة الطباعة cout و طلبنا من البرنامج يطبع x و من ثم يضع إشارة القسمة / ثم بعدها إشارة = و بعدها يقوم بتقسيم x على y و يظهر نتيجة بعدها على الشاشة.
ثم قمنا بدالة طباعة ثانية و طلبنا من البرنامج يطبع x و من ثم يضع إشارة بافي القسمة %.
ثم بعدها إشارة = و بعدها يقوم بحساب باقي قسمة x على y و يظهر نتيجة بعدها على الشاشة.
و عند تنفيذ run للبرنامج و إدخال الرقم 3 ستكون النتيجة بالشكل.
Enter the value y : 3
22 / 3 = 7
22 % 3 = 1
تعلمنا في الرياضيات طريقة القسمة المطوّلة و كٌنّا إذا نُريد أن نقسِّم 3 على إثنان فإننا نرى كم إثنان موجودة في الـ 3 و سيكون هناك إثنان واحدة في الثلاثة.
إذاً ناتج القسمة المطولة يساوي 1 ثم نُكمِل بضرب الناتج في المقسوم عليه 1 ضرب 2 يساوي 2 ثم نُنقِص الرقم المقسوم منه 3 ناقص إثنان يساوي 1.
خواص باقي القسمة Remainder
توجد خمس 5 خصائص هامة لباقي القسمة سوف نقوم بشرحها بالتفصيل لكي نفهمها و هذه الخصائص هي:
أولا:
إذا كان باقي قسمة Remainder رقم على رقم آخر يساوي صفر 0 فهذا يعني أن الرقم الأول يقبَل القسمة على الرقم الثاني.
مثلاً 10 باقي قسمتها على 5 يساوي 0 لأن 10 تقبَل القسمة على 5 أما 10 باقي قسمتها على 6 لا تساوي الصفر فهي لا تقبل القسمة عليها.
ثانياً
باقي قسمة (A) لنفرض A % 2 = و لنفرض A أي رقم على إثنان يميّز الرقم ما إن كان زوجياً أو فردياً.
فإن كان الناتج 0 فهو رقم زوجي أما إن كان الناتج 1 فهو رقم فردي, هذه الخاصية هي ناتج من الخاصية الأولى حيث أن أي رقم يقبل القسمة على 2 هو رقم زوجي.
ثالثاً
لنفترض A % B = ؟ ناتج عملية باقي قسمة A يعني أي عدد على المتغير B يعني أي عدد آخر. يكون دائماً أقل من B حيث أنه لا يمكِن أن يكون باقي القسمة Remainder أكبر من المقسوم عليه.
هكذا إذا اكملنا 7 و 8 و 9 سوف تنتج نواتج أقل من 3 دائماً, و هذه الخاصية تُفيدُنا أن جميع. الأرقام الناتجة مهما كبُرَ الرقم الأول ستكون محصورة بين 0 و أقل من الرقم المقسوُم عليه.
و لذلك في خاصية العدد الزوجي و الفردي كٌنّا نقسِم على 2 فباقي القسمة على 2 سيكون محصوراً بين 0 و 1 مثلاً 7%2 =1 أي أن هناك خياران إما زوجي أو فردي.
رابعاً
لو قسّمنا قسمة عادية لأي عدد على 10 سنقوم بإزالة الرقم الأخير في خانة الآحاد مثلاً 400/10=40.
لقد أزلنا الرقم الأخير من الآحاد 0 و نفس الناتج سوف يكون لقسمة الأعداد الصحيحة مثلاً 401/10=40.
فهي لا تٌحافظ على الأعداد العشرية بالنسبة للعدد 401 أي أزلنا الرقم في خانة الآحاد.
أما باقي القسمة سوف يكون الرقم الذي أزلناه من خانة الآحاد نفس الأمر لـ 402.
مثلاً و بهذه الطريقة يمكننا معرفة كم قيمة خانة الآحاد في أي رقم و يمكننا لآحقاً تفكيك الرقم لأكثر من خانة.
خامساً
لنفترض A%B=A إذا كان الرقم B اكبر من الرقم A أي لا يقبَل القسمة عليه فإن الناتج دوماً. سوف يساوي A مثلاً 3%9=3 ثلاثة باقي قسمتها على تسعة يساوي 3 لأن 2 لا تقبَل القسمة على 9.
مثال 3
قُم بكتابة برنامج يحسب عدد الأسابيع في السنة ثم إحسب عدد الأيام الفردية المتبقية عدا الأسابيع.
#include <iostream>
using namespace std;
int main()
{
int days = 365;
cout << days / 7 << "weeks";
cout << " &" << days % 7 << " days" << endl;
return 0;
}
تم إنشاء متغير عددي إسمه days و قيمته 365 و هو عدد أيام السنة و وضعنا دالة طباعة تقوم بطباعة ناتج قسمة عدد أيام السنة على 7 و يطبع بعدها كلمة weeks يعني إسبوع.
ووضعنا دالة طباعة ثانية من أجل باقي القسمة ووضع إشارة & ثم يقوم بحساب باقي القسمة من عدد أيام السنة في 7 ثم يكتب بعدها كلمة days أي يوم.
و عند تشغيل الكود سيظهر بالشكل.
52weks &1 days
نلاحظ من الصورة السابقة أنه كتب لنا أن عدد الأسابيع في السنة هي 52 إسبوع و باقي القسمة هو 1 يوم.
مثال 4
قم بعمل برنامج يقوم بعكس الرقم المٌدخَل له شرط أن يكون الرقم المُدخَل مؤلف حصراً من ثلاث خانات.
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "اكتب الرقم مؤلف من ثلاث خانات" << endl;
cin >> x;
if(x >= 100 && x <= 999)
{
//الرقم صحيح
int a1 = x % 10;
int a2 = (x / 10) % 10;
int a3 = x / 100;
cout << a1 << a2 << a3 << endl;
}
else {
//الرقم خاطئ
cout << "مع السلامة الرقم خاطئ" << endl;
exit(1);
}
return 0;
}
انشأنا متغير عددي int و هو x و قيمته سوف يقوم المستخدم بإدخالها, ثم طبعنا للمستخدم. رسالة تخبره بأن يدخل رقم مؤلف من ثلاث خانات بشكل إجباري حتى يتم عكسها.
بعد ذلك وضعنا دالة cin الذي هي من سوف تطلُب من المستخدم إدخال قيمة x و إستقبالها.
و قمنا بوضع شرط عبر دالة if الشرطية إذا كان x اكبر أو يساوي 100 && x أصغر أو يساوي 999.
هذه من أجل أن يقوم المُستخدِم مجبوراً بكتابة رقم محصور بين 100 و 999 و إن تم إدخال غير ذلك فسيتم طرده من البرنامج.
و الشرط كان في حال كان الرقم صحيح يتم تنفيذ ما يلي :
أنشأنا ثلاث متغيرات و هي a1 لخانة الآحاد و a2 لخانة العشرات و a3 لخانة المئات.
و شروطهم كانت في خانة الآحاد نقوم بإنتزاع قيمة الآحاد بالإعتماد على الخاصية الرابعة من الخواص السابقة
و بالنسبة لخانة العشرات a2 ايضاً نقوم بالإعتماد على الخاصية الرابعة لإنتزاع رقم العشرات عبر (x / 10) % 10.
و ثم في الخانة الثالثة خانة المئات قمنا بتقسيم x على 100 لأن إذا قسّمنا على 100 فالبرنامج سيقوم بحذف رقم الآحاد و رقم العشرات و إبقاء رقم المئات.
بحال إدخال قيمة صحيحة
بحال إدخال قيمة خاطئة