נושא: מספר אקראי - פקודה יותר יעילה מrandomize?
|
|
כותב |
|
עידן אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 11 February 2006 בשעה 18:41 | | IP רשוּם
|
|
|
|
שלום
אני בניתי תוכנה מסוימת בעלת מערך דו מימדי בשפת C#. עכשיו בנקודה מסוימת בתוכנית, המחשב עושה את הפעולה הבאה: rnd:; randomize(); g = random(3); randomize(); h = random(3); h++; g++; if (board[g][h] != '-') goto rnd;
כפי שניתן לראות, הלוח שלי הוא 3 על 3, כאשר משבצת ריקה מסומנת ע"י מקף. אם המשבצת לא ריקה, הוא חוזר ומגריל שוב מספרים...
תהליך זה יכול לקחת המון זמן כאשר הטבלה מתחילה להתמלאות, ורציתי לדעת אם יש פעולה טובה יותר.
תודה!
|
חזרה לתחילת העמוד |
|
|
פיורפווניג אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 11 February 2006 בשעה 18:43 | | IP רשוּם
|
|
|
|
מצטרף!
|
חזרה לתחילת העמוד |
|
|
Fate פורומיסט על
הצטרף / הצטרפה: 25 October 2005
משתמש: מנותק/ת הודעות: 571
|
נשלח בתאריך: 11 February 2006 בשעה 19:21 | | IP רשוּם
|
|
|
|
אתה יכול לעבור על המערך, לספור את הכמות מקומות הריקים...
למשל אם הכל ריק זה 9, וכו'...
ואז להגריל מספר אחד בין 1 עד מספר המקומות הפנויים...
ואז נגיד מוגרל 3...
ואז אתה עובר על המערך ומוצא את המקום הריק השלישי שאתה נתקל בו ושם שם משהו...
זה יפתור לך את הבעיה
|
חזרה לתחילת העמוד |
|
|
Chris Masters אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 11 February 2006 בשעה 19:21 | | IP רשוּם
|
|
|
|
שלום
הפתרון המהיר ביותר שידוע לי עליו על-מנת להפיק מספר אקראי הוא שימוש ב rand(). בהצלחה!
|
חזרה לתחילת העמוד |
|
|
עידן אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 11 February 2006 בשעה 19:23 | | IP רשוּם
|
|
|
|
Fate כתב:
אתה יכול לעבור על המערך, לספור את הכמות מקומות הריקים...
למשל אם הכל ריק זה 9, וכו'...
ואז להגריל מספר אחד בין 1 עד מספר המקומות הפנויים...
ואז נגיד מוגרל 3...
ואז אתה עובר על המערך ומוצא את המקום הריק השלישי שאתה נתקל בו ושם שם משהו...
זה יפתור לך את הבעיה
|
|
|
תודה על הרעיון, אבל זה לא פרקטי במיוחד כי אז זה לך לפי הסדר במערך מבחינת מקומות פנויים. וגם זה יכול לצאת ארוך יותר.
לקחתי בסוף משהו כזה: #include <time.h> ... time_t t; ... rnd:; srand((unsigned) time(&t)); g = rand() % 3; h = rand() % 3; g++; h++;
וזה עובד ממש מהיר תודה בכל מקרה!
|
חזרה לתחילת העמוד |
|
|
שמוליק הקיפוד אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 11 February 2006 בשעה 20:08 | | IP רשוּם
|
|
|
|
אה יפה רעיון טוב ביותר למרות שלדעתי יותר קל לשאול את המשתמש איפה הוא רוצה שהמחשב ישים את העיגול
|
חזרה לתחילת העמוד |
|
|
Fate פורומיסט על
הצטרף / הצטרפה: 25 October 2005
משתמש: מנותק/ת הודעות: 571
|
נשלח בתאריך: 11 February 2006 בשעה 21:18 | | IP רשוּם
|
|
|
|
א) עדיין לא הבנתי מה לא בסדר בפתרון שאני הצעתי... אז זה ילך מספר רנדומלי לפי הסדר, במה זה שונה?
ב) הקוד שאתה כתבתה הוא אותו דבר כמו שהיה לך קודם רק בלי הבדיקה שהמקום פנוי...
|
חזרה לתחילת העמוד |
|
|
|
|
אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם
|
אינך יכול/ה לשלוח נושאים חדשים בפורום זה אינך יכול/ה להגיב לנושאים בפורום זה אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה אינך יכול/ה לצור סקרים בפורום זה אינך יכול/ה להצביע בסקרים בפורום זה
|