עזרה בבקשה!

עזרה בבקשה!

אני לומדת VB בכוחות עצמי, לא מלמדים אותנו בגלל השביתה אבל מכריחים אותנו להגיש תרגילים... יש למישהו מושג איך עושים תוכנית שמגרילה מס' אקראי בין 5 ל- 17? והאם צריך לעשות את זה בתוך פקד BTN או ב-LOAD? תודה מראש,
 

טרמפיסט

New member
תשובות

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

yuval155

New member
הנה פונקציה שאני משתמש בה

Public Function RandomNumber(ByVal MaxValue As Long, Optional _ ByVal MinValue As Long = 0) On Error Resume Next Randomize Timer RandomNumber = Int((MaxValue - MinValue + 1) * Rnd) + MinValue End Function​
תעשי
x = randomnumber (17,5)​
 
ושוב תודה!

עדיין לא למדנו פונקציות ופרוצדורות (אני אפילו לא יודעת אם קוראים לזה ככה כמו בפסקל), אבל תודה רבה!
 

טרמפיסט

New member
מתוחכם אבל לא במקום

הבחורה באה מרקע בסיסי ואתה כבר מפציץ אותה בקריאות לפונקציות עם פרמטרים אופציונליים ללא הסברים מפורטים על התהליך. ובכן; כשאתה רואה שאלה כזו עדיף להתמקד בפתרון הבסיסי ולא בפתרון גאוני ומרחיק לכת ככל שיהיה כיוון שאין לה בסיס לימודי מספיק להשען עליו. במקרים כאלה אני מטיל ספק גדול בעזרה אותה ניתן להפיק אם בכלל מתשובות כאלה.
 
היי-היי טרמפיסט!

אל תכעס עליו, הוא רק ניסה לעזור! לא להתעצבן! זה לא עזר לי כי באמת לא מבינה כלום ב-VB כי לא למדנו את זה עדיין אבל לא נראה לי שנוא הסביר משו בשמים. למדתי פעם פסקל בתיכון 5 יח', כנראה שכחתי (עברו כמה שנים), אבל מבינה קצת קצת, ולא יודעת איך רושמים את זה בשפה הזאת. בכל אופן תודה לשניכם! גם אם עדיין לא הסתדר לי.. אתם גאונים! ותודה על ההסברים!
 
למעלה