Visual Basic/יסודות השימוש בשפה/הגרלת מספר אקראי: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
יצירת הדף
 
סיום כתיבת הפרק
שורה 6:
כדי להפעיל את התכונה אשר מאפשרת לנו להגריל מספר, יש לכתוב את המילה <tt>Randomize</tt> (הגרל) במקום כלשהו בתוכנה, לפני שורת-הקוד הראשונה בה אנו רוצים להגריל מספר (לא בהכרח מיד לפני השורה). פקודה זו מפעילה את הפונקציה שמגרילה מספרים. מספיק לכתוב פקודה זו רק פעם אחת, אפילו אם אנו רוצים להגריל כמה מספרים שונים.
 
כעת, בכל שורה שלאחר הפקודה Randomize, אנו יכולים להשתמש בפונקציה <tt>Rnd</tt> כדי להגריל מספר. לאחרפקודה המילהזו Rndמגרילה שבר עשרוני, ישבין להוסיף0 אתל-0.999. סימןנבנה הכוכביתתוכנה (*)פשוטה ולאחריושתדגים את טווחהשימוש המספריםבפקודת האפשריההגרלה. אםנפתח הזנוטופס טווחחדש N,ונמקם יוגרלבו מספרכפתור-פקודה בטווחותיבת-טקסט. 0אנו עדרוצים Nשבכל -פעם שנלחץ על הכפתור התיבה תציג 1;שבר כלומראקראי, אםלכן כתבנונכתוב 15בחלון יתקבלוהקוד מספריםאת בטווחהשורות 0-14.הבאות:
<div style="Direction:Ltr">
 
אם, לדוגמא, פתחנו טופס חדש ומיקמנו בו כפתור-פקודה ותיבת-טקסט, ואנו רוצים שבכל פעם שנלחץ על הכפתור התיבה תציג מספר אקראי בין 1 ל-100, נכתוב בחלון הקוד את השורות הבאות:<div style="Direction:Ltr">
Private Sub Command1_Click()
Randomize
Text1.Text = Rnd * 100 + 1
End Sub
</div>הפקודה <tt>Rnd</tt> תיתן לנו מספר בטווח 0-0.999. כעת נניח, במקום זאת, שאנו רוצים תוכנה שתגריל עבורנו מספר שלם בטווח 0-99. לצורך כך, נכפיל את תוצאת ההגרלה ב-100, ונעגל אותה כלפי מטה. כך, אם ההגרלה תוציא 0, התוצאה הסופית תשאר 0; אם נקבל 0.999, ההכפלה תיתן לנו 99.9, והתוצאה הסופית תהיה 99; אם נקבל, למשל, 0.482, התוצאה הסופית תהיה 48, וכו'. כדי לעגל מספר כלפי מטה, נשתמש בפקודה <tt>Int</tt>. שורת הקוד הרלוונטית תראה כעת כך:
</div>הפקודה <tt>Rnd * 100</tt> מגרילה מספר 0-99, ואנו מוסיפים 1 כדי לשנות זאת ל-1-100. שימו לב שהמספרים שיוגרלו אינם מספרים שלמים. אם נרצה שהתוכנה תעגל את המספרים, יש להוסיף את הפונקציה Int, אשר מעגלת מספרים כלפי מטה (מספרים שליליים מתעגלים כלפי מעלה):<div style="Direction:Ltr">
<div style="Direction:Ltr">
Text1.Text = Int(Rnd * 100) + 1
</div>אפשרות נוספת היא להצהיר על משתנה מסוג '''שלם''' (Integer) ולשים בתוכו את הערך המוגרל:
</div>
{{חלון מידע|שימו לב שבתוכנה המוצגת משמאל, הצהרנו על המשתנה X בתוך קוד של מאורע, במקום בקוד הכללי שנמצא ב-'''General Declarations'''. משתנים אשר מוצהרים בתוך חטיבת-קוד מסוימת - למשל, חטיבת-הקוד של מאורע כלשהו - אינם קיימים בשאר התוכנה. אם, למשל, ניצור כפתור פקודה אחר ונתכנת אותו להדפיס את הערך של המשתנה X, תתקבל הודעת שגיאה, כיוון שהמשתנה קיים רק בחטיבת-קוד אחת ולא באחרות. דבר זה נקרא '''טווח''' (Scope) של משתנה, מושג עליו תלמדו עוד בהמשך.}}
על פי העקרון שהשתמשנו בו כאן, ניתן לאמר באופן כללי שכאשר אנחנו רוצים להגריל מספר בטווח 0 עד N, עלינו לכתוב את הפקודה הבאה:
<div style="Direction:Ltr">
Int(Rnd * N+1)
</div>
אפשרות נוספת, במקום להשתמש בפקודה <tt>Int</tt> היא להצהיר על משתנה מסוג '''שלם''' (Integer) ולשים בתוכו את הערך המוגרל. כאשר אנו שמים שבר בתוך משתנה שאמור להכיל מספר שלם, השבר מעוגל אוטומטית כלפי מטה. הקוד יראה כעת כך:
<div style="Direction:Ltr;">
Private Sub Command1_Click()
Randomize
Dim X As Integer
X = Rnd * 100 + 1Randomize
X = Rnd * 100
Text1.Text = X
End Sub
</div>
</div>גם תוכנה זו תגריל מספר שלם מ-1-100.
כעת, הבה נדון במספר נקודות חשובות המופיעות בקטע הקוד הזה.
 
