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

‫י'‪/‬חשון‪/‬תשע"ה‬
‫מחסנית פעולות ממשק ‪ -‬תזכורת‬
‫•ראש המחסנית – המקום אליו מכניסים וממנו מוציאים את הערכים‪.‬‬
‫מה עושה הפעולה‬
‫הפעולה‬
‫שם הפעולה‬
‫מחזירה‬
‫ב‪C#-‬‬
‫לא מחזירה –‬
‫פעולה המחזירה מחסנית ריקה‪.‬‬
‫)(‪new Stack‬‬
‫בנאי‬
‫פעולה המחזירה 'אמת' אם המחסנית ריקה‪ ,‬ו'שקר' אחרת‪.‬‬
‫אמת‪/‬שקר‬
‫הנחה‪ :‬המחסנית מאותחלת‪.‬‬
‫האחרון שהוכנס יוצא ראשון‬
‫)(‪IsEmpty‬‬
‫‪LIFO - Last In First Out‬‬
‫הפעולה מכניסה את האיבר ‪ X‬לראש המחסנית‪.‬‬
‫לא מחזירה‬
‫)‪Push(x‬‬
‫הנחה‪ :‬המחסנית מאותחלת‪.‬‬
‫פעולה המוציאה את האיבר שבראש המחסנית ומחזירה את ערכו‪.‬‬
‫מספר‬
‫)(‪Pop‬‬
‫הנחות‪ :‬המחסנית מאותחלת ואינה ריקה‪.‬‬
‫פעולה המחזירה את ערכו של האיבר שבראש המחסנית מבלי להוציאו‪.‬‬
‫מספר‬
‫)(‪Top‬‬
‫הנחות‪ :‬המחסנית מאותחלת ואינה ריקה‪.‬‬
‫‪1‬‬
‫מחסנית מספרים ‪ -‬תרגילים נוספים‬
‫אופן סריקת מחסנית ‪ -‬תזכורת‬
‫‪‬‬
‫באופן כללי ‪ -‬עוברים על כל איברי המחסנית בלולאת כל עוד ע"י שליפת‬
‫איברי המחסנית מראשה אחד אחר השני‪.‬‬
‫בכל ביצוע של הלולאה מבצעים חישוב‪/‬פעולה על הערך שיצא מראש‬
‫המחסנית‪.‬‬
‫הלולאה מסתיימת כאשר המחסנית ריקה (תנאי עצירה של הלולאה)‪.‬‬
‫‪‬‬
‫תבנית ב‪C#-‬‬
‫))(‪while (!s.IsEmpty‬‬
‫{‬
‫;)(‪x = s.Top‬‬
‫‪//‬חישוב‪/‬פעולה על הערך שיצא מראש המחסנית‬
‫;)(‪s.Pop‬‬
‫}‬
‫מחסנית מספרים ‪ -‬תרגילים נוספים‬
‫‪2‬‬
‫‪1‬‬
‫י'‪/‬חשון‪/‬תשע"ה‬
‫תרגיל ‪1‬‬
‫‪‬‬
‫כתוב פעולה‪ ,‬המקבלת מחסנית שלמים ומציגה מה יש‬
‫יותר במחסנית מספרים חיוביים או שליליים‬
‫‪3‬‬
‫מחסנית מספרים ‪ -‬תרגילים נוספים‬
‫תרגיל ‪ - 1‬פתרון‬
‫)‪static void WhatMoreInStack(Stack s‬‬
‫{‬
‫‪//‬מקבלת מחסנית של מספרים שלמים ומציגה מה יש יותר במחסנית מספרים חיוביים או שליליים‪ .‬הנחה – המחסנית אותחלה‬
‫;‪int x‬‬
‫מונה שלילי‪ int countN = 0;//‬מונה חיובי‪int countP = 0;//‬‬
‫))(‪while (!s.IsEmpty‬‬
‫{‬
‫;)(‪x = s.Top‬‬
‫)‪if (x > 0‬‬
‫;‪countP++‬‬
‫‪else‬‬
‫)‪if (x < 0‬‬
‫;‪countN++‬‬
‫;)(‪s.Pop‬‬
‫}‬
‫מחסנית מספרים ‪ -‬תרגילים נוספים‬
‫‪4‬‬
‫‪2‬‬
‫י'‪/‬חשון‪/‬תשע"ה‬
‫תרגיל ‪ – 1‬פתרון המשך‬
‫)‪static void WhatMoreInStack(Stack s‬‬
‫‪...‬‬
‫)‪if (countP > countN‬‬
‫;)"יותר חיוביים"(‪Console.WriteLine‬‬
‫‪else‬‬
‫)‪if (countN > countP‬‬
‫;)"יותר שליליים"(‪Console.WriteLine‬‬
‫‪else‬‬
‫;)"שוויון"(‪Console.WriteLine‬‬
‫}‬
‫מחסנית מספרים ‪ -‬תרגילים נוספים‬
‫‪5‬‬
‫תרגיל ‪2‬‬
‫‪‬‬
‫כתוב פעולה‪ ,‬המקבלת מחסנית מלאה במספרים שלמים‬
‫ומציגה מה יש יותר במחסנית‪:‬‬
‫‪‬‬
‫‪‬‬
‫מספרים חיוביים בעלי מספר זוגי של ספרות‬
‫או מספרים שליליים בעלי מספר אי‪-‬זוגי של ספרות‬
‫מחסנית מספרים ‪ -‬תרגילים נוספים‬
‫‪6‬‬
‫‪3‬‬
‫י'‪/‬חשון‪/‬תשע"ה‬
‫תרגיל ‪ - 2‬פתרון‬
‫‪‬‬
‫(פעולת עזר)‬
‫)‪static int CountDigit(int num‬‬
‫{‬
‫‪//‬מחזירה את מספר הספרות של מספר שאינו שלילי‬
‫;‪int count = 0‬‬
‫)‪while (num > 0‬‬
‫{‬
‫;‪count++‬‬
‫;‪num /= 10;//num = num/10‬‬
‫}‬
‫;‪return count‬‬
‫}‬
‫‪7‬‬
‫מחסנית מספרים ‪ -‬תרגילים נוספים‬
‫תרגיל ‪ – 2‬פתרון המשך‬
‫)‪static void WhatMoreInStack(Stack s‬‬
‫{‬
‫‪//‬מקבלת מחסנית של מספרים שלמים ומציגה מה יש יותר במחסנית מספרים חיוביים בעלי מספר זוגי של‬
‫ספרות או מספרים שליליים בעלי מספר אי‪-‬זוגי של ספרות‪ .‬הנחה – המחסנית אותחלה‬
‫;‪int x‬‬
‫מונה שלילי‪ int countN = 0;//‬מונה חיובי‪int countP = 0;//‬‬
‫))(‪while (!s.IsEmpty‬‬
‫{‬
‫;)(‪x = s.Top‬‬
‫)‪if (x > 0 && CountDigit(x) % 2 == 0‬‬
‫;‪countP++‬‬
‫‪else‬‬
‫)‪if (x < 0 && CountDigit(Math.Abs(x)) % 2 != 0‬‬
‫;‪countN++‬‬
‫;)(‪s.Pop‬‬
‫מחסנית מספרים ‪ -‬תרגילים נוספים‬
‫‪}8‬‬
‫‪4‬‬
‫י'‪/‬חשון‪/‬תשע"ה‬
‫תרגיל ‪ – 2‬פתרון המשך‬
‫)‪static void WhatMoreInStack(Stack s‬‬
‫‪...‬‬
‫)‪if (countP > countN‬‬
‫;)"יותר חיובי עם מספר ספרות זוגי"(‪Console.WriteLine‬‬
‫‪else‬‬
‫)‪if (countN > countP‬‬
‫;)"יותר שלילי עם מספר ספרות אי‪-‬זוגי"(‪Console.WriteLine‬‬
‫‪else‬‬
‫;)"שוויון"(‪Console.WriteLine‬‬
‫}‬
‫‪9‬‬
‫מחסנית מספרים ‪ -‬תרגילים נוספים‬
‫תרגיל ‪3‬‬
‫‪‬‬
‫כתבו פעולה המקבלת מחסנית מלאה במספרים שלמים‪.‬‬
‫הפעולה מחזירה האם במחסנית מספר המספרים שכל‬
‫ספרותיהן זוגיות שווה למספר המספרים שכל ספרותיהן‬
‫אי‪-‬זוגיות‪.‬‬
‫מחסנית מספרים ‪ -‬תרגילים נוספים‬
‫‪10‬‬
‫‪5‬‬
‫תשע"ה‬/‫חשון‬/'‫י‬
‫ פתרון‬- 3 ‫תרגיל‬
)‫(פעולת עזר‬
static bool IsSameZugiyut(int num, bool isZugi)

{
‫מחזירה האם כל ספרות המספר זוגיות או אי זוגיות בהתאם לערכו של המשתנה הבוליאני‬//
while (num > 0)
if (((num % 10) % 2 == 0 && !isZugi)
|| ((num % 10) % 2 != 0 && isZugi))
return false;
else
num /= 10;
return true;
}
11
‫ תרגילים נוספים‬- ‫מחסנית מספרים‬
‫ – פתרון המשך‬3 ‫תרגיל‬
'‫דרך א‬

static bool IsEquleSameZugiyut(Stack s)
{
‫מחזירה האם יש במחסנית מספר המספרים שכל ספרותיהן זוגיות שווה למספר המספרים שכל ספרותיהן‬//
‫ הנחה – המחסנית אותחלה‬.‫זוגיות‬-‫אי‬
int countZugi = 0; int countEZugi = 0; int x;
while (!s.IsEmpty()) {
x = s.Top();
if (x % 2 == 0 && IsSameZugiyut(Math.Abs(x), true))
countZugi++;
if (x % 2 != 0 && IsSameZugiyut(Math.Abs(x), false))
countEZugi++;
s.Pop(); }
return countZugi == countEZugi; }
12
6
‫ תרגילים נוספים‬- ‫מחסנית מספרים‬
‫י'‪/‬חשון‪/‬תשע"ה‬
‫תרגיל ‪ – 3‬פתרון המשך‬
‫‪‬‬
‫דרך ב'‬
‫)‪static bool IsEquleSameZugiyut2(Stack s‬‬
‫{‬
‫‪//‬מחזירה האם יש במחסנית מספר המספרים שכל ספרותיהן זוגיות שווה למספר המספרים שכל ספרותיהן‬
‫אי‪-‬זוגיות‪ .‬הנחה – המחסנית אותחלה‬
‫;‪int count = 0; int x‬‬
‫{ ))(‪while (!s.IsEmpty‬‬
‫;)(‪x = s.Top‬‬
‫))‪if (x % 2 == 0 && IsSameZugiyut(x, true‬‬
‫;‪count++‬‬
‫))‪if (x % 2 != 0 && IsSameZugiyut(x, false‬‬
‫;‪count--‬‬
‫} ;)(‪s.Pop‬‬
‫} ;‪return count == 0‬‬
‫מחסנית מספרים ‪ -‬תרגילים נוספים‬
‫‪13‬‬
‫‪7‬‬