الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

نقاش : الدالة() rand ليست عشوائية أبداً ...

بدأه مصطفى 36a2 في 27 سبتمبر 2012 · 24 رد · 5,383 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الحمد لله رب العالمين ...والصلاة والسلام على أشرف الخلق والمرسلين ..سيدنا محمد صلى الله عليه وسلم وعلى آله وأصحابه أجمعين

السلام عليكم ...

أثناء تتبعي لأحد البرامج في ++C ...

خطر على بالي أن أبحث عن جسم الدالة() rand ... وكنت عندها أفكر في أنني سأتعلم وأحاول فك خوارزمية العشوائية التي تنفذها ...

ولكن للأسف اكتشفت أنها تتبع علاقة رياضية ... واضحة .. ومعلومة النتائج مسبقاً ...

فالدالة rand تقوم بتعليمة واحدة فقط وهي :

return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);

وكل استدعاء سيكون تابعا للاستدعاء السابق ...

حيث أن المتحول holdrand معرف كمتحول global ... ووظيفة srand تنحصر في تنفيذ التعليمة التالية :

holdrand = (long)seed;

أي اسناد الوسيط إلى المتحول holdrand

وبالتالي .. يمكننا القول أن أي اعتماد على عشوائية هذه الدوال هو اعتماد على عصا رفيعة تنكسر بسهولة ...

وهي ليست معقدة كما قال أخي العزيز أحمد الشنقيطي :

اقتباس
الدالة التي سنستعملها هي الدالة rand وتوجد في المكتبة cstdlib , هذه الدالة تتبع خوارزمية مُعقدة بعض الشيء !!!

في هذه المقالة الرائعة له ...

كما أنه يمكن لأي هاوِ أن يكتب دالة أفضل منها ... على الأقل كمثال ...بحيث تتغير holdrand بعد كل استدعاء بدل أن تبقى محتفظة بالقيمة السابقة ...

فعدم حدوث ذلك يسهل بشكل كبير توقع النتيجة التالية ...

ربما اعتمدها المبرمجون لأنها لا تكرر الأرقام ولكن هذا غير صحيح فبعد استدعائها 145021636 مرة فإنها تعود لتوليد البذرة ...وتكرار الحلقة من البداية ....

لذلك أنصحكم بكتابة دوالكم العشوائية يدوياً ... فسيكون هذا أكثر عشوائية ...

والله ولي التوفيق

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 27 سبتمبر 2012 في 13:58

#2

وهنا يتبادر إلى ذهني سؤال ... ماذا لو كان هناك المزيد من هذه الأخطاء أو لنقل التجاوزات ... في باقي مكتبات اللغة ...

حيث يتجنب المبرمج عموماً تنقيح مكتبات اللغة فهي وُجدت كي تكون محل ثقة مطلقة ...

ألا يمكن أن يكون هناك أجزاء برمجية وُضعت على عجالة من المبرمجين .. ألا يمكن أن يكون هناك حلول أفضل من الموجودة بشكل جاهز ....

مثلاً ألا يمكننا إنشاء arraylist أسرع من الموجودة في STL

ألا يمكن كتابة دوال إدخال وإخراج سريعة أكثر من تلك الموجودة في cstdio خصوصاً وأن iostream (وهي التي يُفترض أن تكون متطورة أكثر من أمها ) بطيئة جدا بالمقارنة مع cstdio

هذا بدون الحديث عن أدوات النظام ... خصوصاً ويندوز .. فمن سيعرف أصلاً ماذا كتب المبرمج هنا أو هناك ...

خصوصاً عندما نعرف أن التقنية التي تنتجها أي شركة في العالم ...لا تظهربشكلها الكامل إلا بعد سنوات عديدة ...عندما يصير لديها تقنية جديدة أخرى تدخرها لسنوات أخرى ...

فما رأيكم ؟ دام فضلكم ...

#3

الدالة rand تستخدم لتوليد أرقام عشوائية بسرعة للحالات البسيطة ولاتستخدم في العمليات الحساسة. زيادة العشوائية تعني البطئ, فتوجد هناك متكتبات متخصصة توفر دوال أقوى لتوليد الأرقام العشوائية ربما أشهرها OpenSSL.

