חומרי לימוד - מדעי המחשב
Transcription
חומרי לימוד - מדעי המחשב
י'/חשון/תשע"ה מחסנית פעולות ממשק -תזכורת •ראש המחסנית – המקום אליו מכניסים וממנו מוציאים את הערכים. מה עושה הפעולה הפעולה שם הפעולה מחזירה ב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