תשובות
1. מספרים אקראיים מוגרלים ע"י הפונקציה Rnd המחזירה מספר מוגרל בין 0 ל-1, כלומר 0 עם נקודה עשרונית וכמה מספרים אחריה. בכדי להגריל בתחום ספציפי יש להכפיל את תוצאת Rnd ולעגל (כדי לקבל מספר שלם): אם נכתוב (x = CInt(Rnd * 20 נקבל מספר בין 0 ל-19 (כיוון שהמספר מוכפל ב-20 ואז מעוגל כלפי מטה). לכן בד"כ מוסיפים לתוצאה 1 כדי לקבל מספר בין 1 ל-20 (לדוגמה). מכיוון שהמחשב פועל עפ"י אלגוריתמים קבועים, הוא אינו באמת מגריל מספר אלא מנסה לבצע סדרת חישובים שיקטינו ככל האפשר את האפשרות לצפות את המספר המוגרל מראש ("פסאודו רנדומציה"). בכדי לבצע את סדרת החישובים הללו הוא זקוק למספר התחלתי (Seed) ממנו מתחילים לחשב ועליו נבנה האלגוריתם המגריל, הבעיה היא שסדרת החישובים היא קבועה ולכן לכל Seed כזה תהיה בסופו של דבר אותה תוצאה וכך יהיה ניתן לנחש בסבירות מסויימת את המספר המוגרל. אי לכך השאיפה היא לתת See אשר משתנה כל הזמן, והוא שעון המחשב הסופר את השניות שחלפו מאז חצות הלילה. קביעת ה-Seed לצורך פעולת הרנדומציה נעשית ע"י הקריאה: Randomize n כש-n הוא ה-Seed שלנו (מספר שלם). במקרה דנן נעדיף לכתוב: Randomize Timer אשר קובע את ה-Seed למספר בלתי צפוי הלוא הוא שעון המחשב. לכן, נסכם ונראה איך מגרילים מספר בין 1 ל-10 באופן הזה:
Dim x As Integer Randomize Timer x = CInt(Rnd * 10) + 1 MsgBox "Randomized number is: " & CStr(x)
2. לשאלה זו אין תשובה ברורה: אם התרגיל הוא סה"כ תרגיל אז לא נראה לי שיש חשיבות למיקום הקוד: או שהוא יתרחש מייד עם טעינת התוכנית לזכרון או בלחיצה על כפתור... אך אם נחשוב על זה קצת הרבה יותר הגיוני לשים כפתור בעל כותרת מתאימה עלי ילחץ המשתמש כשירצה להגריל את המספר, ולא שיוגרל באופן אוטומאטי ללא בקשת המשתמש.