مفهوم التعامل مع الأعداد في C++
هناك الكثير من الدوال الجاهزة في C++ التي يمكن استخدامها لإجراء عمليات حسابية. بعض هذه الدوال يمكن استخدامها بشكل مباشر لأنها تعتبر معروفة بالنسبة لمترجم اللغة بشكل إفتراضي و بعض الدوال بحاجة لأن تضّمنها بنفسك أولاً حتى تتمكن من استخدامها.
بالإجمال, حتى تستطيع استخدام الدوال المخصصة لإجراء العمليات الحسابية, يجب تضمين الملف cmath
الذي يحتويها.
لذلك ستجد أننا سنضيف السطر التالي في أي مثال نستخدم فيه إحدى الدوال التي سنتعلمها في هذا الدرس.
#include <cmath>
هذا السطر يعني أننا نريد إضافة محتوى الملف cmath
في البرنامج مما يجعلنا قادرين على استخدام الدوال الموجودة فيه.
طريقة توليد أرقام عشوائية في C++
في حالات كثيرة قد تحتاج إلى توليد قيم عشوائية في برامجك و قد تكون بحاجة إلى تحديد نطاق الأعداد العشوائية التي ترغب في توليدها, فمثلاً في لعبة الزهر قد ترغب في الحصول على قيمة عشوائية بين 1 و 6.
الدالة rand()
للحصول على رقم عشوائي, يمكنك استخدام دالة إسمها rand()
موجودة في الملف stdlib.h
كالتالي.
المثال الأول
Main.cpp
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
// هنا قمنا بطباعة رقم عشوائي
cout << "Random number: " << rand();
return 0;
}
سنحصل على نتيجة عشوائية تشبه النتيجة التالية عند التشغيل.
Random number: 41
إذا قمنا بتشغيل البرنامج مرة ثانية سنحصل على نفس النتيجة السابقة كالتالي.
Random number: 41
إذا قمنا بتشغيل البرنامج مرة ثالثة سنحصل على نفس النتيجة السابقة كالتالي.
Random number: 41
إذاً استخدام الدالة rand()
لوحده لا يضمن أن تحصل على رقم عشوائي مختلف في كل مرة تقوم فيها بتشغيل البرنامج.
لهذا السبب بالتحديد, عليك أن تعلم مترجم لغة C++ بأن يعيد تغيير الإحتمالات العشوائية عند تشغيل البرنامج و قبل استداعاء الدالة rand()
و هذا ما سنتعلمه الآن.
الدالتين srand()
و time()
الدالة srand()
تستخدم لتغيير سلسلة القيم العشوائية التي سيتم توليدها عند استدعاء الدالة rand()
مما يجعلك تحصل على قيم عشوائية مختلفة عن القيم التي حصلت عليها في المرة السابقة التي قمت فيها بتشغيل البرنامج.
إفتراضياً, الدالة rand()
تستخدم المدى srand(1)
في كل مرة يتم فيها تشغيل البرنامج, لهذا كنا نحصل على نفس القيم العشوائية عند البرنامج.
لتمرير رقم مختلف للدالة srand()
و بشكل تلقائي, يمكنك تمرير عدد الثواني الموجودة من 1-1-1970
و حتى وقت الجهاز الحالي و هذا تحصل عليه من خلال استدعاء الدالة time(0)
و تمريرها للدالة srand()
كما سنرى في المثال التالي.
ملاحظة: لاستخدام الدالة srand()
يجب تضمين الملف stdlib.h
و لاستخدام الدالة time()
يجب تضمين الملف time.h
.
المثال الثاني
Main.cpp
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
// هنا قمنا بتغيير سلسلة القيم العشوائية التي سيتم توليدها
srand(time(0));
// هنا قمنا بطباعة رقم عشوائي
cout << "Random number: " << rand();
return 0;
}
سنحصل على نتيجة عشوائية تشبه النتيجة التالية عند التشغيل.
Random number: 1537
إذا قمنا بتشغيل البرنامج مرة ثانية سنحصل على نتيجة عشوائية مختلفة عن النتيجة السابقة كالتالي.
Random number: 1579
إذا قمنا بتشغيل البرنامج مرة ثالثة سنحصل على نتيجة عشوائية مختلفة عن النتيجة السابقة كالتالي.
Random number: 1621
المثال التالي يوضج طريقة تحديد أعلى و أدنى قيمة عشوائية يمكن أن يتم إرجاعها.
المثال الثالث
Main.cpp
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
// هنا قمنا بتغيير سلسلة القيم العشوائية التي سيتم توليدها
srand(time(0));
// هنا قمنا بإنشاء رقم عشوائي بين 1 و 10
int x = rand() % 10 + 1;
// هنا قمنا بطباعة رقم عشوائي
cout << "Random number: " << x;
return 0;
}
سنحصل على رقم عشوائي بين 1
و 10
كالتالي عند التشغيل.
Random number: 3