تم النشر منذ 29 Mar 2010 (معدل) في هذا الدرس سنتعرف على النقاط التالية:1- ما هو العدد العشوائي ؟ وهل هو موجود ؟2- لماذا نحتاج لتوليد الأرقام العشوائية ؟3- كيف يمكننا توليد أرقام عشوائية (باستخدام الدوال الجاهزة) ؟4- كيف ننشئ دالة عشوائية ؟لنبدأ على بركة الله :)1- ما هو العدد العشوائي ؟ وهل هو موجود ؟أولا .. عندما نقول "عدد عشوائي" فهذا لا يعني بالضرورة أنه عشوائي بالمعنى العام .. العدد العشوائي هو العدد المولد من طرف دالة مجهولة السلوك (نسبيا) و عندما أقول نسبيا فأنا أقصد "المستخدم" , أي أن المستخدم عندما يقوم بتشغيل الدالة ستقوم بإرجاع عدد عشوائي كما يتصور "هو" و لكن في الحقيقة .. فإن هذا العدد العشوائي يخضع لقانون معين ..المبرمج فقط هو من يعرفه !ألا ترى بعض التناقض في كلامنا السابق ! قلنا أن العدد "عشوائي" ثم قلنا بأنه يخضع لقانون معين !!! كيف ؟؟؟بداية .. أحب أن ألفت انتباهك إلى الجدل الدائر حول العدد العشوائي !!!فالمبرمجون أرادوا برمجة دالة تمكن من توليد أرقام عشوائية ! وكانت المشكلة تكمن في برمجة الدالة العشوائية .. فنحن حين نقول "دالة مبرمجة" فهذا يعني أن الدالة تخضع لقانون محدد .. أما العدد العشوائي فلا يخضع لأي قانون .. وإلا فسيكون عددا محددا و سيفقد عشوائيته .. هنا تكمن المشكلة ...السؤال المطروح الآن هو:إذا استطعنا إخضاع كل شيء لقانون محدد فهل هذا يعني بأن العشوائية موجودة أصلا أم ...؟في الحقيقة .. لا يوجد شيء اسمه (العشوائية) لأن الكون لا يمكنه الاستمرار لأكثر من مليار عام و الأرض لأكثر من 60 مليون عام إذا كان هناك شيء "عشوائي" و لو كان صغيـــــرا !!!هناك تأثير يسمي (تأثير الفراشة) تم تجسيده في فيلم أجنبي بنفس الاسم و هو ببساطة يقول أنه لو تم تغير شيء صغير جدا جدا .. في الماضي و لو كان مجرد " فراشة " فإن هذا سيؤثر قطعاً بشكل ضخم جدا جدا .. في الحاضر و المستقبل.لو طبقنا هذا التأثير على (كلمة عشوائي) لوجدنا أنه لن يصبح الكون كوناً إذا كان هناك شيء اسمه العشوائية .أذكر هنا أيضاً (دالة ليمان) التي لم يجد العلماء لها حلا منذ 150 عاماً و هي دالة رياضية حاول العالم (ليمان) أن يربط فيها بين عدد الأرقام الأولية في مجموعة معينة من الأرقام تبدأ بالصفر و بين نهاية أو آخر رقم في هذه المجموعة .الدارس لهذه الدالة يجد أول الأمر أنها أرقام عشوائية و لكن إصرار العلماء على وضعها كدالة و لها حل و يحاولون بكل جهدهم إيجاد هذا الحل .. يؤكد على عدم اقتناع العلماء أصلاً بوجود العشوائية . و يرى البعض أن كلمة "عشوائي" هي مرادف لكلمة "مجهول" فنحن عندما نعجز عن تفسير ظاهرة معينة نقول أنها عشوائية .. مثلا:"النرد" فهناك من يعتقد أنها ظاهرة عشوائية بشكل مطلق !!! ولكنني أرى أنه لو توفرتْ لنا بعض البارمترات فيمكننا حينها توقع نتيجة الرمي .. فمثلا .. لو عرفنا كتلة النرد والسرعة التي قُذف بها والوضعية التي كان عليها فإننا قد نتوقع الرقم الذي سنحصل عليه بعد رمية !!! 2- لماذا نحتاج لتوليد الأرقام العشوائية ؟تُستخدم الأعداد العشوائية في الكثير من الأمور .. نذكر منها على سبيل المثال لا الحصر:a- علم الإحتمالات.b- برمجة الألعاب.c- الهندسة العكسية.d- بروتوكولات الإتصال,مثل بروتوكول TCPa- علم الإحتمالاتسأعطي مثال بسيــــط .. لكي تتضح الفكرة .. لدينا مجموعة من الكرات في صندوق .. و نريد سحب إحدى هذه الكرات بشكل عشوائي! كيف ؟؟الأمر بسيــــط للغاية .. كلما ما علينا فعله هو ترقيم هذه الكرات و أخذ عدد عشوائي من بين الأعداد المتاحة .. لاحظ أن كل رقم تقابله كرة مما يعني أننا سحبنا إحدى الكرات بشكل عشوائي.b- برمجة الألعابفي الحقيقة .. فإن الألعاب مجال خصب للبحث عن خوارزمية تولد أرقام عشوائية .. فمثلا .. لكي لا يُصر اللاعب على أن يبرمج شكل واحد للعبة معينة فيمكنه أن يعيد نفس اللعبة بعدة أشكال !!! لنأخذ مثال:حين نلعب مثلا لعبة "Tick-Tack" فالنجمة تظهر كل مرة في مكان عشوائي .. وهذا مما يجعل اللعبة أكثر إثارة.نفس الفكرة يمكننا تطبيقها في الكثير من الألعاب الأخرى ...c- الهندسة العكسيةأما في مجال الهندسة العكسية فنحن نحتاجها مثلا من أجل برمجة "الكيجن".للذين لا يعرفون ما هو "الكيجين":هناك طرق كثيرة لحماية البرامج و من أسهلها استخدام أرقام سرية معينة يتم تحديدها من قبل الشركة المنتجة للبرنامج .. وهذه الأرقام قد تعتمد في تحديدها على اسم المستخدم أو بريده الالكتروني أو الرقم التسلسلي للجهاز أو أي معلومة أخرى أو مجموعة من هذه المعلومات معا!! و عادة تحصل على هذا الرقم عند شراء المنتج من الشركة و تعطيهم بياناتك فيعطونك الرقم السري (السيريال) الذي يتيح لك استخدام البرنامج بشكل كامل. نأتي حاليا لكيفية كسر هذه الحماية .. وأشهر طريقة هي استخدام "الكيجين".و لكن ما هو "الكيجين" ؟؟؟الكيجين (keygen):هو اختصار لـ key generator أي مولد المفاتيح و هو عبارة عن برنامج صغير يطلب منك نفس المعلومة التي تعتمد عليها الشركة في إعطاء الرقم السري !! و يولد لك الرقم الذي تستطيع فتح البرنامج به .. عادة ما يستطيع بعض المبرمجين معرفة الخوارزميات التي تعتمد عليها هذه الشركات في توليد الأرقام السرية و ينشئون برنامج ليستخدمه الناس!! و طريقته سهلة (نسبيا)فهي مثلا تطلب منك الاسم الموجود في جهازك و من ثم تعطيك الرقم الذي تنسخه في البرنامج فيعمل معك بشكل كامل.نعود مرة أخرى لموضوعنا السابق و هو فائدة الأعداد العشوائية من أجل برمجة الكيجين .. تخيل أن خوارزمية التحقق من سيريال برنامج ما .. تخضع للشروط التالية:الشرط الأول:السيريال يجب أن يتكون من 10 حروف. الشرط الثاني: يقارن الحرف الأول مع A والحرف الثامن مع S والحرف العاشر مع D. إذا لحل هذه الخوارزمية يكفي أن نأخذ سيريال عشوائي من 10 حروف بحيث يحقق الشروط .. ليكن هذا السيريال مثلا: AFGMRTWSODهذا السيريال يحقق الخوارزمية ولكن يبقى السؤال هو:لماذا لا نكتفي بنشر سيريال واحد يحقق الخوارزمية .السبب هو : مثلا .. أنت تعبت حتى استنتجت الخوارزمية ثم نشرت السيريال و من ثم قام شخص آخر بسرقة هذا السيريال وقال بأنه ملك له !!!من نصدق ؟؟؟ أكيــــد سنصدق من فهم الخوارزمية.لذلك وجب علينا برمجة "الكيجن" الذي سيولد عدة سيريالات تحقق خوارزمية التحقق ...الكلام السابق يكون صحيحا إذا كان الشخص لا يعرف الخوارزمية أما إذا كان يعرفها فأنتم إذا سواء !!!بالمناسبة فإن الأعداد العشوائية تستخدم بشكل كبير في خوارزميات التشفير لأن أغلب هذه الخوارزميات تحتاج إلى تزويدها بأرقام عشوائية لتبدأ عملها بحيث لا يمكن التكهن بنتائج الخوارزمية و لا مُدخلاتها الأصلية حتى لمن يعرف جيدا طريقة عملها !!!ملاحظات:*)عادة ما تكون الخوارزميات التي تتعلق بالكيجين معقدة جدا جدا .. بحيث يكون من الصعب كسرها .. ولكن هذا لا يمنع البعض من استخدام مهاراته البرمجية (للأسف الشديد) من أجل كسر هذه الخوارزميات.**)لسنا هنا لنشرح طريقة "كسر خوارزميات الكيجين" , أبدا معذا الله .. فأنا لست "قاتلا مأجورا" إنما أردت (فقط) توضيح بعض المسائل التي تتعلق بالأعداد العشوائية.d- بروتوكولات الإتصال,مثل بروتوكول TCPالحصول على أرقام عشوائية أمر مهم جدا في علوم الحاسوب خاصة في مجال بروتوكولات الإتصالات .. مثلا في بروتوكول TCP هناك رقم تسلسلي لكل حزمة يسمح لطرف الإتصال الآخر بترتيب الحزم عند وصولها و بمعرفة ما ضاع منها و إعادة إرساله .. و هناك هجوم كلاسيكي يتمكن خلاله طرف ثالث من الدخول في الإتصال و تحويله إذا كان بإمكانه التكهن بالرقم التسلسلي المستعملباختصار إذا كنت تعرف نوع الخوارزمية و كانت الدالة العشوائية التي تزودها ضعيفة بحيث يمكن التكهن بالأرقام العشوائية التي تنتجها فيمكنك نظريا كسر هذه الخوارزمية.الحصول على أرقام حقيقة عشوائية صعب جدا في الحواسيب ! لأن هذه الأخيرة صممت كي تكون محددة في عملها (deterministic) و بالتالي أي دالة رياضية تستخدم لتوليد أرقام عشوائية سيتم كسرها و لو طالت دورتها .. لذلك عندما يحتاج برنامج ما إلى أرقام عشوائية تصلح في عمليات التشفير ( crypto grade random numbers) فيجب تزويد الحاسوب ببطاقة خاصة تقوم بإنتاج هذه الأعداد انطلاقا من "ظاهرة فيزيائية عشوائية" و ليس "دوال رياضية" و نظام FreeBSD يدعم هذا النوع من العتاد.3- كيف يمكننا توليد أرقام عشوائية ؟يمكن توليد الأرقام العشوائية بأكثر من (قانون,خوارزمية,طريقة) و كلما كان القانون أكثر تعقيدا يكون العدد أقرب ما يكون للعشوائية .. يعني يصبح من المستحيل (بالنسبة للمستخدم) معرفة سلوك الدالة التي تتولى المهمة .. فنحن عندما نقوم بإنشاء دالة عشوائية ترجع قيمة العدد المُدخل قسمة على 2 !!!الآن أصبح من السهل اكتشاف سلوك هذه الدالة .. فعندما يقوم المستخدم بتشغيل هذه الدالة 10 مرات (مثلا) سيتمكن من استنتاج سلوك هذه الدالة بكل سهولة .. هنا يكمن احتياجنا في قانون رياضي يكون معقد بعض الشيء ..مما يربك المستخدم أثناء محاولته معرفة سلوك الدالة.الكلام السابق يكون أكثر دقة إذا كان العدد العشوائي عبارة عن عدد "كسري" وكلما كانت الفاصلة غير منتهية كان الكلام أدق .. أما إذا كان العدد العشوائي عبارة عن عدد صحيح .. فسيكون الكلام السابق غير دقيق تماما ! لأن المستخدم أصبح بإمكانه اكتشاف سلوك الدالة التي تولد الأعداد العشوائية !!!فيمكنه (مثلا) توليد 1000 عدد بين 1 و 10 مما يقوده إلى استنتاج سلوك الدالة .. وهكذا .. يعني يختار مجال ضيق ويقوم بتوليد الكثير من الأعداد العشوائية في المجال المُختار .. مُستنتجا الملامح الأولى لسلوك هذه الدالة.الآن .. سنقوم باستعمال دالة تقوم بتوليد رقم عشوائي.الدالة التي سنستعملها هي الدالة rand وتوجد في المكتبة cstdlib , هذه الدالة تتبع خوارزمية مُعقدة بعض الشيء !!! مما يجعل عملية تتبع الرقم المُولد من طرف الدالة "عملية صعبة" إن لم تكن "مستحيلة" , هذا في حالة استخدام البذرة أما إذا لم نستخدمها فستقوم الدالة بتوليد أرقام عشوائية "شبه منتظمة" و السبب هو أنها تتبع خوارزمية ثابتة لتوليد الأرقام العشوائية مثلا .. إذا قام المستخدم بأخذ مجال ضيق للأعداد الصحيحة و قام بتوليد الكثير من الأرقام العشوائية ثم قام بتكرار العملية عدة مرات .. فسيلاحظ انتظام هذه الأعداد بشكل أو بآخر !!!لذلك قام المبرمجون بإنشاء الدالة srand التي تعتمد على توليد الأرقام العشوائية حسب البذرة (seed) والبذرة عبارة عن عدد صحيح , هذه البذرة يجب أن تكون متغيرة في كل وقت .. لكي يكون العدد المولد "شبه عشوائي" , و عادة ما يستخدم المبرمجون "الزمن" كبذرة للدالة srand , يعني نُسند قيمة الثواني إلى الدالة srand فنحصل على رقم عشوائي و عندما نُسند قيمة الزمن مرة أخرى سنحصل على عدد عشوائي آخر ! لأن الوقت يتغير من لحظة إلى أخرى.و لكن كيف يمكننا إسناد قيمة الثواني ؟يتم ذلك باستخدام الدالة time الموجودة في المكتبة ctime , هذه الدالة تستقبل الوسيط المعدوم NULL أو يمكن أن نكتب العدد 0 ولكنني أفضل الكتابة الأولى.الدالة time تستقبل الوسيط NULL و تعيد عدد الثواني التي مرت من الساعة:00:00 في اليوم 1 جانفي في عام 1970.طبعا يمكننا الآن أن نستنتج عدد الدقائق و الساعات والأيام و الشهور و ... إلخانظر الكود:long seconds,minutes,days,hours;seconds=time(NULL);minutes=seconds/60;hours=minutes/60;days=hours/60;و يمكننا أن نكتب كلمة time_t بدل الكلمة long لأن المكتبة ctime تحتوي على المتغير time_t المعرف كما يلي:typedef long time_t; الآن سنقوم بكتابة كود يخرج عددا عشوائيا:#include<iostream>#include<ctime>#include<cstdlib>using namespace std;int main(){ srand(time(NULL)); int n=rand(); cout<<n<<endl; system("pause"); return 0;}لاحظ أننا قمنا أولا بتجهيز الدالة srand عن طريق البذرة (seed) و من ثم قمنا بإسناد القيمة التي تعيدها الدالة rand إلى المتغير n. حسنا .. الآن فهمنا كيفية توليد رقم عشوائي باستخدام الدالة rand و بالإعتماد على الدالة srand التي تحتاج إلى البذرة seed و التي عادة ما تكون "الزمن" أو لنقل:عدد الثواني المُعاد من طرف الدالة time.الآن يمكننا استنتاج كيفية توليد أرقام عشوائية محصورة بين عدد معين يُدخله المستخدم و الصفر .. كيف ذلك؟كل ما في الأمر أننا سنستخدم الرمز % و الذي يعني باقي القسمة و يخضع للقانون التالي:باقي قسمة عدد a على b يكون دائما أصغر تماما من b و أكبر أو يساوي 0لنسمي r باقي قسمة a على b و q ناتج القسمة , إذا:a = bq + rحيث : r محصور بين 0 و b و تسمى هذه النظرية بنظرية "اقليدس" وهو العالم الرياضي المشهور. مثال:#include<iostream>#include<ctime>#include<cstdlib>using namespace std;int main(){ int n; srand(time(NULL)); cout<<"n="; cin>>n; cout<<rand()%n<<endl; system("pause"); return 0;}و يمكننا توليد العديد من الأعداد العشوائية باستخدام الحلقة for.طيب .. كيف يمكننا توليد أرقام عشوائية محصورة بين عددين يُدخلهما المستخدم ؟؟؟قلنا سابق أنه يجب علينا إتباع قانون معقد بعض الشيء .. و القانون الذي سأستعمله هو:ملاحظة:القانون مكتوب باللغة الفرنسية ولكني شرحته باللغة العربية.Le nombre aléatoire =la valeur initial+rand()%(la valeur scalaire);La valeur scalaire=la valeur final-la valeur initial+1;حيث:العدد العشوائي: le nombre aléatoire.العدد الأول أو القيمة الإبتدائية:la valeur initial.القيمة الموجهة: La valeur scalaire.العدد الثاني أو القيمة النهائية: la valeur final. طريقة توليد حروف عشوائية:#include<iostream>#include<ctime>#include<string>using namespace std;int main(){ string str="ABCDEFGHIJKLMNOPQRST"; srand(time(NULL)); cout<<str[rand()%20]<<endl; system("pause"); return 0;}في الحقيقة .. فإن هذا المثال بسيـــط و لا يحتاج إلى شرح و لكن سنمر عليه مر الكرام.في البداية قمنا بالإعلان عن سلسلة حرفية باسم str ثم قمنا بتوليد رقم عشوائي يقع في النطاق المسموح به .. أي ما بين 0 و 19 و سبب ذلك هو أنه إذا كان العدد العشوائي يأخذ قيمة أكبر من 19 أو أصغر من الصفر فسننتقل إلى حدود خارج نطاق المصفوفة مما يسبب ظاهرة الفيض الحسابي او ما يعرف بـ overflow لأن عناصر المصفوفة تمتلك الدليل من 0 و حتى 19 , لاحظ أن باقي القسمة على 20 يأخذ نفس المجال الذي يأخذه دليل عناصر المصفوفة.الفكرة هنا تكمن في توليد رقم عشوائي يقع ضمن المجال الذي يتحرك فيه دليل عناصر المصفوفة ثم نقوم بطباعة العنصر الموافق للرقم العشوائي المُوَّلَد .. مثلا إذا كان الرقم المولد هو 2 فسيظهر الحرف C لأنه يأخذ الترتيب 2 في المصفوفة.4- كيف ننشئ دالة عشوائية ؟رأينا سابقا كيفية توليد أرقام عشوائية باستخدام دوال جاهزة .. ولكن كيف يمكننا إنشاء دالة تقوم بتوليد الأعداد العشوائية ؟ و ما هي أهم الخوارزميات المستخدمة في هذا المجال ؟في الحقيقة هناك بعض الأمور التي صنفها علماء الفيزياء على أنها عشوائية مثل تغير المقاومة واحتمال وجود "فوتون" في مكان معين ولكن دمجها في المعلوماتية في غاية الصعوبة .. إن لم يكن مستحيــل !!! لذلك تم اللجوء إلى التفكير في الخوارزميات وأول خوارزمية طُرحت كانت من طرف العالم الشهير: "Von Neuman" وهو أحد رواد المعلوماتية.الخوارزمية التي اكتشفها "فون نيمان" تعتمد على اختيار عدد معين و رفعه للقوة 2 واختيار رقمين من الوسط في الناتج.مثال:نختار الرقم 35 , بعد رفعه للقوة 2 سنجد العدد 1225 نختار رقمين من وسط العدد 1225 وهما 22 , نعاود نفس العملية .. نرفع 22 للقوة 2 فنحصل على العدد 484 نلاحظ أن العدد يتكون من 3 أرقام , نضيف 0 من اليسار ليصبح عدد أرقام العدد عبارة عن 4 كالتالي 0484 الآن نختار رقمين من الوسط و هما 48 , إذا استمرينا على نفس الحال فسنصل إلى هده المتتالية التي تشكل أرقاما عشوائية: 35 22 48 30 90 10 ولكن إذا جربنا الآن أن نقوم برفع 10 إلى القوة 2 واختيار رقمين فإننا دائما نعود إلى الرقم 10 وهذه مشكلة .. ولكن لا بأس بانطلاقة كهذه ...و لكي تكون الخوارزمية أكثر تعقيدا !!! يقوم المبرمجون بالإعتماد على الوقت كبذرة لتوليد الأعداد العشوائية (كما قلنا سابقا).بلا شك هده ليست أفضل خوارزمية ممكنة .. ولكنها مهمة لأنها أعطت الانطلاقة .. فظهرت عدة خوارزميات .. مثل الخوارزمية التالية:#include<iostream>#include<ctime>using namespace std;int main(){ unsigned int a=time(NULL),b=time(NULL),m=100; unsigned int nombre=time(NULL); for(int i=0;i<20;i++) { nombre=(a*nombre+ b)%m; cout<<nombre<<endl; } system("pause"); return 0;}هذا البرنامج سوف يطبع 20 رقما عشوائيا وبالنسبة للخوارزمية فهي تعتمد على أخذ رقم معين يتم الحصول عليه من الزمن وبعد ذالك يتم ضربه في أحد الأرقام العشوائية التي اخترناها في البداية ثم إضافته إلى رقم عشوائي آخر .. و أخيرا نقوم بحساب باقي القسمة على الرقم 100 لأنني أردت إظهار أعداد عشوائية أقل من 100 و يمكنك تغيير العدد m كيفما تشاء .. كما يمكنك أن تجعله متغير عشوائي! كأن تسند إليه القيمة المعادة من طرف الدالة time مثلا و لكن ستظهر لكَ أعداد ضخمة.تحياتي. تم تعديل 2 Aug 2012 بواسطه أحمد الشنقيطي تنسيق المشاركة. 12 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 1 Apr 2010 (معدل) بارك الله فيك اخي احمد وجزاك الله خيرا وبارك لك في علمكولقد حملت الكتاب ولكن لم اقراه بعد ومشكوووووووور تم تعديل 1 Apr 2010 بواسطه mido_kik 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 1 Apr 2010 (معدل) بارك الله فيك اخي احمد وجزاك الله خيرا وبارك لك في علمكولقد حملت الكتاب ولكن لم اقراه بعد ومشكوووووووورشكرا لك. تم تعديل 29 Jun 2012 بواسطه أحمد الشنقيطي 1 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 2 Apr 2010 الله يوفقك .. بصراحه استفيد من مواضيعك والكتب الي تضيفها ولكن هناك مشكله بكتابك القديم ولا لقيت له حل .. ياليت انك تكتب ايميلك واضيفك .. وشكراا 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 2 Apr 2010 (معدل) الله يوفقك .. بصراحه استفيد من مواضيعك والكتب الي تضيفها الله يبارك فيك .. و إن شاء الله تستفيد أكثر ...ولكن هناك مشكله بكتابك القديم ولا لقيت له حل ..هذه المشكلة تظهر في بعض الكتب الإلكترونية مع بعض الأجهزة .. يعني إذا قمتَ بتشغيل الكتاب على جهاز آخر فربما يعمل بشكل تام ... تم تعديل 24 Jun 2012 بواسطه أحمد الشنقيطي 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 2 Apr 2010 بارك الله فيك أخ أحمد.أريد أن أدخل معك في مناقشة موضوع العشوائية لأنه مهم جداً..أولاُ أنت قلت البذرة seed ، هل هذا معناه أن البذرة هي عبارة عن خوارزمية معينة تعتمد على الزمن :unsure: 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 2 Apr 2010 بارك الله فيك أخ أحمد.الله يبارك فينا و فيك.أريد أن أدخل معك في مناقشة موضوع العشوائية لأنه مهم جداً..شرف لي النقاش معك ...أولاُ أنت قلت البذرة seed ، هل هذا معناه أن البذرة هي عبارة عن خوارزمية معينة تعتمد على الزمنانظ جيدا إلى ما كتيتُ:قام المبرمجون بإنشاء الدالة srand التي تعتمد على توليد الأرقام العشوائية حسب البذرة (seed) والبذرة عبارة عن عدد صحيح , هذه البذرة يجب أن تكون متغيرة في كل وقت .. لكي يكون العدد المولد "شبه عشوائي" , و عادة ما يستخدم المبرمجون "الزمن" كبذرة للدالة srand , يعني نُسند قيمة الثواني إلى الدالة srand فنحصل على رقم عشوائي و عندما نُسند قيمة الزمن مرة أخرى سنحصل على عدد عشوائي آخر ! لأن الوقت يتغير من لحظة إلى أخرى.فعلا .. يا محمد .. البذرة ما هي إلا عدد صحيح ! يساعدنا في تغير العدد (العشوائي) المُولد من طرف الدالة .. فكلما تغيرت البذرة سيتغير العدد الذي تُعيده الدالة .. لهذا كان اختيار المبرمجين للزمن كبذرة للدالة العشوائية أمرا "مُوفقا" إذْ أن الزمن (كما هو معلوم) يتغير من لحظة إلى أخرى .. مما يتسبب في تغير العدد المُعاد من طرف الدالة.إذا وجدت أي استشكال فلا تتردد في طرحه .. فهذه ساحة علمية .. الغرض منها هو استفادة الجميع.دمتم بود.أخوكم أحمد/محمد. 1 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 4 Jun 2010 جزاك الله خير ا و سدد خطاك موضوع قيم للغايه 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 8 Jul 2010 ما شاء الله فتبارك الله .. موضوع دسم :wink: و جميل جدا :) أتمنى لك التوفيق :wub: 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 8 Jul 2010 سبحان الله ياأخى, أسلوبك رائع جدا في الشرح,, بارك الله فيك..لقد قرأت المقدمة و إستمتعت جدا جدا...إلى الأمام دائما أستاذ متألق :D 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 8 Jul 2010 أخي أحمد ألف شكر لك على هالشرح الرائع والجميل والسهل إستمتعت كثيراً بقراءة الموضوع والتطبيق ولكن هناك شئ واحد لم أفهمه أتمنى منك الرد عليه وهو الدالة الموجهة هل هي Srand أم ماذا وألف شكر لك والله يوفقك ويجعل هالموضوع في ميزان حسناتك 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 9 Jul 2010 سبحان الله ياأخى, أسلوبك رائع جدا في الشرح,, بارك الله فيك..لقد قرأت المقدمة و إستمتعت جدا جدا...إلى الأمام دائما أستاذ متألق :D :blush: :blush: :blush: أخي أحمدألف شكر لك على هالشرح الرائع والجميل والسهلإستمتعت كثيراً بقراءة الموضوع والتطبيق ولكن هناك شئ واحد لم أفهمهأتمنى منك الرد عليه وهو الدالة الموجهة هل هي Srand أم ماذاوألف شكر لك والله يوفقك ويجعل هالموضوع في ميزان حسناتك سُررت بمرورك :wub: ماذا تقصد بالدالة الموجهة !؟ربما لا أجد الوقت الكافي للرد عليك لأنني مشغول حاليا و لكن الإخوة الكرام لن يقصروا معك :) في أمان الله. 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 10 Jul 2010 ما شاء الله اخى احمد موضوع ممتاز ...فى ميزان حسناتك ان شاء اللهدعواتك لك بظهر الغيب :wub: 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 12 Jul 2010 الله يعطيك العافية ، موضوع مهم وشيق جداًإن توليد أرقام عشوائية "حقيقية" ليس بالأمر السهل لكن لدي طريقة تولد أرقام أقرب ما تكون للعشوائية بدون الاستعانة بعتاد متخصص :1- اختر مجموعة من مواقع الإنترنت بحيث تكون مواقع سرفراتها أبعد ما يمكن عن موقعك ( أو بالأحرى يوجد أكبر عدد من الراوترات بينك وبين تلك المواقع ، مثلا نحن في الشرق الأوسط يمكن ان نختار مواقع من جنوب شرق اسيا نظرا لضعف وصلات الانترنت بيننا وبين تلك المناطق).2- اختر الأوقات من اليوم التي يكون فيها الانترنت في بلدك أزحم ما يمكن (ربما تكون فترة أول الليل الأفضل)3- قم بعمل ping لمجموعة السرفرات الواحدة تلو الأخرى والحصول على زمن الاستجابة .4- قم بحساب باقي قسمة زمن الاستجابة على 2 ، بمعنى آخر (ping_time %2 ) لكل محاولة . سينتج من ذلك إما رقم 1 أو 0 والذي يعتبر في هذه الحالة بت عشوائي.5- قم بتسجيل ناتج الخطوة رقم 3 و 4 لمرات كثيرة جدا (عدة ملايين من المرات) على مدى عدة أيام لتحصل على عدة ميجابايتات من البتات ال entropy6- قم باختيار بتات (سواء بطريقة يدوية أو باستعمال بيانات من نفس الخطوات المذكورة سابقاً) من ال entropy pool لتستعملها كبيانات عشوائية .لكم تحياتي 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 12 Jul 2010 السلام عليكم ...Could a truly random number be generated using pings to psuedo-randomly selected IP addresses?No! 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 12 Jul 2010 السلام عليكم ...Could a truly random number be generated using pings to psuedo-randomly selected IP addresses?No!الكلام سهل (طبعا لا اقصدك إنما اقصد المقال الذي تشير إليه) هل تستطيع التنبؤ بالبيانات التي يتم توليدها بهذه الطريقة ؟ 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 12 Jul 2010 هل تستطيع التنبؤ بالبيانات التي يتم توليدها بهذه الطريقة ؟لم أقصد أنه لا يمكن الحصول على بيانات عشوائية. ماقصدته أنه إذا أردت بيانات عشوائية حقيقية فهذه ليست طريقة مضمونة. وضعت الرابط للفائدة, و لاحظت أنك أشرت إلي أن البيانات ليست عشوائية حقيقية في مشاركتك.تحياتي... 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 3 Aug 2012 جزاكم الله خيراًو لكني ظننتك ستتكلم أكثر عن كيف تعمل دوال توليد الأرقام العشوائية بشيئ فيه تفصيل أكثر من هذاو لكني على العموم استفدتو خاصة فكرة ربط الدالة بالزمن لأنه متغير و بالتالي يمكننا الإعتماد عليه لتوليد رقم عشوائي مطلق 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 4 Aug 2012 ظننتك ستتكلم أكثر عن كيف تعمل دوال توليد الأرقام العشوائية بشيئ فيه تفصيل أكثر من هذاما طبيعة التفصيل الذي تريده ؟و لكني على العموم استفدت و خاصة فكرة ربط الدالة بالزمن لأنه متغير و بالتالي يمكننا الإعتماد عليه لتوليد رقم عشوائي مطلقليس عددا عشوائيا مطلقا ! :)الأرقام العشوائية الحقيقة يتم توليدها انطلاقا من ظواهر الطبيعة, مثل الضجيج الجوي حيث يتم وضع جهاز صغير عبارة عن لاقط صوت حساس في شارع مزدحم و يتم توليد الأرقام العشوائية انطلاقا من الضجيج المتولد.الأرقام التي يتم توليدها اعتمادا على "الوقت" هي أرقام "شبه عشوائية" (Pseudorandom) و من السهل كسرها.الكثير من الثغرات القاتلة التي تظهر في أنظمة التشغيل, سببها الرئيسي هو الأعداد العشوائية, خذ على سبيل المثال الثغرة التي أحدثت ضجة واسعة في شهر مايو 2008 و التي أثرت على أنظمة Linux Debian و المتعلقة بــ implementation of OpenSSL, سبب الثغرة يكمن في جزء صغير من الكود مسؤول عن توليد الأرقام العشوائية, حيث قام بتوليد أرقام عشوائية بجودة أقل .. مما أدى إلى سهولة التنبؤ بتلك الأرقام و كسرها, حينها ظهرت المصيبة ...!! 2 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 1 Nov 2012 مقال هام جداً بارك الله فيك .. أخي المتألق :)الكثير من الثغرات القاتلة التي تظهر في أنظمة التشغيل, سببها الرئيسي هو الأعداد العشوائية, خذ على سبيل المثال الثغرة التي أحدثت ضجة واسعة في شهر مايو 2008 و التي أثرت على أنظمة Linux Debian و المتعلقة بــ implementation of OpenSSL, سبب الثغرة يكمن في جزء صغير من الكود مسؤول عن توليد الأرقام العشوائية, حيث قام بتوليد أرقام عشوائية بجودة أقل .. مما أدى إلى سهولة التنبؤ بتلك الأرقام و كسرها, حينها ظهرت المصيبة ...!!إذا هل يمكننا اعتبار العشوائية النسبية ثغرة دائمة يمكن كسرها (دون تجاهل الصعوبة في ذلك )وكسؤال آخر ...هناك مسائل رياضية ومتتاليات عددية لا يمكن التنبّؤ بحدودها وهي حتى الآن تعتبر عشوائية بالنسبة لعلماء الرياضيات ..كالأعداد الأولية مثلاً ...فهل يمكننا بناء على خوارزمية تستخدم الأعداد الأولية وbits مأخوذة من هذه الأعداد الأولية بطريقة أولية .. إلخ إلخ .. أن نحصل على رقم عشوائي مطلق ...وإن لم نحصل على رقم عشوائي مطلق فهذا يعني وجود علاقة تربط الأعداد الأولية ببعضها .. أو على الأقل توضح تسلسل الحدود ..وهو أمر عجز عنه علماء الرياضيات حتى الآن رغم المجهودات الكثيرة المبذولة في هذا المجال ...يعني نحن أمام حالتين : إما أن نوجد سلسلة عشوائية مطلقة أو أن نوجد علاقة تربط الأعداد الأولية وكلا الأمرين نعتبره مستحيلاً ... فما رأيكم .. والسلام عليكم ورحمة الله وبركاته 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 31 Mar 2013 تمكن احد العلماء من توليد ارقام عشوائية مستفيدا من حركة الالكتوون التي لم نتمكن من فهمها حتى الآن ( الميكانيكية الكمية ) 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 28 Oct 2013 رغم أنني رأيت المقال متأخرة إلا أنه ممتاز و رائع تألقت في كتابنه و شكرا لك كثيرا فقد أعطيتني ما كنت أبحث عنه بارك الله فيك و زادك من علمه علما و تألقا :o :lol: 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 17 Dec 2013 جزاك الله خير كاتب المقالة الدوال العشوائية راائعة بما تعنيه الكلمة ألا تلاحظ أننا استفدنا من شيء قريب من العشوائيةفكيف إذا كانت عشوائية مطلقة؟؟ :) :) 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه