Menu
Coddy logo textTech

בדיקת תנאים באמצעות 'any'

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

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

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

List<double> prices = [15.99, 45.50, 120.00, 8.75];

// בדוק אם פריט כלשהו עולה יותר מ-$100
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem);  // true

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

challenge icon

אתגר

קל

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

  1. לקרוא קלט מסוג מחרוזת שמייצג את שם הבניין
  2. לקרוא כמה קלטים של מספרים שלמים שמייצגים קריאות מחיישנים מקומות שונות (הקלט יסתיים כשתקבלו -1)
  3. לקרוא קלט של מספר שלם שמייצג את ערך סף ההתראה
  4. להשתמש בשיטה any() כדי לבדוק אם קריאה כלשהי מחיישן גדולה מערך סף ההתראה או שווה לו
  5. להדפיס את תוצאות ניטור האבטחה בדיוק בפורמט שמוצג בהמשך

לדוגמה, אם שם הבניין הוא "Office Tower", קריאות החיישנים הן 15, 23, 8, 45, 12, וסף ההתראה הוא 40, התוכנית שלכם צריכה להפיק את הפלט הבא:

Building: Office Tower
Sensor readings: [15, 23, 8, 45, 12]
Alert threshold: 40
Checking for readings >= 40
Alert triggered: true
Status: Security breach detected - immediate response required

אם שם הבניין הוא "Shopping Mall", קריאות החיישנים הן 18, 25, 12, 30, וסף ההתראה הוא 50, התוכנית שלכם צריכה להפיק את הפלט הבא:

Building: Shopping Mall
Sensor readings: [18, 25, 12, 30]
Alert threshold: 50
Checking for readings >= 50
Alert triggered: false
Status: All systems normal - no threats detected

אם שם הבניין הוא "Warehouse", קריאות החיישנים הן 75, 82, וסף ההתראה הוא 70, התוכנית שלכם צריכה להפיק את הפלט הבא:

Building: Warehouse
Sensor readings: [75, 82]
Alert threshold: 70
Checking for readings >= 70
Alert triggered: true
Status: Security breach detected - immediate response required

התוכנית שלכם חייבת להשתמש בשיטה any() כדי לבדוק אם קריאה כלשהי מחיישן גדולה מערך סף ההתראה או שווה לו. הציגו "Security breach detected - immediate response required" אם חיישן כלשהו מפעיל את ההתראה, או "All systems normal - no threats detected" אם אף חיישן אינו חורג מהסף.

נסו בעצמכם

import 'dart:io';

void main() {
  // קראו את שם הבניין
  String? buildingName = stdin.readLineSync();
  
  // קראו את נתוני החיישנים עד שמתקבל -1
  List<int> sensorReadings = [];
  while (true) {
    int reading = int.parse(stdin.readLineSync()!);
    if (reading == -1) {
      break;
    }
    sensorReadings.add(reading);
  }
  
  // קראו את סף ההתראה
  int alertThreshold = int.parse(stdin.readLineSync()!);
  
  // TODO: כתבו את הקוד שלכם למטה
  // השתמשו במתודה any() כדי לבדוק אם נתון כלשהו מהחיישנים הוא >= לסף ההתראה
  
  // הדפיסו את התוצאות בפורמט הנדרש
  print('Building: $buildingName');
  print('Sensor readings: $sensorReadings');
  print('Alert threshold: $alertThreshold');
  print('Checking for readings >= $alertThreshold');
  // הדפיסו את תוצאת הפעלת ההתראה ואת הודעת המצב
}
quiz iconבחנו את עצמכם

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

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

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