إطلع على هذا المقال توليد الأرقام العشوائية.

#5
اقتباس
آخي مصطفى, كيف توصلت إلى خوارزمية الدالة rand ؟

اعذرني أخي الكريم ...فهذا سر ...

أمزح معك فقط...laugh.giflaugh.gif

الأمر في غاية البساطة ... أنا أعمل على Visual Studio 6 و لترجمة البرنامج نضغط F7 .. ولعمل run F5 ..

وفيه خاصية رائعة وهي أنه عند الضغط على F11 لإغنه يقوم بتنفيذ البرنامج خطوة خطوة أمامك ... ويضع سهم أصفر على السطر الذي يتم تنفيذه ...

فإذا وصلنا إلى دالة ما وضغطنا f11 يدخل إلى تنفيذ الدالة .. داخل مكتبتها ...

أما عند ضغط F10 فإنه ينفذ الدالة ..دون أن يقوم بالدخول إلى جسمها ...

وهذا جسم الدالة الكامل ... داخل الملف rand.c ومعه الدالة srand

الجميل والرائع أنه يمكننا معرفة الكثير من الدوال كيف تعمل (إلا أن بعض الدوال تكون مجرد تصريحات ومحتواها يبقى داخل الdll للأسف )

كما أنه للأسف ... أجد أن المبرمجين يعتبرون أن مهمتهم أن يتابعوا من بعد المكتبات وكأن فتح المكتبة وقراءتها ممنوع smile.gif

إليك محتوبات الملف rand.c

/***
*rand.c - random number generator
*
*   	Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
*   	defines rand(), srand() - random number generator
*
*******************************************************************************/

#include <cruntime.h>
#include <mtdll.h>
#include <stddef.h>
#include <stdlib.h>

#ifndef _MT
static long holdrand = 1L;
#endif  /* _MT */

/***
*void srand(seed) - seed the random number generator
*
*Purpose:
*   	Seeds the random number generator with the int given.  Adapted from the
*   	BASIC random number generator.
*
*Entry:
*   	unsigned seed - seed to seed rand # generator with
*
*Exit:
*   	None.
*
*Exceptions:
*
*******************************************************************************/

void __cdecl srand (
    	unsigned int seed
    	)
{
#ifdef _MT

    	_getptd()->_holdrand = (unsigned long)seed;

#else  /* _MT */
    	holdrand = (long)seed;
#endif  /* _MT */
}


/***
*int rand() - returns a random number
*
*Purpose:
*   	returns a pseudo-random number 0 through 32767.
*
*Entry:
*   	None.
*
*Exit:
*   	Returns a pseudo-random number 0 through 32767.
*
*Exceptions:
*
*******************************************************************************/

int __cdecl rand (
    	void
    	)
{
#ifdef _MT

    	_ptiddata ptd = _getptd();

    	return( ((ptd->_holdrand = ptd->_holdrand * 214013L
        	+ 2531011L) >> 16) & 0x7fff );

#else  /* _MT */
    	return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
#endif  /* _MT */
}

بالتوفيق

#6

بحسب ما أعلمه أن توليد الأرقام العشوائية يعتمد على عدد التيك Tick الحالي المتولد من ساعة النظام مع إخضاعه لمعادلة ينتج عنها رقم

وبهذا يستحيل تكرار توليد الأرقام العشوائية بنفس التسلسل لأنه على فرض أننا استدعينا الدالة بسرعة المعالج وهذا مستحيل لأن كل تعليمة أسمبلي لها عدة دورات Cycle أي جسم الدالة لا شك أنه يحتاج إلى عشرات الدورات وبالتالي فرقم التك حتما متغير وبفارق أكبر من واحد ومع إدخاله إلى معادلة فلا شك أن خرجها سيكون قيمة جديدة غير إيقاعية أو متكررة أو نمطية

كما يمكن إنشاء دالة توليد أرقام عشوائية بالاعتماد على أشياء نعلم أنها متغيرة

مثلا الاعتماد على معادلة مدخلاتها هي قيم المسجلات في المعالج لأنه في كل دورة معالج هناك تغير في أحد المسجلات ولن تكون القيم ثابتة إلى إذا جمد الحاسب

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 28 سبتمبر 2012 في 20:02

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#7

