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

Transcription

חומרי לימוד - מדעי המחשב
‫ט'‪/‬טבת‪/‬תשע"ה‬
‫רשימה מקושרת ‪List -‬‬
‫‪‬‬
‫כל חוליה היא טנ"מ בפני עצמו המכיל הן את הערך והן את‬
‫החוליה הבאה לאחריה‬
‫‪‬‬
‫תיאור סְ כֵמַ טי של חוליה‬
‫‪‬‬
‫תיאור סְ כֵמַ טי של רשימה‬
‫‪1‬‬
‫רשימה ‪ -‬בניית רשימה‬
‫ממשק רשימה‬
‫)(>‪public List<T‬‬
‫‪‬‬
‫)(‪public Node<T> GetFirst‬‬
‫‪‬‬
‫‪‬‬
‫‪ //‬הפעולה בונה ומחזירה רשימה ריקה‬
‫‪‬‬
‫‪ //‬הפעולה מחזירה את החוליה הראשונה ברשימה‪ ,‬אם הרשימה ריקה הפעולה מחזירה‬
‫‪null‬‬
‫‪‬‬
‫‪ //‬הנחה – הרשימה אותחלה‬
‫‪‬‬
‫‪ //‬הפעולה מחזירה האם הרשימה ריקה‬
‫‪‬‬
‫‪ //‬הנחה – הרשימה אותחלה‬
‫‪‬‬
‫‪ //‬הפעולה מחזירה מחרוזת המתארת את הרשימה‬
‫‪‬‬
‫‪ //‬הנחה – הרשימה אותחלה‬
‫)(‪public bool IsEmpty‬‬
‫‪‬‬
‫)(‪public override string ToString‬‬
‫רשימה ‪ -‬בניית רשימה‬
‫‪‬‬
‫‪2‬‬
‫‪1‬‬
‫ט'‪/‬טבת‪/‬תשע"ה‬
‫ממשק רשימה ‪ -‬המשך‬
‫)‪public Node<T> Insert(Node<T> p, T info‬‬
‫‪‬‬
‫‪‬‬
‫‪ //‬הפעולה מכניסה לרשימה חוליה חדשה שהערך שלה הוא ‪ info‬אחרי החוליה ‪ p‬הפעולה‬
‫מחזירה את החוליה החדשה שהוכנסה‪.‬‬
‫‪‬‬
‫‪ //‬כדי להכניס איבר ראשון לרשימה הערך של הפרמטר ‪ p‬צריך להיות ‪.null‬‬
‫‪‬‬
‫‪ //‬הנחות – הרשימה אותחלה‪ ,‬החוליה ‪ p‬קיימת ברשימה‬
‫)‪public Node<T> Remove(Node<T> p‬‬
‫‪‬‬
‫‪‬‬
‫‪ //‬הפעולה מוציאה את החוליה ‪p‬מהרשימה ומחזירה את החוליה הבאה אחריה אם הוצאה‬
‫החוליה האחרונה ברשימה הפעולה תחזיר ‪null‬‬
‫‪‬‬
‫‪ //‬הנחות – הרשימה אותחלה‪ ,‬החוליה ‪ p‬קיימת ברשימה‬
‫רשימה ‪ -‬בניית רשימה‬
‫‪3‬‬
‫בניית רשימה ‪ -‬תבנית‬
‫‪‬‬
‫אופן הוספת חוליה לרשימה‬
‫באופן סְ כֵמַ טי‪ ,‬מוסיפים חוליה חדשה עם ערך‬
‫חדש‪ ,‬אחרי מיקום חוליה מסוימת‪.‬‬
‫‪+‬‬
‫רשימה ‪ -‬פעולות הממשק וסריקת רשימה‬
‫‪4‬‬
‫‪2‬‬
‫ט'‪/‬טבת‪/‬תשע"ה‬
‫בניית רשימה ‪ -‬תבנית‬
‫‪ ‬אופן בניית רשימה‪:‬‬
‫הגדרת רשימה חדשה‬
‫;)(>‪List<int> l_new = new List<int‬‬
‫הגדרת חוליה והצבת תחילת הרשימה החדשה בה‬
‫;)(‪Node<int> p_new = l_new.GetFirst‬‬
‫הכנסת ערכים לרשימה החדשה בתוך לולאה‬
‫‪ ‬הוספת ערך לרשימה (מחזירה את המיקום אחריו נוסף הערך =‬
‫החוליה החדשה) תוך כדיי קידום החוליה‬
‫;)‪p_new = l_new.Insert(p_new, x_new‬‬
‫‪5‬‬
‫רשימה ‪ -‬בניית רשימה‬
‫בניית רשימה ‪ -‬דוגמה‬
‫)(‪static List<int> SetList‬‬
‫{‬
‫‪ //‬מחזירה רשימה של ‪ 50‬מספרים שלמים אקראיים בין ‪1-10‬‬
‫;)(>‪List<int> l_new = new List<int‬‬
‫;)(‪Random rnd = new Random‬‬
‫;)(‪Node<int> p_new = l_new.GetFirst‬‬
‫)‪for (int i = 0; i < 50; i++‬‬
‫{‬
‫;))‪p_new = l_new.Insert(p_new, rnd.Next(1, 11‬‬
‫}‬
‫;‪return l_new‬‬
‫}‬
‫רשימה ‪ -‬בניית רשימה‬
‫‪6‬‬
‫‪3‬‬
‫ט'‪/‬טבת‪/‬תשע"ה‬
‫בניית רשימה – תרגיל ‪1‬‬
‫‪‬‬
‫כתבו פעולה המחזירה רשימה של מספרים ממשיים הכוללת את כל המספרים החד ספרתיים לפני‬
‫ואחרי הנקודה (למשל ‪ )3.2‬להם ספרת העשיריות אינה גדולה מספרת האחדות‪.‬‬
‫‪‬‬
‫פתרון‬
‫‪‬‬
‫טיוטה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫פעולת עזר – בדיקה עבור מספר בודד האם עונה לתנאי‬
‫פעולה עיקרית – מעבר על כלל המספרים ‪ 1.0-9.9‬והכנסה של אלו העונים לתנאי לרשימה‬
‫פעולת העזר‬
‫)‪static bool IsNumberOk(double num_d‬‬
‫{‬
‫‪ //‬מחזירה האם למספר ספרת העשיריות אינה גדולה מספרת האחדות‬
‫;‪int ones = (int)(num_d) % 10‬‬
‫;‪int tenthses = (int)(num_d * 10) % 10‬‬
‫;)‪return !(tenthses > ones‬‬
‫}‬
‫‪7‬‬
‫רשימה ‪ -‬בניית רשימה‬
‫בניית רשימה – תרגיל ‪1‬‬
‫‪‬‬
‫הפעולה העיקרית‬
‫)(‪static List<double> SetDoubleList‬‬
‫{‬
‫‪ //‬מחזירה רשימה של כל המספרים הממשיים ‪ 1-9‬עם ספרה אחת אחרי הנקודה (עשיריות)‬
‫;)(>‪List<double> l_new = new List<double‬‬
‫;)(‪Node<double> p_new = l_new.GetFirst‬‬
‫‪ //‬מעבר על כלל המספרים ‪ -‬בדיקה והוספת המתאימים‬
‫)‪for (double i = 1.0; i <= 9.9; i += 0.1‬‬
‫{‬
‫))‪if (IsNumberOk(i‬‬
‫;)‪p_new = l_new.Insert(p_new, i‬‬
‫;‪} return l_new‬‬
‫רשימה ‪ -‬בניית רשימה‬
‫‪8‬‬
‫}‬
‫‪4‬‬
‫תשע"ה‬/‫טבת‬/'‫ט‬
2 ‫בניית רשימה – תרגיל‬
.‫כתבו פעולה המחזירה רשימה הכוללת את המספרים שאינם שליליים מתוך הרשימה המתקבלת‬

‫פתרון‬

static List<int> List2List_NonNegative(List<int> l)
{
‫מחזירה רשימה הכוללת את המספרים שאינם שליליים בלבד מתוך הרשימה המתקבלת‬//
List<int> l_new = new List<int>(); Node<int> p_new = l_new.GetFirst();
Node<int> p = l.GetFirst(); int x;
while (p != null)
{
x = p.GetInfo();
if (x > 0)
p_new = l_new.Insert(p_new, x);
p = p.GetNext();
}
return l_new;
}
5
9
‫ בניית רשימה‬- ‫רשימה‬