run time error

lillitush

New member
run time error

הקוד הבא גורם לי ל-run time error.זה משהו ב-rand scanf("%d",&seed);//the int for the function srand for(int j=1;j<=frc;j++) { srand(seed); int mone=rand(); srand(seed); int mehane=rand(); new_frc=euclid(mone,mehane); if(mone>mehane) { common=mehane; } else { common=mone; }
 

ahab

New member
יעזור אם תתני עוד קצת פרטים...

איזו הודעת שגיאה, למשל, ואיפה זה קורה בקוד. על פניו, הקוד נראה תקין, ואין סיבה לקבל runtime error. מה שכן, את לא צריכה לקרוא ל-srand לפני כל הפעלה של rand. הפונקציה srand מאתחלת את ה-random number generator. אם תאתחלי אותו (עם אותו seed) לפני כל שימוש ב-rand, תקבלי בכל קריאה ל-rand את אותו מספר "רנדומי". אלא אם כן את צריכה לחזור על סדרת מספרים רנדומיים, מספיקה קריאה אחת ל-srand בתחילת התוכנית.
 

lillitush

New member
אוקיי.

אני מקבלת הודעת runtimeerror ואחרי שאני לוחצת התעלם הוא מודיע לי שוב על הודעת שגיאה מסוג r6002 floating not loaded.זה קורה בלולאה של ה-rand.כמו כן מה המשמעות של seed?
 

ahab

New member
שתי אפשרויות..

תנסי להוסיף כמה הדפסות דמה בקוד, כדי לאתר איזו שורה גורמת לשגיאה. את בטוחה שזה נגרם בקטע הקוד שצירפת? לגבי seed... ה-random number generator אינו מגריל מספרים רנדומיים באמת. הוא משתמש בנוסחאות מסוימות כדי ליצור סדרת מספרים שנראית רנדומית. ה-seed הוא ערך שמשמש לאתחל את הסדרה. כל seed יגרום ליצירת סדרת מספרים שונה, ושני seeds זהים יגרמו ליצירת שתי סדרות זהות. מקובל לאתחל את המנגנון בעזרת srand(time(NULL)) dd. זה משתמש בשעון הפנימי של המחשב כדי לאתחל את הסדרה. אם יש צורך לחזור על סדרת מספרים, אפשר לשמור את ה-seed במשתנה בצד, ולהשתמש בו שוב ב-srand כדי לקבל אותה הסדרה.
 

lillitush

New member
שיחקת אותה

גיליתי שהבעיה בשורת קוד הבאה:printf("the ratio is %7f",k/frc); זה משהו שאסור לעשות אותו? כמו כן בקשר ל-SEED.הגדרתי seed ע"י קלט בתחילת התוכנית .האם הדבר יגרום לקבלת אותו מספר רנדומלי כל הזמן?ככה הבנתי את מה שהסברת.
 

ahab

New member
אז ככה..

מותר לעשות את זה. את רק צריכה לוודא ש-frc שונה מ-0. חלוקה ב-0 יכולה לגרום לשגיאת זמן ריצה כפי שתיארת. אם לא איכפת לך איזה מספרים rand יחזיר, אני מאמין שעדיף לאתחל את srand באמצעות time, כפי שתיארתי. בכל מקרה, עדיף לבצע קריאה אחת ל-srand, בתחילת הריצה של התוכנית, ולא כל פעם לפני rand (אלא אם כן יש שלב בו את רוצה לחזור על מספרים רנדומיים קודמים. ראי הסבר קודם :)).
 
למעלה