Menu
Coddy logo textTech

הפרש קבוצות

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 24 מתוך 65.

לפעמים צריך למצוא איברים שקיימים ב־Set אחד אך לא באחר. המתודה difference() פותרת זאת על ידי יצירת קבוצה חדשה שמכילה רק את האיברים מהקבוצה הראשונה שאינם קיימים בקבוצה השנייה.

חשוב על זה כחיסור בין קבוצות — מסירים את כל האיברים של הקבוצה השנייה מהראשונה. המתודה difference() מחזירה קבוצה חדשה עם האיברים שנותרו, ומשאירה את שתי הקבוצות המקוריות ללא שינוי.

Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};

Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks);  // {meeting, report}

הפעולה הזאת שימושית במיוחד למציאת מה שחסר, מה שנותר לעשות או מה ייחודי לאוסף אחד בהשוואה לאחר. בניגוד לחיתוך, שמוצא את המשותף, ההפרש מדגיש מה מייחד קבוצה אחת בהשוואה לאחרת.

challenge icon

אתגר

קל

צרו תוכנית שמנהלת מערכת לניהול פרויקטים באמצעות זיהוי משימות שתוכננו אך טרם הושלמו. התוכנית שלכם צריכה:

  1. לקרוא קלט מסוג מחרוזת שמייצג את שם הפרויקט
  2. לקרוא כמה קלטים מסוג מחרוזת שמייצגים משימות מתוכננות (הקלט יסתיים כשתקבלו "planned_done")
  3. לקרוא כמה קלטים מסוג מחרוזת שמייצגים משימות שהושלמו (הקלט יסתיים כשתקבלו "completed_done")
  4. ליצור שתי קבוצות נפרדות לאחסון המשימות המתוכננות והמשימות שהושלמו
  5. להשתמש בשיטה difference() כדי למצוא משימות שתוכננו אך טרם הושלמו
  6. להדפיס ניתוח של מצב הפרויקט בדיוק בפורמט שמוצג בהמשך

לדוגמה, אם שם הפרויקט הוא "Website Launch", המשימות המתוכננות הן "Design mockups", "Write content", "Setup database", "Test functionality", "Deploy site", והמשימות שהושלמו הן "Design mockups", "Setup database", התוכנית שלכם צריכה להפיק:

Project: Website Launch
Planned tasks: {Design mockups, Write content, Setup database, Test functionality, Deploy site}
Completed tasks: {Design mockups, Setup database}
Remaining tasks: {Write content, Test functionality, Deploy site}
Tasks completed: 2
Tasks remaining: 3
Progress: 40.0% complete
Status: Project in progress - 3 task(s) remaining

אם שם הפרויקט הוא "Mobile App Development", המשימות המתוכננות הן "Create wireframes", "Develop UI", "Implement features", והמשימות שהושלמו הן "Create wireframes", "Develop UI", "Implement features", התוכנית שלכם צריכה להפיק:

Project: Mobile App Development
Planned tasks: {Create wireframes, Develop UI, Implement features}
Completed tasks: {Create wireframes, Develop UI, Implement features}
Remaining tasks: {}
Tasks completed: 3
Tasks remaining: 0
Progress: 100.0% complete
Status: Project completed successfully

אם שם הפרויקט הוא "Marketing Campaign", המשימות המתוכננות הן "Research target audience", "Create content", "Design graphics", "Launch campaign", "Analyze results", והמשימות שהושלמו הן "Research target audience", התוכנית שלכם צריכה להפיק:

Project: Marketing Campaign
Planned tasks: {Research target audience, Create content, Design graphics, Launch campaign, Analyze results}
Completed tasks: {Research target audience}
Remaining tasks: {Create content, Design graphics, Launch campaign, Analyze results}
Tasks completed: 1
Tasks remaining: 4
Progress: 20.0% complete
Status: Project in progress - 4 task(s) remaining

על התוכנית שלכם להשתמש בשיטה difference() כדי למצוא משימות שקיימות בקבוצת המשימות המתוכננות אך לא בקבוצת המשימות שהושלמו. חשבו את אחוז ההתקדמות על ידי חלוקת מספר המשימות שהושלמו במספר הכולל של המשימות המתוכננות והכפלה ב־100, ועגלו למקום עשרוני אחד. אם כל המשימות הושלמו, הציגו את "Project completed successfully" כמצב; אחרת, הציגו את "Project in progress - X task(s) remaining", כאשר X הוא מספר המשימות שנותרו.

נסו בעצמכם

import 'dart:io';

void main() {
  // קרא את שם הפרויקט
  String? projectName = stdin.readLineSync();
  
  // קרא את המשימות המתוכננות עד "planned_done"
  Set<String> plannedTasks = <String>{};
  String? task;
  while ((task = stdin.readLineSync()) != "planned_done") {
    if (task != null) {
      plannedTasks.add(task);
    }
  }
  
  // קרא את המשימות שהושלמו עד "completed_done"
  Set<String> completedTasks = <String>{};
  while ((task = stdin.readLineSync()) != "completed_done") {
    if (task != null) {
      completedTasks.add(task);
    }
  }
  
  // TODO: כתוב את הקוד שלך למטה
  // השתמש במתודה difference() כדי למצוא את המשימות שנותרו
  // חשב את אחוז ההתקדמות
  // קבע את מצב הפרויקט
  
  // הצג את התוצאות
  print("Project: $projectName");
  print("Planned tasks: $plannedTasks");
  print("Completed tasks: $completedTasks");
  // הוסף כאן את פקודות הפלט הנותרות
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Dart אונליין