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

‫י"ח‪/‬כסלו‪/‬תשע"ה‬
‫תור ‪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
‫ פעולות הממשק סריקה ובנייה‬- ‫תור‬