أستاذي أبا أحمد ...

ربما كلامك صحيح في دوال أخرى ... أو أنه يمكن تصميم دوال كما تقول ...

ولكن دالة() rand في مكتبة stdlib.h فهذه طريقة عملها ... ويكون إضافة بذرة أمر يدوي ... وهو الذي يمكن التنبؤ بحدوثه أثناء تتبع البرنامج ... من قبل المخترق بسهولة ...

على العموم يمكنك تجريب الدالة() rand وهي تعطي مثلاً هذه القيم دوماً ...

41
18467
6334
26500
19169
15724
11478
29358
26962
24464

ربما لاحظ بعضنا ذلك ...

خلاصة الموضوع .... لا تعتمدوا على هذه الدالة للحصول على عشوائية موثوقة ...laugh.gif

والله ولي التوفيق

#8

أخي مصطفى لقد وصلت إلى شيء كنت أحاول أن أسمع عنه في هذا الموضوع بالذات ،،،

http://www.arabteam2...howtopic=269257

شكرا لك أخي ، smile.gif + فعلا يجب علينا أن نصنع دوالنا و برامجنا بأيدينا كما فعل هؤلاء الشجعان الذين قهروا العالم بذكائهم و استخدموا خوارزمية RSA المحرمة دوليا mad.gif ،

Asrar.chm

في انتظار ردك laugh.gif ،،،

rS3eY.png
#9

أهلاً عزيزي حمزة ...

لازلت أذكر تلك المشاركة الرائعة ... في الحقيقة أنا معجب بالأخ B وردوده دائما تكون في الصميم ...

الملف الذي أرفقته !! لم يظهر شيء ... اشتغل ولكنه يظهر نافذة فارغة داخله .!!

post-256536-016391600 1348855355_thumb.g

ربما لأن الموقع محجوب عندنا ...

على كل حال ...ربما حال المبتدئين مثلي ومثلك .هكذا ..نريد أن نكتب كل شيء بأنفسنا laugh.giflaugh.gif

أما الكبار فليس لديهم وقت يحبون كل شيء جاهز happy.gif

هذا درس أخذته من الفريق العربي للهندسة العكسية ...عن RSA

ولكن التحميل يتطلب أن تكون عضوا لذلك رفعته هنا AT4RE_WoLF_RSA.rar

بالتوفيق

المرفقات
1.gif

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 28 سبتمبر 2012 في 21:02

1
#10

لقد رفعت لي شيئا مهما لذا علي أن أرفع لك شيئا مهما أيضا smile.gif

rS3eY.png
#12

ما شاء الله ...Bg_029.gifBg_029.gif

جهد رائع ...

فعلاً ...يجب أن نكتفي من الاعتماد على سوانا ونبدأ بالتفكير ...... thinking.gif

جزاك الله خيراً ...أخي العزيز ...

والسلام عليكم

#13

نعم ، أخي مصطفى إنهم فتية يعملون ليل نهار من أجل نصرة دين الإسلام ، علينا أن نقتدي بهم لنصل إلى ما وصلوا إليه من علم جزاهم الله عنه خير الجزاء smile.gif

rS3eY.png
#14
مصطفى 36a2 كتب:

أهلاً عزيزي حمزة ...

لازلت أذكر تلك المشاركة الرائعة ... في الحقيقة أنا معجب بالأخ B وردوده دائما تكون في الصميم ...

الملف الذي أرفقته !! لم يظهر شيء ... اشتغل ولكنه يظهر نافذة فارغة داخله .!!

post-256536-016391600 1348855355_thumb.g

ربما لأن الموقع محجوب عندنا ...

على كل حال ...ربما حال المبتدئين مثلي ومثلك .هكذا ..نريد أن نكتب كل شيء بأنفسنا laugh.giflaugh.gif

أما الكبار فليس لديهم وقت يحبون كل شيء جاهز happy.gif

هذا درس أخذته من الفريق العربي للهندسة العكسية ...عن RSA

ولكن التحميل يتطلب أن تكون عضوا لذلك رفعته هنا AT4RE_WoLF_RSA.rar

بالتوفيق

