Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

إزالة مهمة

جزء من قسم المنطق وتدفق التنفيذ في رحلة 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 هو الموضع المعتمد على الصفر (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++ عبر الإنترنت