בדיקת קיום איברים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 37 מתוך 56.
בעבודה עם קבוצות, לעיתים קרובות צריך לבדוק אם איבר מסוים קיים לפני שמבצעים עליו פעולות. המתודה .count() מספקת דרך פשוטה לבדוק אם איבר נמצא בקבוצה שלך.
כמו במפות, המתודה .count() מחזירה 1 אם הרכיב קיים בקבוצה, ו-0 אם הוא לא קיים. לכן היא מתאימה במיוחד לבדיקות תנאי:
std::set<int> numbers = {10, 20, 30};
if (numbers.count(20)) {
std::cout << "Found 20 in the set!" << std::endl;
} else {
std::cout << "20 is not in the set" << std::endl;
}הגישה הזו בטוחה הרבה יותר מניסיון לגשת ישירות לאיברים, במיוחד כשלא בטוחים שהם קיימים. אפשר להשתמש ב־.count() כדי לאמת קלט של משתמשים, למנוע שגיאות או לקבל החלטות על סמך מה שמאוחסן כרגע בקבוצה שלך.
אתגר
קלצרו תוכנית שמדגימה כיצד לבדוק בבטחה אם איברים קיימים ב־std::set לפני ביצוע פעולות עליהם. האתגר הזה יבדוק את ההבנה שלכם בשיטת .count() לאימות קיומם של איברים.
הקלטים הבאים יסופקו:
- מספר שלם
nהמייצג את מספר האיברים שיש להוסיף תחילה לקבוצה - לאחר מכן,
nמספרים שלמים שיש להוסיף לקבוצה - מספר שלם
mהמייצג את מספר האיברים שיש לחפש - לאחר מכן,
mמספרים שלמים שיש לבדוק אם הם קיימים בקבוצה
התוכנית שלכם צריכה:
- ליצור
std::set<int>ריקה - לקרוא את מספר האיברים שיש להוסיף ולהוסיף אותם לקבוצה באמצעות
.insert() - לקרוא את מספר האיברים שיש לחפש
- עבור כל איבר לחיפוש, להשתמש בשיטת
.count()כדי לבדוק אם הוא קיים בקבוצה - להדפיס הודעות מתאימות בהתאם לשאלה אם כל איבר נמצא או לא
- לאחר כל החיפושים, להדפיס את המספר הכולל של האיברים שנמצאו
השתמשו בפורמט הפלט המדויק הבא:
עבור כל תוצאת חיפוש:
Searching for [number]: Foundעבור איברים שלא נמצאו:
Searching for [number]: Not foundסיכום בסוף:
Total found: [count] out of [total_searches]השתמשו ב־numbers.count(searchValue) כדי לבדוק אם איבר קיים בקבוצה. אם מוחזר 1, האיבר קיים; אם מוחזר 0, האיבר אינו קיים. שמרו מונה כדי לעקוב אחר מספר האיברים שנמצאו בהצלחה במהלך פעולות החיפוש.
נסו בעצמכם
#include <iostream>
#include <set>
using namespace std;
int main() {
// קראו את מספר האיברים שיש להוסיף לקבוצה
int n;
cin >> n;
// צרו קבוצה ריקה
set<int> numbers;
// קראו והכניסו n איברים לקבוצה
for (int i = 0; i < n; i++) {
int element;
cin >> element;
numbers.insert(element);
}
// קראו את מספר האיברים שיש לחפש
int m;
cin >> m;
int foundCount = 0;
// TODO: כתבו את הקוד שלכם למטה
// עבור כל איבר לחיפוש:
// 1. קראו את הערך לחיפוש
// 2. השתמשו ב־numbers.count(searchValue) כדי לבדוק אם הוא קיים
// 3. הדפיסו את ההודעה המתאימה
// 4. עדכנו את foundCount אם האיבר נמצא
// הדפיסו את הסיכום
cout << "Total found: " << foundCount << " out of " << m << endl;
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטים6קבוצות (איברים ייחודיים)
היכרות עם std::setיצירת קבוצה והוספת איבריםבדיקת קיום איבריםהסרת איבריםמעבר על איברי קבוצהסיכום – מספרים ייחודייםתרגלו בעצמכם: קומפיילר C++ אונליין