Menu
Coddy logo textTech

הסרת משימה

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 21 מתוך 56.

challenge icon

אתגר

קל

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

הקלטים הבאים יסופקו:

  • מספר שלם n שמייצג את מספר המשימות שיש להוסיף בתחילה
  • לאחר מכן n מחרוזות שמייצגות את תיאורי המשימות
  • מספר שלם taskNumber שמייצג את מספר המשימה להסרה (אינדקס שמתחיל ב־1)

על התוכנית שלך:

  1. להתחיל באותה הגדרה מהשיעור הקודם (‏std::vector<std::string> ריק בשם tasks והודעת פתיחה)
  2. לקרוא את מספר המשימות באמצעות cin >> n, ואז לקרוא ל־cin.ignore() כדי להשליך את תו ירידת השורה שנותר לפני קריאת מחרוזות המשימות באמצעות getline()
  3. להוסיף כל תיאור משימה למערך באמצעות push_back()
  4. לקרוא את מספר המשימה להסרה
  5. לוודא שמספר המשימה נמצא בטווח התקין (1 עד גודל המערך)
  6. אם מספר המשימה אינו תקין, להדפיס הודעת שגיאה
  7. אם מספר המשימה תקין, להשתמש בשיטה .erase() כדי להסיר את המשימה במיקום שצוין
  8. להדפיס הודעת אישור שמציינת איזו משימה הוסרה
  9. להציג את המשימות שנותרו ברשימה ממוספרת
  10. להציג את המספר המעודכן של המשימות

חשוב: שילוב של cin ו־getline():
כשקוראים מספר שלם באמצעות cin >> n, נשאר תו ירידת שורה ('\n') במאגר הקלט. אם קוראים לאחר מכן ל־getline(), היא תקרא מיד את תו ירידת השורה שנותר כמחרוזת ריקה, במקום את הקלט בפועל. כדי לפתור זאת, יש לקרוא ל־cin.ignore() מיד אחרי cin >> n כדי להשליך את תו ירידת השורה שנותר:

cin >> n;
cin.ignore(); // discard the leftover newline
for (int i = 0; i < n; i++) {
    string task;
    getline(cin, task); // now reads correctly
    tasks.push_back(task);
}

השתמש בפורמט הפלט המדויק הבא:

עבור מספר משימה לא תקין:

Welcome to Task List Tool!

Menu Options:
1. Add Task
2. View Tasks
3. Quit

Task list system initialized and ready!
Error: Invalid task number. Please enter a number between 1 and [total tasks].

עבור הסרת משימה תקינה:

Welcome to Task List Tool!

Menu Options:
1. Add Task
2. View Tasks
3. Quit

Task list system initialized and ready!
Task "[removed task description]" removed successfully!
Remaining Tasks:
1. [first remaining task]
2. [second remaining task]
...
Total tasks: [updated number of tasks]

זכור ש־.erase() דורשת איטרטור, לכן יש להשתמש ב־tasks.erase(tasks.begin() + index), כאשר index הוא המיקום שמתחיל ב־0 (‏taskNumber - 1). אמת את הקלט על ידי בדיקה אם taskNumber גדול מ־0 וקטן או שווה ל־tasks.size(). אם הרשימה מתרוקנת לאחר ההסרה, הדפס את "No tasks remaining." במקום רשימת המשימות שנותרו.

נסו בעצמכם

#include <iostream>
#include <vector>
#include <string>

int main() {
    std::vector<std::string> tasks;
    
    std::cout << "Welcome to Task List Tool!" << std::endl;
    std::cout << std::endl;
    std::cout << "Menu Options:" << std::endl;
    std::cout << "1. Add Task" << std::endl;
    std::cout << "2. View Tasks" << std::endl;
    std::cout << "3. Quit" << std::endl;
    std::cout << std::endl;
    std::cout << "Task list system initialized and ready!" << std::endl;
    
    int n;
    std::cin >> n;
    
    for (int i = 0; i < n; i++) {
        std::string task;
        std::cin >> task;
        tasks.push_back(task);
    }
    
    if (tasks.empty()) {
        std::cout << "No tasks available." << std::endl;
    } else {
        std::cout << "Your Tasks:" << std::endl;
        for (int i = 0; i < tasks.size(); i++) {
            std::cout << (i + 1) << ". " << tasks[i] << std::endl;
        }
        std::cout << "Total tasks: " << tasks.size() << std::endl;
    }
    
    return 0;
}

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

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