اضغط بالزر الأيمن للفأرة على الملف واختر properties وفي general اضغط كما في الصورة، وسيعمل بإذن الله.

post-87237-005511200 1348862125_thumb.pn

المرفقات
Capture.PNG

" إن الله كتب الإحسان على كل شيء"

::

الإرادة ... تحقق السيادة.

#15
اقتباس
اضغط بالزر الأيمن للفأرة على الملف واختر properties وفي general اضغط كما في الصورة، وسيعمل بإذن الله.

laugh.giflaugh.gifسبحان الله ...اشتغل بالفعل ... smile.gif

جزاك الله خيراً ...

تعلمت شيئاً جديداً قبل النوم ... الحمد لله ...smile.gif

#16

منذ عدة أيام خطر ببالي طريقة تشفير الرسائل القصيرة والعاجلة بحيث يمكن إرسالها عبر أي وسيلة اتصال مكشوفة و بشكل طبيعي

وهذه الطريقة ألهمتني إياها إحدى إبداعات العرب

حيث كنت أطالع موضوع عن إبداعات العرب في الشعر والأدب وكان إحداها

شعر يمكن قراءته بشكل أفقي أو عمودي

ألوم صديقي وهذا محــال

صديقي أحبه كلام يقــال

وهذا كلام بليغ الجمـال

محال يقال الجمال خيـال

وكذلك الأبيات التالية :

إذا أتيت نوفل بـــــــــن دارم ----- امير مخزوم وسيف هاشـــــم

وجــدته أظلم كل ظــــــــــالم ----- على الدنانير أو الدراهــــــــــم

وأبخل الأعراب والأعـــاجم ----- بعـــرضه وســره المكـــــــاتم

لا يستحي مـن لوم كل لائـم ----- إذا قضى بالحق في الجرائــــم

ولا يراعي جانب المكـــارم ----- في جانب الحق وعدل الحاكم

يقرع من يأتيه سن النـــــادم ----- إذا لم يكن من قدم بقــــــــــادم

التي ظاهرها مدح ولكن لو تجاهلت الشطر الثاني من كل بيت وأعدت قراءة الشطر الأول فقط فستصبح قصيدة ذم !

من هنا خطر ببالي أنه عندما يريد أحدنا إرسال رسالة ما يمكن إدراج كلماتها ضمن موضوع آخر يتم إنشاؤه على أن تحتل كلمات الرسالة الأولى مواضع معينة من كل سطر يتم الاتفاق عليها سلفا

مثل أوائل الأسطر أو الكلمة الأولى من السطر الأول والثانية من الثاني وهكذا

كمثال :

مقدمة متعارف عليها :

السلام عليكم ورحمة الله وبركاته

كيف حالكم وعساكم بخير

....

بالأمس وصلني بريد من صديقي محمد واليوم

أرسلت له الرد على استفساره وحددت له

المبلغ الواجب عليه دفعه لقاء

المطلوب ويشمل كل المتعلقات بما فيها الشحن

إلى العنوان الذي يتفق عليه من قبل

الأخ إبراهيم وهو الوسيط الذي سيكون الضامن لهذه الصفقة وسيكون المندوب

خالد أحد الشهود عليها وسيتابعها حتى النهاية

وهو من سينهي الإجراءات القانونية المتعلقة بالوثائق لضمان أن تسير الأمور

بخير وسلامة ونسأل الله التوفيق

أمنياتي لك و لأهلك بطول العمر والصحة والعافية

أخوكم

لو أعدت قراءة الرسالة السابقة فقط أوائل الكلمات مع تجاهل بقية السطر لحصلت على رسالة قصيرة

بالأمس وصلني بريد من صديقي محمد واليوم

أرسلت له الرد على استفساره وحددت له

المبلغ الواجب عليه دفعه لقاء

المطلوب ويشمل كل المتعلقات بما فيها الشحن

إلى العنوان الذي يتفق عليه من قبل

الأخ إبراهيم وهو الوسيط الذي سيكون الضامن لهذه الصفقة وسيكون المندوب

خالد أحد الشهود عليها وسيتابعها حتى النهاية

وهو من سينهي الإجراءات القانونية المتعلقة بالوثائق لضمان أن تسير الأمور