== טווח של משתנה ==
 
יתכן ששמת לב כי בקטע הקוד האחרון הצהרנו על המשתנה X בתוך חטיבת-הקוד של כפתור-הפקודה Command1; זאת בניגוד לכל דוגמאות-הקוד הקודמות, בהן הצהרנו משתנים תחת החלק <tt>''(Declarations)''</tt>, שאינו חלק משום חטיבת קוד. ישנה חשיבות רבה למיקום בו מבצעים הצהרה על משתנה.
 
בפרק הקודם, השתמשנו במשתנה שהגדרנו ב'''שני''' מאורעות שונים: במאורע <tt>cmd_add_Click</tt> הצבנו ערך בתוך המשתנה X, ובמאורע <tt>cmd_result_Click</tt> השתמשנו בערך הנמצא במשתנה X. במילים אחרות, היינו צריכים נגישות למשתנה זה מ'''כל''' התוכנה שלנו.
 
בתוכנה שכתבנו כעת, השתמשנו במשתנה בשם X רק בתוך חטיבת קוד אחת, <tt>Command1_Click</tt>. לאחר שהמחשב מסיים לעבד את כל הפקודות שבתוך חטיבת קוד זו, אין לנו עוד צורך במשתנה X, כיוון שלא נשתמש בערך שנמצא בו עוד. גם אם נלחץ פעם נוספת על הכפתור Command1, לא יהיה צורך שנזכור מה היה ערכו של המשתנה בפעם שעברה שהכפתור נלחץ, כיוון שכעת נשים בו ערך חדש. לכן, אנו מגדירים את המשתנה '''בתוך''' חטיבת הקוד של הכפתור, וכתוצאה מכך, המשתנה "נעלם" ברגע שמסתיים הביצוע של קוד זה. אם ננסה להשתמש במשתנה זה במקום אחר בקוד (למשל, מתוך חטיבת קוד של כפתור-פקודה אחר), נקבל הודעת שגיאה, כיוון שלחטיבות קוד אחרות אין נגישות למשתנה שהוגדר בתוך חטיבת קוד מסויימת.
 
מושג זה נקרא '''טווח''' (''Scope'') של משתנה. ה'''טווח''' של המשתנה X במקרה זה מוגבל רק לחטיבת הקוד <tt>Command1_Click</tt>. אנו עוד ניגע במושג הטווח במקומות נוספים בהמשך הספר.
 
== הזחה ==
 
בקטעי הקוד שבפרק זה, הסטנו את שורות הקוד שבתוך המאורע מעט פנימה. עיצוב זה נקרא '''הזחה''' (''Indentation''). כאשר כותבים קוד בתוך חטיבת-קוד (''Code Block''), נהוג '''להזיח''' פנימה את כל שורות הקוד שבתוך החטיבה (אך לא את שורת הפתיחה ושורת הסיום של החטיבה - במקרה זה, השורה <tt>Private Sub...</tt> והשורה <tt>End Sub</tt>). עיצוב כזה של קוד נחשב לכתיבת קוד נכונה, ונעשה בו שימוש מעתה ועד סוף הספר.
 
כאשר ישנן חטיבות קוד '''מקוּננות''' (''Nested'') - כלומר, חטיבת קוד אחת הנמצאת בתוך חטיבת-קוד אחרת - החטיבות הפנימיות יותר מוזחות יותר פנימה. דוגמאות לכך נראה בהמשך הספר.
 
להזחה אין כל השפעה על ההידור של הקוד או על הפעולה של התוכנה, אך היא מקלה מאוד על קריאת הקוד והבנתו, כיוון שהיא מפרידה בצורה ברורה בין חטיבות קוד שונות ומסמנת את הגבולות שלהן בבירור. בנוסף, כיוון שהוחלט על טכניקה קבועה של הזחה, המקובלת ברחבי-העולם, כל אדם אשר יקרא את הקוד שנכתב על-ידי אדם מסויים יוכל להבין בקלות את הקוד, אם נעשה שימוש בהזחה. דבר זה חשוב במיוחד בחברות מחשבים, למשל, כאשר קוד שנכתב על-ידי אדם אחד עלול להערך בעתיד על-ידי אדם אחר.
 
 
שורה 36 ⟵ 58:
|align="center" width="30%"|[[Visual Basic/יסודות השימוש בשפה/שימוש במשתנים|שימוש במשתנים]]
!align="center" width="40%"|הגרלת מספר אקראי
|align="center" width="30%"|[[Visual Basic/יסודות השימוש בשפה/תכונות המשנות עיצוב של פקד|תכונות המשנות עיצוב של פקד]]
|align="center" width="30%"|-
<!--[[Visual Basic/יסודות השימוש בשפה/הגרלת מספר אקראי|הגרלת מספר אקראי]]-->
|}