י"ח/כסלו/תשע"ה תור QUEUE - הגדרה טנ"מ המכיל רצף של ערכים (יש חשיבות לסדר) ,כאשר יש אפשרות להכניס ערכים רק לסוף התור ולהוציא ערכים רק מתחילתו. למשל – תור במכולת. עיקרון הפעולה של הטנ"מ תור הואFIFO - )מי שנכנס ראשון יוצא ראשון( First In First Out תור -פעולות הממשק סריקה ובנייה 1 תור QUEUE - תיאור סְ כֵמַ טי של תור תור -פעולות הממשק סריקה ובנייה יציאה Out כניסה In 2 1 י"ח/כסלו/תשע"ה פעולות הממשק של תור בנאי Constructor - בונה תור ריק שאילתות: מחזירה האם התור ריק מחזירה את הערך שנמצא בראש התור ,בלי לשנות את מצב התור תנאי קדם :התור אינו ריק מחזירה תיאור של התור כ[x1, x2, …, xn] - הערך שנוסף לאחרונה לתור מופיע אחרון. )(>Queue<T )(bool IsEmpty )(T Head )(string ToString תור -פעולות הממשק סריקה ובנייה 3 פעולות הממשק של תור פעולות המשנות את התור: מכניסה את הערך xלסוף התור מחזירה את הערך מראש התור ומוציאה אותו מהתור )void Insert (T x )( T Remove תור -פעולות הממשק סריקה ובנייה 4 2 י"ח/כסלו/תשע"ה סריקה של תור תבנית כללית לולאה -תנאי עצירה – התור אינו ריק שמירת הערך שבראש התור במשתנה עזר בדיקה/חישוב על משתנה עזר הוצאת הערך שבראש התור ))(while (!q.IsEmpty { ;)(x = q.Head )if (... ;... ;)(q.Remove } 5 תור -פעולות הממשק סריקה ובנייה סריקה של תור דוגמה )static int SumDigits3Queue(Queue<int> q { //מקבלת תור של מספרים טבעיים ומחזירה את סכום המספרים בתור המתחלקים בשלוש בעלי מספר מתחלק בשלוש של ספרות .הנחה – התור אותחל ;int sum = 0; int x ))(while (!q.IsEmpty { ;)(x = q.Head )if (x % 3 == 0 && CountDigit(x) % 3 == 0 ;sum += x ;)(q.Remove } ;return sum { תור -פעולות הממשק סריקה ובנייה 6 3 י"ח/כסלו/תשע"ה סריקה של תור -תרגול תרגיל 1 כתוב פעולה ,המקבלת תור של מספרים טבעיים ומחזירה את מספר המספרים בתור - שהספרה המשמעותית ביותר שלהם ,שונה מהספרה הכי פחות משמעותית שלהם. לא לשכוח – תיעוד הפעולה והנחות תזכורת -מבנה הסריקה ))(while (!q.IsEmpty { ;)(x = q.Head )if (... ;... ;)(q.Remove } 7 תור -פעולות הממשק סריקה ובנייה סריקה של תור – תרגיל - 1פתרון פעולת עזר – בדיקה עבור מספר בודד האם עונה לתנאי { )static bool IsNumSpecial(int num //מחזירה האם שהספרה המשמעותית ביותר של המספר שונה מהספרה הכי פחות משמעותית שלו //מספר חד ספרתי או - 0מקיים את התנאי )if (num < 10 ;return true { else //שמירת הספרה הפחות משמעותית ;int less = num % 10 //קיצוץ הספרה ;num /= 10 )while (num > 9 ;num /= 10 //אחרי הלולאה -נשארה רק הספרה המשמעותית ביוצר -כל השאר קוצצו }};return num == less תור -פעולות הממשק סריקה ובנייה 8 4 י"ח/כסלו/תשע"ה סריקה של תור – תרגיל - 1פתרון הפעולה העיקרית )static int CountQueueSpecialNumbers(Queue<int> q } //מקבלת תור של מספרים טבעיים ומחזירה את מספר המספרים בתור -שהספרה המשמעותית ביותר שלהם ,שונה מהספרה הכי פחות משמעותית שלהם // .הנחה – התור אותחל ;int x; int count = 0 {))(while (!q.IsEmpty ;)(x = q.Head ))if (IsNumSpecial(x ;count++ };)(q.Remove };return count 9 תור -פעולות הממשק סריקה ובנייה בניה של תור מבנה כללי )(static Queue<...> GetQueue... { //הפעולה מחזירה תור ... ;)(>Queue<...> q_New = new Queue<... //בתוך לולאה (כי הפעולה תכניס לתור כמות של ערכים) ;)q_New.Insert(... //בסוף מחזירים את התור החדש ;return q_New } תור -פעולות הממשק סריקה ובנייה 10 5 י"ח/כסלו/תשע"ה בניה של תור דוגמה )(static Queue<string> GetQueueKelet { //הפעולה מחזירה תור לפי ערכים הנקלטים מהמשתמש -רשימת מחרוזות המסתיימת בzzz- ;Queue<string> q_New = new Queue<string>(); string st ;)"Console.WriteLine("Insert strings or zzz to finish ;)(st = Console.ReadLine )"while (st != “zzz { ;)q_New.Insert(st ;)(st = Console.ReadLine } ;return q_New } תור -פעולות הממשק סריקה ובנייה 11 בניה של תור -תרגול תרגיל 2 כתוב פעולה ,המקבלת מערך מספרים ומחזירה תור הכולל את כל ערכי המערך סכום ספרותיהן זוגי לא לשכוח – תיעוד הפעולה והנחות תור -פעולות הממשק סריקה ובנייה 12 6 תשע"ה/כסלו/י"ח פתרון- 2 בניה של תור – תרגיל 2 תרגיל static Queue<string> Arr2QueueSumZugi(int[] arr) { הפעולה מחזירה תור מלא בערכי המערך שסכום ספרותיהן זוגי// Queue<int> q_New = new Queue<int>(); for (int i = 0; i < arr.Length; i++) { if (SumDigit(arr[i]) % 2 == 0) q_New.Insert(arr[i]); } return q_New; } 13 7 פעולות הממשק סריקה ובנייה- תור
© Copyright 2024