דילוג לתוכן הראשי

אג' 13.11 ד' - *** חזרה1 בנושא מחסנית ***

בכיתה
חזרה
1. עבודה עם הקובץ unit4.dll
    * שיוכו לפרויקט ספציפי.
    * הקובץ להורדה + הנחיות, ראו בדף 'קישורים' סעיף 900.
2. שימוש במחלקת Stack הגנרית של האוניברסיטה העברית
    א. יצירת מחסנית-שלמים בשם s1.
    ב. הוספת 5 ערכים למחסנית.
    ג. יצירת מחסנית-שלמים עזר בשם temp.
    ד. הדפסת המחסנית s1 והדפסת המחסנית temp.
    ה. יצירת הפעולה SpilledOn המקבלת שתי מחסניות, ומעבירה את
       כל תכולת המחסנית השנייה שקיבלה מעל איברי המחסנית הראשונה.
3. יצירת מחלקת מחסנית עצמאית בשם Stc
    תכונות:
private int place; //מיקום נוכחי במערך
private int[];        //המחסנית תיוצג באמצעות המבנה מערך
    פעולות:    
    ממשו את פעולות ממשק המחסנית שלהלן.
    הערה: פעולות הממשק הן פעולות פנימיות בתוך המחלקה. מחלקת מחסנית לא תכיל פעולות סטטיות.
public Stc() {...}                                       //בנאי
public void Push(int val) {...}                 //הפעולה מקבלת ערך ומכניסה אותו לראש המחסנית
public int Top() {...}                                //הפעולה מחזירה את ערך האיבר שבראש המחסנית
public int Pop() {...}                                //הפעולה מוציאה ומחזירה את הערך שבראש המחסנית
public bool IsEmpty() {...}                     //הפעולה מחזירה ערך בוליאני האם המחסנית ריקה
public override string ToString() {...}  //הפעולה מחזירה מחרוזת המייצגת את איברי המחסנית

לבית
צרו פרויקט חדש בשם MyStcProject
1. צרו מחלקת Stc, המהווה מחלקה ליצירת מחסניות-שלמים.
    כתבו את כל פעולות הממשק שלה:
    Stc, Push, Top, Pop, IsEmpty, ToString.
2. צרו במחלקת Program את הפעולה SpilledOn (ראו ההנחיות למעלה).
פעולות סטטיות במחלקת Program של הפרויקט
3. (public static int GetSum(Stack s
    כתבו פעולה המקבלת מחסנית ומחזירה את סכום איבריה.
    --- ראו דוגמה-פתורה3 לתרגיל דומה עמ' 116 ---
4. (public static int Sum2Stacks(Stack s1, Stack s2
    כתבו פעולה המקבלת שתי מחסניות שלמים ומחזירה את סכומן, מבלי לפגוע במבנה שלהן.
    הערה1: מותר שאחת המחסניות או שתיהן תהיינה ריקות. אם שתיהן ריקות, יוחזר הערך 0.
    הערה2: מותר שבכל מחסנית יהיה מספר שונה של איברים.
    --- רמז: השתמשו במחסנית עזר, השתמשו בפעולה SpilledOn ---
5. (public static int CountX(Stack s, int x
    כתבו פעולה המקבלת מחסנית שלמים וערך שלם.
    הפעולה מחזירה את מספר ההופעות של הערך במחסנית.
    --- ראו מימוש אלגוריתם זה כפעולה חיצונית בעמ' 116 ---
6. ()public static Stack SortInput
    כתבו פעולה סטטית הקולטת מספרים עד לזקיף 999- (עד שהמשתמש יקליד את הערך 999-).
    הפעולה מחזירה מחסנית ובה ערכי הקלט ממוינים מן הגדול בתחתית המחסנית לקטן בראש המחסנית.
    לדוגמה, אם נקלטו המספרים הבאים:
user input order -->     10, 20, 15, 14, 12.
    הרי שבפועל תיווצר המחסנית הבאה (החץ מורה על ראש המחסנית):
creating this stack --> 12, 14, 15, 20, 10.
    על הפעולה להחזיר מחסנית ממוינת הנראית כך:
return this stack -->    10, 12, 14, 15, 20.
    כפי שאתם רואים, המחסנית המוחזרת ממוינת מן הקטן (בראש המחסנית) לגדול (בתחתית/בבסיס המחסנית).
    --- רמז: ראו הפעולה SortInput בעמ' 117 למטה ---

7. (public static void MoveRound(Stack s
    כתבו פעולה סטטית המקבלת מחסנית ומבצעת בה הזזה מעגלית, כך שהאיבר שהיה בראש המחסנית,
    יהפוך להיות  האיבר בתחתית המחסנית.
    לדוגמה, אם התקבלה המחסנית הבאה:
-->  10, 20, 15, 50.
    תשתנה המחסנית ותיראה כך:
-->  20, 15, 50, 10.
    --- רמז: נסו את האלגוריתם שלהלן
         1) שמרו האיבר שבראש המחסנית 
         2) צרו מחסנית עזר.
         3) העבירו כל תוכן המחסנית המקורית למחסנית העזר.
         4) דחפו למחסנית המקורית את האיבר ששמרתם.
         5) החזירו למחסנית המקורית את כל האיברים שלה ממחסנית העזר.
           
         רמז זה הוא למעשה האלגוריתם, רק בשפת דיבור יומיומית, ובעברית. 
         נסו ליישם שיטת פתרון אלגוריתמי מסוג זה לגבי תרגילים נוספים בהמשך.  ---