بخير وسلامة ونسأل الله التوفيق

كما يمكن كتابتها متصلة مع وضع علامات ترقيم بدل نهايات الأسطر لزيادة التمويه وعدم لفت الانتباه

بالأمس وصلني بريد من صديقي محمد واليوم، أرسلت له الرد على استفساره وحددت له، المبلغ الواجب عليه دفعه لقاء، المطلوب ويشمل كل المتعلقات بما فيها الشحن، إلى العنوان الذي يتفق عليه من قبل، الأخ إبراهيم وهو الوسيط الذي سيكون الضامن لهذه الصفقة وسيكون المندوب، خالد أحد الشهود عليها وسيتابعها حتى النهاية، وهو من سينهي الإجراءات القانونية المتعلقة بالوثائق لضمان أن تسير الأمور، بخير وسلامة ونسأل الله التوفيق

كما يمكن الاتفاق على علامة ترقيم واحدة للدلالة على بدايات الكلمات ويتم تجاهل العلامات الأخرى كلاستفهام والتعجب والنقطة لضمان زيادة التمويه والتشتيت

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 29 سبتمبر 2012 في 13:58

2

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#17

جميلة هي فكرتك يا أبو أحمد

هي عبارة عن تشفير مميز للكلمات لكن

فكرتك تبقى سهلة الاختراق لأنها لا تعتمد على خوارزمية محددة

يا صديقي الغالي . يا

أبو الطفل الظريف ،،،

أحمد smile.gif

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

أظنك فهمت الرسالة

فهمت مغزى قولي

الرسالة قولي فما قولك ؟

rS3eY.png
#18

حياك الله أخي حمزة

والظريف هو الرد المشفر blush.gif

الذي سيكون عصي على الكشف wacko.gif

أرجو توضيح العبارة

اقتباس

سهلة الاختراق لأنها لا تعتمد على خوارزمية محددة

أي كيف عدم تحديد الخورازمية يسهل الكشف و تحديدها يجعلها صعبة

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#19

أعتقد أنني لم أوفق في الشرح . ما قصدته أخي أحمد هو أن هذا التشفير الذي تطرقت له لايخضع لخوارزمية تشفير مبتكرة و معقدة ، لأن طريقة فكل التشفير ستكون بسيطة و سهلة فلو أخذنا على سبيل المثال :

اقتباس
ألوم صديقي وهذا محــال

صديقي أحبه كلام يقــال

وهذا كلام بليغ الجمـال

محال يقال الجمال خيـال

نجد أن النص المشفر يعطي دلالة واضحة بأنه هو النص المقصود من الرسالة ، وأقصد هنا الكلمات الأولى من كل سطر :

اقتباس
ألوم صديقي وهذا محــال

صديقي أحبه كلام يقــال

وهذا كلام بليغ الجمـال

محال يقال الجمال خيـال

فلو تأملنا النظر مليا في خوارزمية RSA مثلا لوجدناها تخضع إلى قواعد عملية و دائمة التحقق ، أعني أنها صالحة في أي زمان و مكان . فهي تعتمد على المفتاح الخاص و المفتاح العام و من دونها لا يمكننا التشفير أو بالأحرى فك التشفير . و إليك الطرق التي تعتمد عليها خوارزمية RSA الشهيرة :

1_1301256363_crypto-asym01.gif

Génération des clés et envoi de la clé publique à Bob

1_1301256379_crypto-asym2.gif

Chiffrage du message secret avec la clé publique

Déchiffrage du message secret avec la clé privée

بدون أن ننسى هاتان القاعدتان :

القانون العام ل RSA ،،،

اقتباس

-------------------------------

C = P^E mod m

P= C^D mod m

-------------------------------

C: Cyphered Text

P: Plain Text

E: Encryption Key

D: Decryption Key

m: modulus

--------------------------------

النص المشفر

النص المراد تشفيره

مفتاح التشفير

مفتاح فك التشفير

العدد المصاحب لباقي القسمة

كخلاصة للموضوع ،،، يجب عليك أن تطور خوارزمية مبتكرة لهذا التشفير أي خوارزمية تحكمها قواعد رياضية و حسابية لا أقول معقدة و لكن تنتهج معادلات رياضية منطقية تخول لها التعامل الصحيح مع كل النصوص المراد تشفيرها .

