מונים וצוברים

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


 

מונים וצוברים

 
 
מאת: ארז קלר


 להורדת דוגמאות הקוד

פעולת מניה היא ספירה,
פעולת צבירה היא סיכום.
בהרבה מאוד בעיות במדעי המחשב יש צורך לספור דבר מה, לדוגמה:
כמה תלמידים יש בכיתה.
כמה נוסעים עלו לרכבת.
כמה הצביעו עבור כל מפלגה בבחירות.בהרבה מאוד בעיות אחרות במדעי המחשב יש לצבור סכומים, לדוגמה:
מהו סכום כל הקניות שרכשנו החודש.
מהו המשקל הכולל של כל ארגזי התפוחים שהועמסו על המשאית.
מהו מחזור המכירות החודשי של החברה.בשני המקרים, גם של צובר וגם של מונה, נצטרך להגדיר משתנה מיוחד לטובת המשימה ולאפס אותו.
ישנם מקרים בהם באותו האלגוריתם נצטרך גם מונה וגם צובר, חישובי ממוצעים לדוגמה:
מהו ממוצע הציונים של התלמיד - צבירה של הציונים וחלוקה במספר הציונים.
במקרה זה נצטרך להגדיר שני משתנים, אחד עבור המונה והשני עבור הצובר.

מספרים אקראיים
לטובת דוגמאות הקוד הבאות יהיה נוח להגריל מספרים בצורה אקראית במקום להקליד אותם.
ניתן להשתמש במחלקה Random, המחלקה Random מגרילה מספרים בצורה אקראית.
במחלקה מוגדרת המתודה Random.Next(int min, int max).
נראה אותה בפעולה החל מדוגמת הקוד הבאה.
 מונה
מונה
נכתוב דוגמת קוד המריצה לולאה 100 פעמים, בכל איטראציה מוגרל מספר אקראי בין 1 ל-100, עם סיום הביצוע של הלולאה נדפיס את מספר המספרים האי זוגיים שהוגרלו (CounterSample):

 1  : class Program 
 2  : { 
 3  :     static void Main(string[] args) 
 4  :     { 
 5  :         Random rnd = new Random(); 
 6  :         int counter = 0; 
 7  :         int rnd_num = 0; 
 8  :         for (int i = 0; i < 100; i++) 
 9  :         { 
 10 :             rnd_num = rnd.Next(1, 100); 
 11 :             if (rnd_num % 2 == 1) 
 12 :             { 
 13 :                 counter++; 
 14 :             } 
 15 :         } 
 16 :         Console.WriteLine("Num of odd numbers: {0}", counter); 
 17 :     } 
 18 : } 
בשורה 5 מוגדר אובייקט מהמחלקה Random, נעשה שימוש באובייקט מהמחלקה הזו (rnd) על מנת להגריל מספרים אקראיים.
בשורה 6 מוגדר המשתנה counter, המשתנה counter משמש כמונה, בהמשך נעזר בו על מנת למנות את מספר המספרים האי זוגיים שהוגרלו על ידי האובייקט rnd.
המשתנה rnd_num המוגדר בשורה 7 ישמור את המספרים שהוגרלו אקראית על ידי rnd.
בכל איטרציה של הלולאה (שורה 8) נגדריל מספר אקראי (שורה 10) ונבדוק האם הוא זוגי או אי-זוגי (שורה 11),
במידה והוא אי-זוגי נגדיל את המשתנה counter ב-1 (שורה 13).
בכל משמש המשתנה counter כמונה.


פלט:
פלט תוגנית הדוגמה CounterSample

 
צובר
צובר
נכתוב דוגמת קוד המריצה לולאה 100 פעמים, בכל איטראציה מוגרל מספר אקראי בין 1 ל-100, עם סיום הביצוע של הלולאה נדפיס את סכום המספרים הזוגיים שהוגרלו (AccumulatorSample):
 1  : class Program 
 2  : { 
 3  :     static void Main(string[] args) 
 4  :     { 
 5  :         Random rnd = new Random(); 
 6  :         int accumulator = 0; 
 7  :         int rnd_num = 0; 
 8  :         for (int i = 0; i < 100; i++) 
 9  :         { 
 10 :             rnd_num = rnd.Next(1, 100); 
 11 :             if (rnd_num % 2 == 0) 
 12 :             { 
 13 :                 accumulator += rnd_num; 
 14 :             } 
 15 :         } 
 16 :         Console.WriteLine("Num of even numbers: {0}", accumulator); 
 17 :     } 
 18 : } 
ההתחלה מאוד דומה לתרגיל דוגמה הראשון:
בשורה 5 מוגדר אובייקט מהמחלקה Random, נעשה שימוש באובייקט מהמחלקה הזו (rnd) על מנת להגריל מספרים אקראיים.
בשורה 6 מוגדר המשתנה accumulator, המשתנה accumulator משמש כצובר , בהמשך נעזר בו על מנת לסכם (לצבור) את מספר המספרים הזוגיים שהוגרלו על ידי האובייקט rnd.
המשתנה rnd_num המוגדר בשורה 7 ישמור את המספרים שהוגרלו אקראית על ידי rnd.
בכל איטרציה של הלולאה (שורה 8) נגדריל מספר אקראי (שורה 10) ונבדוק האם הוא זוגי או אי-זוגי (שורה 11),
במידה והוא זוגי נוסיף את ערכו לערך הקיים ממשתנה accumulator  (שורה 13).
בכך משמש המשתנה accumulator כצובר.

פלט:
פלט תוכנית הדוגמה AccumulatorSample

מונה וצובר
לא מעט אלגוריתמים דורשים גם מונה וגם צובר, חישובי ממוצעים הם דוגמה קלאסית,
נכתוב דוגמת קוד המריצה לולאה 100 פעמים, בכל איטראציה מוגרל מספר אקראי בין 1 ל-100, עם סיום הביצוע של הלולאה נדפיס את הממוצע של כל המספרים הזוגיים שהוגרלו (CalcAverageSample):

 1  : class Program 
 2  : { 
 3  :     static void Main(string[] args) 
 4  :     { 
 5  :         Random rnd = new Random(); 
 6  :         int sum = 0; 
 7  :         int counter = 0; 
 8  :         int rnd_num = 0; 
 9  :         for (int i = 0; i < 100; i++) 
 10 :         { 
 11 :             rnd_num = rnd.Next(1, 100); 
 12 :             if (rnd_num % 2 == 0) 
 13 :             { 
 14 :                 sum += rnd_num; 
 15 :                 counter++; 
 16 :             } 
 17 :         } 
 18 :         Console.WriteLine("Num of even numbers: {0}", sum / counter); 
 19 :     } 
 20 : } 
תוכנית שמחשבת ממוצע זקוקה גם לצובר וגם למונה.
צובר - כי אנחנו צריכים ללסכם את סכום כל המספרים.
מונה - כי צריך לדעת כמה מספרים סיכמנו.
בתוכנית הדוגמה נחשב את הממוצע של כל המספרים הזוגיים שיוגרלו על ידי האובייקט rnd.
בשורה 6 מוגדר המשתנה sum - המשתנה sum הוא צובר, במשתנה זה נסכם את סכום כל המספרים האקראיים שיוגרלו בשורה 11.
בנוסף, בשורה 15 נספור את מספר המספרים שסוכמו.
בשורה 18 נחלק את הצובר במונה ונקבל את הממוצע. 


פלט:
פלט התוכנית CalcAverageSample