חומרי לימוד - מדעי המחשב

‫ה'‪/‬חשון‪/‬תשע"ה‬
‫מחסנית ‪ -‬הגדרה‬
‫מחסנית (מבנה נתונים) – מתוך ויקיפדיה‬
‫מחסנית היא סוג של מבנה נתונים מופשט הפועל בצורה דומה לזו‬
‫של מחסנית רובה‪ :‬האיבר שנכנס ראשון למחסנית יוצא ממנה אחרון‪.‬‬
‫תכונה זו מכונה נכנס אחרון יוצא ראשון ‪LIFO - Last In First Out -‬‬
‫ראש המחסנית – המקום אליו מכניסים וממנו מוציאים את הערכים‪.‬‬
‫‪23‬‬
‫‪-30‬‬
‫‪4‬‬
‫‪5‬‬
‫‪13‬‬
‫‪0‬‬
‫‪8‬‬
‫‪A‬‬
‫‪B‬‬
‫‪C‬‬
‫‪A‬‬
‫‪D‬‬
‫‪A‬‬
‫‪B‬‬
‫ראש‬
‫המחסנית‬
‫‪1‬‬
‫מחסנית הגדרה ופעולות ממשק‬
‫מחסנית פעולות ממשק‬
‫)(‪new Stack‬‬
‫‪‬‬
‫פעולה המחזירה מחסנית ריקה‬
‫‪‬‬
‫לדוגמה –‬
‫‪‬‬
‫ראש‬
‫המחסנית‬
‫;)(‪Stack s = new Stack‬‬
‫מחסנית הגדרה ופעולות ממשק‬
‫‪2‬‬
‫‪1‬‬
‫ה'‪/‬חשון‪/‬תשע"ה‬
‫מחסנית פעולות ממשק‬
‫)(‪IsEmpty‬‬
‫‪ ‬פעולה המחזירה 'אמת' אם המחסנית ריקה‪ ,‬ו'שקר'‬
‫אחרת‪.‬‬
‫הנחה‪ :‬המחסנית מאותחלת‪.‬‬
‫‪ ‬לדוגמה‪-‬‬
‫אמת‬
‫שקר‬
‫))(‪if(s.IsEmpty‬‬
‫‪23‬‬
‫‪-30‬‬
‫;‪n = 3‬‬
‫‪‬‬
‫ראש‬
‫המחסנית‬
‫ראש‬
‫המחסנית‬
‫‪4‬‬
‫‪5‬‬
‫‪13‬‬
‫‪0‬‬
‫‪8‬‬
‫‪3‬‬
‫מחסנית הגדרה ופעולות ממשק‬
‫מחסנית פעולות ממשק‬
‫‪‬‬
‫)‪Push(x‬‬
‫פעולה המכניסה את האיבר ‪ X‬לראש המחסנית‪.‬‬
‫הנחה‪ :‬המחסנית מאותחלת‪.‬‬
‫‪7‬‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫ראש‬
‫המחסנית‬
‫)‪s.Push(7‬‬
‫‪ s‬אחרי‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫‪‬‬
‫ראש‬
‫המחסנית‬
‫‪ s‬לפני‬
‫מחסנית הגדרה ופעולות ממשק‬
‫‪4‬‬
‫‪2‬‬
‫ה'‪/‬חשון‪/‬תשע"ה‬
‫מחסנית פעולות ממשק‬
‫‪‬‬
‫)(‪Pop‬‬
‫פעולה המוציאה את האיבר שבראש המחסנית ומחזירה‬
‫את ערכו‪.‬‬
‫הנחה‪ :‬המחסנית מאותחלת ואינה ריקה‪.‬‬
‫מוחזר הערך ‪7‬‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫ראש‬
‫המחסנית‬
‫)(‪s.Pop‬‬
‫‪ s‬אחרי‬
‫‪7‬‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫‪‬‬
‫ראש‬
‫המחסנית‬
‫‪ s‬לפני‬
‫‪5‬‬
‫מחסנית הגדרה ופעולות ממשק‬
‫מחסנית פעולות ממשק‬
‫‪‬‬
‫)(‪Top‬‬
‫פעולה המחזירה את ערכו של האיבר שבראש המחסנית‬
‫מבלי להוציאו‪.‬‬
‫הנחה‪ :‬המחסנית מאותחלת ואינה ריקה‪.‬‬
‫מוחזר הערך ‪7‬‬
‫‪7‬‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫ראש‬
‫המחסנית‬
‫)(‪s.Top‬‬
‫‪ s‬אחרי‬
‫‪7‬‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫‪‬‬
‫ראש‬
‫המחסנית‬
‫‪ s‬לפני‬
‫מחסנית הגדרה ופעולות ממשק‬
‫‪6‬‬
‫‪3‬‬
‫ה'‪/‬חשון‪/‬תשע"ה‬
‫אופן סריקת מחסנית‬
‫‪‬‬
‫באופן כללי ‪ -‬עוברים על כל איברי המחסנית בלולאת כל עוד ע"י שליפת‬
‫איברי המחסנית מראשה אחד אחר השני‪.‬‬
‫בכל ביצוע של הלולאה מבצעים חישוב‪/‬פעולה על הערך שיצא מראש‬
‫המחסנית‪.‬‬
‫הלולאה מסתיימת כאשר המחסנית ריקה (תנאי עצירה של הלולאה)‪.‬‬
‫‪‬‬
‫תבנית ב‪C#-‬‬
‫))(‪while (!s.IsEmpty‬‬
‫{‬
‫;)(‪x = s.Top‬‬
‫‪//‬חישוב‪/‬פעולה על הערך שיצא מראש המחסנית‬
‫;)(‪s.Pop‬‬
‫}‬
‫‪7‬‬
‫מחסנית הגדרה ופעולות ממשק‬
‫אופן סריקת מחסנית – דוגמה ‪1‬‬
‫‪ ‬פעולה להצגת כל הערכים הזוגיים במחסנית‬
‫)‪static void PrintZugi(Stack s‬‬
‫{‬
‫‪//‬מקבלת מחסנית של מספרים ומציגה את אלו הזוגיים במחסנית‬
‫‪//‬הנחה – המחסנית אותחלה‬
‫))(‪while (!s.IsEmpty‬‬
‫{‬
‫;)(‪x = s.Top‬‬
‫)‪if (x % 2 == 0‬‬
‫;)‪Console.WriteLine(x‬‬
‫;)(‪s.Pop‬‬
‫}‬
‫}‬
‫מחסנית הגדרה ופעולות ממשק‬
‫‪8‬‬
‫‪4‬‬
‫ה'‪/‬חשון‪/‬תשע"ה‬
‫אופן סריקת מחסנית – דוגמה ‪2‬‬
‫‪ ‬פעולה לחישוב מספר הערכים החיוביים במחסנית‬
‫)‪static int CountHiyuvi(Stack s‬‬
‫{‬
‫‪//‬מקבלת מחסנית של מספרים ומחזירה את מספר הערכים החיוביים בה‬
‫‪//‬הנחה – המחסנית אותחלה‬
‫;‪count = 0‬‬
‫))(‪while (!s.IsEmpty‬‬
‫{‬
‫;)(‪x = s.Top‬‬
‫)‪if (x > 0‬‬
‫;‪count++‬‬
‫;)(‪s.Pop‬‬
‫}‬
‫;‪return count‬‬
‫}‬
‫‪9‬‬
‫מחסנית הגדרה ופעולות ממשק‬
‫מחסנית מספרים – תרגיל ‪1‬‬
‫‪‬‬
‫כתוב פעולה‪ ,‬המקבלת מחסנית מלאה במספרים טבעיים ומציגה את כל המספרים התלת‪-‬‬
‫ספרתיים במחסנית‪.‬‬
‫)‪static void PrintThreeDigit(Stack s‬‬
‫{‬
‫‪//‬מקבלת מחסנית של מספרים טבעיים ומציגה את אלו התלת ספרתיים במחסנית‬
‫‪//‬הנחה – המחסנית אותחלה‬
‫;‪int x‬‬
‫))(‪while (!s.IsEmpty‬‬
‫{‬
‫;)(‪x = s.Top‬‬
‫)‪if (x >= 100 && x <= 999‬‬
‫;)‪Console.WriteLine(x‬‬
‫;)(‪s.Pop‬‬
‫}‬
‫}‬
‫מחסנית הגדרה ופעולות ממשק‬
‫‪10‬‬
‫‪5‬‬
‫ה'‪/‬חשון‪/‬תשע"ה‬
‫מחסנית מספרים – תרגיל ‪2‬‬
‫‪‬‬
‫‪‬‬
‫כתוב פעולה‪ ,‬המקבלת מחסנית מלאה במספרים שלמים ומחזירה את סכום‬
‫המספרים במחסנית שמספר ספרותיהן זוגי‪.‬‬
‫פעולת עזר – לחישוב מספר ספרותיו של מספר‬
‫)‪static int CountDigit(int num‬‬
‫{‬
‫‪//‬מחזירה את מספר הספרות של המספר‬
‫;‪int count = 0‬‬
‫)‪while (num > 0‬‬
‫{‬
‫;‪count++‬‬
‫;‪num /= 10;//num = num/10‬‬
‫}‬
‫;‪return count‬‬
‫}‬
‫‪11‬‬
‫מחסנית הגדרה ופעולות ממשק‬
‫מחסנית מספרים – תרגיל ‪2‬‬
‫‪‬‬
‫הפעולה העיקרית‬
‫)‪static int SumEvenDigitsStack(Stack s‬‬
‫{‬
‫‪//‬מקבלת מחסנית של מספרים טבעיים ומחזירה את סכום המספרים בעלי מספר זוגי של ספרות במחסנית‬
‫‪//‬הנחה – המחסנית אותחלה‬
‫;‪int sum = 0; int x‬‬
‫))(‪while (!s.IsEmpty‬‬
‫{‬
‫;)(‪x = s.Top‬‬
‫)‪if (CountDigit(x) % 2 == 0‬‬
‫;‪sum += x‬‬
‫;)(‪s.Pop‬‬
‫}‬
‫;‪return sum‬‬
‫מחסנית הגדרה ופעולות ממשק‬
‫‪} 12‬‬
‫‪6‬‬