بالتوفيق smile.gif

1
rS3eY.png
#20

السلام عليكم

 

بصراحة, الواحد يكتب مقال معين و عندما يراجعه بعد مدة يجد به العديد من الأشياء التي تحتاج إلى مراجعة مع أنني أتحفظ على بعض ملاحظاتك حول المقالة :)

 

اقتباس
وهي ليست معقدة كما قال أخي العزيز أحمد الشنقيطي

 

الكود الذي أدرجتَه خاص بالفيجوال وليس هو الكود القياسي للدالة rand.

 

اقتباس
ربما اعتمدها المبرمجون لأنها لا تكرر الأرقام ولكن هذا غير صحيح فبعد استدعائها 145021636 مرة فإنها تعود لتوليد البذرة ...وتكرار الحلقة من البداية ....

 

هذا بدون استخدام البذرة مع أن 145021636 استدعاء يُعتبر رقم كبير جدا !

 

عموما, أقوم الآن بكتابة النسخة الثانية من مقالة الأعداد العشوائية لكن باللغة الفرنسية, ربما أضعها هنا بالعربية لاحقا إن شاء الله.

#21

السلام عليكم ورحمة الله،

 

أولا هذا ليس خطأ، لأن توليد الرقم العشوائي يعتمد على قيمة seed، التي تقوم بتمريرها للدالة srand، وهنا تحتاج أن تكون مبدعا، في توليد هذا الرقم بشكل عشوائي، أما بالنسبة لـ rand  فيمكنك أن تعتبرها كمزحة طريفة من مكتبة سي، لإضافة بعض العشوائية الى رقم الـ seed الذي قمت بتريره لـ srand سابقاً.

 

يمكنك أن تستخدم المكتبة time.h لتوليد هذا الرقم أو الدالة GetTickCount.

#22

بالنسبة لي ففقد صرت أستعمل srand في كل دورة للحلقة عندما تكون rand ضمن حلقة ما وأقوم بضرب( time(0 ببعض الأرقام العشوائية أيضا..... لأضمن عشوائية العشوائية بشكل ممتاز D:
ولكن هذا لن يخفى على مبرمج يحاول اختراق البرنامج .:)
شكرا لمشاركتك :)
 

#23

داخل windows يمكنك استخدام الدالة RtlGenRandom للحصول على قيم عشوائية بأى حجم تريد و بالنسبة للدالة rand فيمكن فعل نفس الأمر، اليك النسخه التى استخدمها للحصول على قيم عشوائية بأحجام مختلفة لا تقل عن حجم النوع int:

// generate random value in input valuetemplate<typename t>inline void random(t& value){    int* arr = (int*)&value;    const int len = sizeof(t) / sizeof(int);    for (int i=0; i<len; ++i)    {        std::clock_t c = std::clock();        while( c == std::clock() );        std::srand( (unsigned int)std::time(NULL) + (unsigned int)std::clock() );        arr = std::rand();        arr *= arr * ((i+1) << 1);    }}

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة C++er في 5 نوفمبر 2013 في 17:40

مدونتي: C++ Tips and Tricks

#24

ماشاء الله عليك أخي محمد ..

ما رأيك بتعديل بسيط على الكود لنحصل على عشوائية معتمدة على العشوائية التي قبلها :)

arr *= arr[i-1] * ((i+1) << 1);

ولكن أظن أن الكود يحتاج إلى  len ثانية أليس كذلك ؟

 

وفقك الله .. وشكرا لك

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 5 نوفمبر 2013 في 18:41

#25
اقتباس
ما رأيك بتعديل بسيط على الكود لنحصل على عشوائية معتمدة على العشوائية التي قبلها :)

لا داعي لهذه العملية حيث يمكنك xor-mul على احجام اصغر لنوع البيانات المدخل و من ثم قم ببعثرتهم إعتمادا على الوقت الحالي لهذه العملية و بهذا ستحصل على قيم من الصعب إنتاج مثلهم مرة أخرى.

 

 

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة C++er في 5 نوفمبر 2013 في 21:39

مدونتي: C++ Tips and Tricks

مواضيع مشابهة