סיכום – רשימת אורחים ייחודית
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 25 מתוך 65.
אתגר
קלצרו תוכנית לניהול מערכת לתכנון אירועים באמצעות ניתוח רשימות אורחים משני מקורות הזמנה שונים. התוכנית שלכם צריכה:
- לקרוא קלט מסוג מחרוזת המייצג את שם האירוע
- לקרוא כמה קלטים מסוג מחרוזת המייצגים אורחים מרשימת ההזמנות הראשונה (הקלט יסתיים כשתקבלו
"list1_done") - לקרוא כמה קלטים מסוג מחרוזת המייצגים אורחים מרשימת ההזמנות השנייה (הקלט יסתיים כשתקבלו
"list2_done") - להמיר את שתי רשימות האורחים לקבוצות (Sets), כדי לטפל אוטומטית בכפילויות בתוך כל רשימה
- להשתמש בשיטה
union()כדי למצוא את כל האורחים הייחודיים שהוזמנו לאירוע - להשתמש בשיטה
intersection()כדי למצוא אורחים שמופיעים בשתי רשימות ההזמנות - להשתמש בשיטה
difference()כדי למצוא אורחים שמופיעים רק ברשימת ההזמנות הראשונה - להדפיס את ניתוח רשימת האורחים בדיוק בפורמט שמוצג למטה
לדוגמה, אם שם האירוע הוא "Birthday Party", הרשימה הראשונה מכילה את "Alice", את "Bob", את "Charlie" ואת "Diana", והרשימה השנייה מכילה את "Bob", את "Diana", את "Eve" ואת "Frank", התוכנית שלכם צריכה להפיק את הפלט הבא:
Event: Birthday Party
First invitation list: {Alice, Bob, Charlie, Diana}
Second invitation list: {Bob, Diana, Eve, Frank}
All unique guests: {Alice, Bob, Charlie, Diana, Eve, Frank}
Guests on both lists: {Bob, Diana}
Guests only on first list: {Alice, Charlie}
Total unique guests: 6
Duplicate invitations: 2
First list only: 2
Status: Guest list analysis completedאם שם האירוע הוא "Wedding Reception", הרשימה הראשונה מכילה את "John", את "Mary" ואת "Sarah", והרשימה השנייה מכילה את "Tom", את "Lisa" ואת "Mike", התוכנית שלכם צריכה להפיק את הפלט הבא:
Event: Wedding Reception
First invitation list: {John, Mary, Sarah}
Second invitation list: {Tom, Lisa, Mike}
All unique guests: {John, Mary, Sarah, Tom, Lisa, Mike}
Guests on both lists: {}
Guests only on first list: {John, Mary, Sarah}
Total unique guests: 6
Duplicate invitations: 0
First list only: 3
Status: Guest list analysis completedאם שם האירוע הוא "Company Meeting", הרשימה הראשונה מכילה את "Alex", את "Jordan", את "Taylor", את "Morgan" ואת "Alex", והרשימה השנייה מכילה את "Jordan", את "Taylor", את "Casey" ואת "Jordan", התוכנית שלכם צריכה להפיק את הפלט הבא:
Event: Company Meeting
First invitation list: {Alex, Jordan, Taylor, Morgan}
Second invitation list: {Jordan, Taylor, Casey}
All unique guests: {Alex, Jordan, Taylor, Morgan, Casey}
Guests on both lists: {Jordan, Taylor}
Guests only on first list: {Alex, Morgan}
Total unique guests: 5
Duplicate invitations: 2
First list only: 2
Status: Guest list analysis completedעל התוכנית שלכם להדגים את שלוש פעולות הקבוצה: union() כדי לצרף את כל האורחים, intersection() כדי למצוא אורחים שמופיעים בשתי הרשימות, ו-difference() כדי למצוא אורחים שמופיעים רק ברשימה הראשונה. תחילה המירו את רשימות הקלט לקבוצות כדי לטפל בכפילויות בתוך כל אחת מהרשימות, ולאחר מכן בצעו את פעולות הקבוצה כדי לנתח את התפלגות האורחים.
נסו בעצמכם
import 'dart:io';
void main() {
// קראו את שם האירוע
String? eventName = stdin.readLineSync();
// קראו את רשימת המוזמנים הראשונה
List<String> firstList = [];
String? input;
while ((input = stdin.readLineSync()) != "list1_done") {
if (input != null) {
firstList.add(input);
}
}
// קראו את רשימת המוזמנים השנייה
List<String> secondList = [];
while ((input = stdin.readLineSync()) != "list2_done") {
if (input != null) {
secondList.add(input);
}
}
// המירו את הרשימות לקבוצות
Set<String> firstSet = firstList.toSet();
Set<String> secondSet = secondList.toSet();
// TODO: כתבו את הקוד שלכם למטה
// השתמשו במתודות union(), intersection() ו-difference() כדי לנתח את רשימות המוזמנים
// חשבו את כל המוזמנים הייחודיים, את המוזמנים שמופיעים בשתי הרשימות ואת המוזמנים שמופיעים רק ברשימה הראשונה
// הדפיסו את התוצאות בפורמט הנדרש
print("Event: $eventName");
print("First invitation list: $firstSet");
print("Second invitation list: $secondSet");
// הוסיפו כאן את שאר הוראות הפלט
}כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1מניפולציות מתקדמות ברשימות
מאפייני רשימה: ראשון ואחרוןמצב הרשימה: isEmpty ו-isNotEmpהיפוך רשימההוספה לרשימה: insertהסרת פריטים מרשימה: removeWhereחיפוש ברשימה: indexOfמיון רשימהערבוב רשימהסיכום – מארגן רשימות4מניפולציה מתקדמת של Map
מעבר על Mapבדיקה אם מפתחות וערכים קיימיםמאפייני Map: מפתחות וערכיםהוספה מותנית: putIfAbsentהסרת רשומות מ־MapMaps מקונניםסיכום – עדכון מלאי2פעולות פונקציונליות על רשימות
טרנספורמציה באמצעות 'map'סינון באמצעות 'where'שימוש ב-'.toList()'בדיקת תנאים באמצעות 'any'תנאים באמצעות 'every'איתור באמצעות 'firstWhere'סיכום – סינון נתונים5פרויקט: חישוב עגלת קניות
הגדרת הפרויקטהוספת פריטים לעגלה3קבוצות
מהי קבוצה?יצירת קבוצההוספה והסרה מקבוצותבדיקת נוכחות של איברים בקבוצההמרת רשימה לקבוצהאיחוד קבוצותחיתוך קבוצותהפרש קבוצותסיכום – רשימת אורחים ייחודית6טיפול בסיסי בשגיאות
מהן חריגות?בלוק ה-try-catchתפיסת חריגות באמצעות onבלוק ה-finallyהשלכת חריגהסיכום – חלוקה בטוחה9טיפוסי מנייה (Enums)
מה הם Enums?הגדרת Enum פשוטשימוש ב-Enums במשתניםEnums במשפטי 'switch'סיכום – רמזורתרגלו בעצמכם: קומפיילר Dart אונליין