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

اريد منكم شرح السوال فقط ..

بدأه سرمد الليل في 24 مايو 2011 · 27 رد · 2,277 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#26

سويت الراندم الاولى و الثانية

لكن انا استغرب لما اسوي كل مره رن ما يتحدث الرقم ؟؟

ملاحظة لا أحلل من ياخذ حلي بدون اذني .

تم تعديل هذه المشاركة بواسطة طموحي كبير في 28 مايو 2011 في 23:18

1

http://groups.google.com.sa/group/Cplusplusimamgroup

تفضلوا بالزيارة لقروبي :)

#27

اولا احييكي على المثابرة وانجاز الكود بنفسك... اعطيتك +1

هذا افضل بكثير من الاعضاء الكسالى الذين يريدون الحل جاهز :ph34r:

بالنسبة لسؤالك حول rand فهذا طبيعي... ولا يوجد خطأ بالكود..

المسالة ان هناك شيء اسمه random generator و شيء آخر قريب لكن اسمه pseudo-random generator

الفرق ان الاول يخرج ارقام عشوائية من عنده... بينما الثاني يخرج رقم عشوائي بناء على معطى يسمى seed. واذا كان المعطى - seed - ثابت فسيكون الرقم العشوائي ايضا ثابت

الseed بكل بساطة هو input.. وحسب الalgorithm تتم معالجته بطريقة بحيث ان الreturn value سيكون رقم random

الذي يحدث بالضبط مع rand() انه pseudu-random generator.. وبالاعدادات الافتراضية (وهذا مايحدث معك) ان الseed = 1

وهناك خاصية في rand() انك كلما استدعيتيه في نفس الpcoress من جديد، يقوم بإختيار seed آخر في الترتيب (رقم آخر، ليس 2 بالضرورة)

واذا اردتي ان تبدئي بseed غير الواحد، او ان تغيري الseed في اي وقت، فيجب عليك استخدام srand()

وحرف s هنا معناه seed

اذا نسيتي في المستقبل، بإمكانك الحصول على هذه المعلومات من جديد من خلال man 3 rand اذا كنتي على نظام لينكس

وطبعا التجربة خير برهان:

هذا الكود سيطبع random مختلف في كل سطر.. لماذا؟ لان البداية تكون seed = 1، وبعديه تلقائيا يغير الseed الى رقم آخر

#include <stdlib.h> 
#include <stdio.h>

int main(){
        printf("%d\n",rand());
        printf("%d\n",rand());
        printf("%d\n",rand());
        printf("%d\n",rand());
        return 0;
}

وهذا هو الourput:

1804289383

846930886

1681692777

1714636915

وهذا الكود يقوم بتغيير الseed الى رقم آخر انا اخترته بنفسي، وضعت srand(123) في المنتصف، لذا سيتغير الseed من المنتصف

يعني اول رقمين متشابهين، وثاني رقمين المفروض يكونون مختلفين لانني غيرت الseed بيدي

#include <stdlib.h> 
#include <stdio.h>

int main(){
	printf("%d\n",rand());
	printf("%d\n",rand());
	srand(123);
	printf("%d\n",rand());
	printf("%d\n",rand());
	return 0;
}

الoutput

1804289383

846930886

128959393

1692901013

لاحظي ان آخر رقمين مختلفين عن المرة السابقة

لانني غيرت الseed بواسطة srand

فالجواب على سؤالك: لماذا الرقم العشوائي بواسطة rand() لا يتغير؟

ج: لان الseed لم يتغير

1

ملاحظة: يوجد

أعضاء في قائمة تجاهلي. لذا عدم ردي عليهم لا يدل على موافقتي الضمية لمحتويات مشاركاتهم.

sigsubway.png

#28

الله يبشرك بالخيرررر

الحمد الله صح

والله جهد متواصل من يوم اصحى الى انام وانا رايحه جايه على اللاب :S

شكراا فلو الله ثم انت لكنت في حالة يرثى لها

شكرا مرة اخرى على مساعدتك و على وقتك الي خصصته لمساعدتي :)

باقي الي الكيسات يارب اليوم اخلصها :)

دعواتكم

http://groups.google.com.sa/group/Cplusplusimamgroup

تفضلوا بالزيارة لقروبي :)

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