לא מצליח ליצור מספרים רנדומליים - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


The-Devil

Recommended Posts

כמובן טעות שלי, למרות שגם אם 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 - אם אתה בודק שהמספר שלך לא קרה כבר, זה לא עושה את זה אקראי.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...