עבור לתוכן

לא מצליח ליצור מספרים רנדומליים

Featured Replies

פורסם

אה.... סליחה!

וצודק, עדיף לדחוף את SRAND למקום שאתה בטוח שקוראים לו רק פעם אחת.

הכי טוב - בתחילת main אחרי הצהרה על משתנים.

פורסם

כמובן טעות שלי, למרות שגם אם srand יהיה בפונקציה עצמה זו לא ממש טעות כי הוא בכל זאת ייצר מספרים רנדומלים שונים בכל פעם.

מה שכן כדי לבדוק שהשארית המתקבלת לא התקבלה כבר בעבר

פורסם
  • מחבר

או קיי אז זה הקוד שלי כרגע

והוא עובר על מספרים "רנדומליי" ואני שם את זה בגרשיים בגלל שאני באמת מקבל מספרים עולים כמו בדוגמא

מ 0 -255

כמו שאתם רואים הsrand נמצא בתוך הMain וגם אם הוא בתוך הפונקציה זה לא משנה הרבה

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


void noise()
{


int random=rand()%256;
//random=(rand());
printf("%d",random);
getch();
}


void main()
{
srand(time(0));
noise();

}

החדשות הטובות הם שזה כבר לא חוזר לי רק על אותו מספר

אבל אם אני אשים בלולאה כמו בדוגמא


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


void noise()
{


int random=rand()%256;
//random=(rand());
for(int i=0; i<10; i++)
{
random=rand()%256;
printf("%c ",random);
}
getch();
}


void main()
{
srand(time(0));
noise();

}

אז הוא כן יעשה לי סדרה רנדומלית

למה אני לא מצליח ליצור מספר רנדומלי יחיד וסידרה כן??

ולא ממש קשור לתר'ד, אבל אני ממש שמח לראות שפורום תיכנות נהיה יותר פופולארי :smile1:

פורסם

תראה, אין כאן שום קסמים.

ה- random של C מבוסס על shift register שמוחזק בתור משתנה סטטי (אני ממש לא זוכר על איזה פולינום הוא מבוסס וכמה ביטים יש בו, אבל אתה מוזמן לברר)

הפונקציה rand היא דטרמיניסטית לגמרי, וכל מה שהיא עושה היא להזיז את ה- shift register ולהחזיר לך ערך.

srand מאתחלת את ה- shift register לאיזה ערך שאתה נותן לו.

אם תיתן פעמיים את אותו ערך ל- srand, תקבל בדיוק את אותן שתי סדרות (יש לזה גם לא מעט שימושים).

ז"א שאם אתה רוצה ששתי סדרות לא יהיו בהכרח זהות, אתה צריך לדאוג שהאתחול ל- srand לא יהיה בהכרח זהה.

יותר מזה - הפונקציה ה- shift register הזה כנראה לא יותר מדי מוצלח, כי עבור ערכים עוקבים של seeds תקבל שתי סדרות שהאיברים הראשונים שלהם הם בהפרש 3 (לפחות בקומפיילר שבו אני משתמש).

בגלל זה אתה מקבל ערכים עולים (כי time מחזיר לך מספר בשניות, אז אתה קורא ל- srand עם מספרים עוקבים).

ותשובה ל- isidur - אם אתה בודק שהמספר שלך לא קרה כבר, זה לא עושה את זה אקראי.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים