Menu
Coddy logo textTech

בדיקת נוכחות של איברים בקבוצה

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

כשעובדים עם Set, לעיתים קרובות צריך לבדוק אם רכיב מסוים קיים באוסף. המתודה contains() מספקת דרך פשוטה ויעילה לבצע את הבדיקה הזאת, ומחזירה true אם הרכיב נמצא ו-false אם לא.

אחד היתרונות המרכזיים של השימוש ב־contains() עם Set הוא הביצועים יוצאי הדופן שלו. בניגוד לחיפוש בתוך List, שבו ייתכן שיהיה צורך לבדוק כל איבר בזה אחר זה, פעולות Set מותאמות לחיפוש מהיר, ולכן contains() יעילה מאוד גם באוספים גדולים.

Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};

// בדקו אם מרכיבים מסוימים זמינים
bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');

print(hasFlour);  // true
print(hasMilk);   // false

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

challenge icon

אתגר

קל

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

  1. לקרוא קלט מסוג מחרוזת שמייצג את שם המתכון
  2. לקרוא כמה קלטים מסוג מחרוזת שמייצגים את המרכיבים הזמינים במזווה (הקלט יסתיים כשתקבלו "pantry_done")
  3. לקרוא כמה קלטים מסוג מחרוזת שמייצגים את מרכיבי המתכון הנדרשים (הקלט יסתיים כשתקבלו "recipe_done")
  4. ליצור Set עם המרכיבים הזמינים במזווה
  5. להשתמש בשיטה contains() כדי לבדוק אם כל אחד מהמרכיבים הנדרשים זמין במזווה
  6. להדפיס את תוצאות אימות המתכון בדיוק בפורמט שמוצג למטה

לדוגמה, אם שם המתכון הוא "Chocolate Chip Cookies", המרכיבים במזווה הם "flour", "sugar", "eggs", "butter", "vanilla", והמרכיבים הנדרשים הם "flour", "sugar", "chocolate chips", "butter", התוכנית שלכם צריכה להציג:

Recipe: Chocolate Chip Cookies
Pantry ingredients: {flour, sugar, eggs, butter, vanilla}
Required ingredients: [flour, sugar, chocolate chips, butter]
Checking ingredient availability:
- flour: Available
- sugar: Available
- chocolate chips: Missing
- butter: Available
Missing ingredients: [chocolate chips]
Status: Cannot make recipe - missing 1 ingredient(s)

אם שם המתכון הוא "Scrambled Eggs", המרכיבים במזווה הם "eggs", "butter", "salt", "pepper", והמרכיבים הנדרשים הם "eggs", "butter", "salt", התוכנית שלכם צריכה להציג:

Recipe: Scrambled Eggs
Pantry ingredients: {eggs, butter, salt, pepper}
Required ingredients: [eggs, butter, salt]
Checking ingredient availability:
- eggs: Available
- butter: Available
- salt: Available
Missing ingredients: []
Status: Ready to cook - all ingredients available

אם שם המתכון הוא "Fruit Salad", המרכיבים במזווה הם "apples", "bananas", והמרכיבים הנדרשים הם "apples", "oranges", "grapes", "honey", התוכנית שלכם צריכה להציג:

Recipe: Fruit Salad
Pantry ingredients: {apples, bananas}
Required ingredients: [apples, oranges, grapes, honey]
Checking ingredient availability:
- apples: Available
- oranges: Missing
- grapes: Missing
- honey: Missing
Missing ingredients: [oranges, grapes, honey]
Status: Cannot make recipe - missing 3 ingredient(s)

על התוכנית שלכם להשתמש בשיטה contains() כדי לבדוק כל מרכיב נדרש מול ה-Set של המזווה. אחסנו את המרכיבים הנדרשים ברשימה כדי לשמור על סדר הבדיקה, ואספו את כל המרכיבים החסרים ברשימה נפרדת. אם כל המרכיבים זמינים, הציגו את "Ready to cook - all ingredients available" כסטטוס. אם חסרים מרכיבים כלשהם, הציגו את "Cannot make recipe - missing X ingredient(s)", כאשר X הוא מספר המרכיבים החסרים.

נסו בעצמכם

import 'dart:io';

void main() {
  // קראו את שם המתכון
  String? recipeName = stdin.readLineSync();
  
  // קראו את המצרכים במזווה עד "pantry_done"
  Set<String> pantryIngredients = <String>{};
  String? pantryInput;
  while ((pantryInput = stdin.readLineSync()) != "pantry_done") {
    if (pantryInput != null) {
      pantryIngredients.add(pantryInput);
    }
  }
  
  // קראו את המצרכים הנדרשים עד "recipe_done"
  List<String> requiredIngredients = <String>[];
  String? recipeInput;
  while ((recipeInput = stdin.readLineSync()) != "recipe_done") {
    if (recipeInput != null) {
      requiredIngredients.add(recipeInput);
    }
  }
  
  // TODO: כתבו את הקוד שלכם להלן
  // השתמשו ב-pantryIngredients.contains() כדי לבדוק כל מצרך נדרש
  // צרו רשימה לאחסון המצרכים החסרים
  // בדקו את הזמינות והדפיסו את התוצאות בפורמט הנדרש
  
  // הדפיסו את התוצאות (החליפו במימוש שלכם)
  print("Recipe: $recipeName");
  print("Pantry ingredients: $pantryIngredients");
  print("Required ingredients: $requiredIngredients");
}
quiz iconבחנו את עצמכם

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

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

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