البرمجة

فرز وكتابة بيانات الملف بلغة C++

في هذا السياق، يظهر أن لديك تحديًا في إدارة ملف يحتوي على بيانات تحتاج إلى ترتيبها وكتابتها مرة أخرى بناءً على أعلى درجة. للتغلب على هذا التحدي، يمكنك استخدام لغة البرمجة C++ بشكل فعّال. سأقوم بتقديم إرشادات شاملة حول كيفية تحقيق ذلك.

أولاً وقبل كل شيء، يجب عليك استخدام هيكل بيانات مناسب لتخزين الأسماء والدرجات. يمكنك استخدام هيكل pair لذلك، حيث يكون الاسم في الجزء الأول والدرجة في الجزء الثاني. سنقوم بتعريف نوع البيانات باستخدام typedef لتسهيل الاستخدام فيما بعد.

cpp
#include #include #include #include typedef std::pairint> ScorePair; void readAndSort() { std::vector scores; std::string name; int score; std::ifstream inputFile("Scores.txt"); while (inputFile >> name >> score) { scores.push_back({name, score}); } inputFile.close(); // الآن سنقوم بفرز البيانات بناءً على الدرجة بترتيب تنازلي std::sort(scores.begin(), scores.end(), [](const ScorePair &a, const ScorePair &b) { return a.second > b.second; }); // الآن سنقوم بكتابة البيانات المرتبة إلى نفس الملف std::ofstream outputFile("Scores.txt"); for (const auto &pair : scores) { outputFile << pair.first << " " << pair.second << "\n"; } outputFile.close(); } int main() { readAndSort(); return 0; }

في هذا الكود، قمنا بتعريف هيكل البيانات ScorePair واستخدمنا std::vector لتخزين الأسماء والدرجات. ثم، استخدمنا std::sort لفرز البيانات بناءً على الدرجات بترتيب تنازلي. أخيرًا، قمنا بكتابة البيانات المرتبة إلى نفس الملف.

هذا يضمن لك تحقيق هدفك بفعالية، سواء كانت البيانات قليلة أو كبيرة.

المزيد من المعلومات

بالتأكيد، سأقدم لك المزيد من المعلومات حول الكود والطريقة التي تم بها حل التحدي.

  1. قراءة البيانات:
    في الكود، تم استخدام std::ifstream لفتح ملف للقراءة، ثم قراءة البيانات النصية باستخدام >>. الأسماء تُقرأ إلى المتغير name، والدرجات إلى المتغير score. هذه البيانات ثم تُحفظ في std::vector من نوع ScorePair، الذي يحتوي على الاسم والدرجة.

  2. فرز البيانات:
    تم استخدام std::sort لفرز البيانات. تم استخدام وظيفة lambda كوظيفة مقارنة لتحديد ترتيب العناصر. في هذه الحالة، يتم فرز العناصر بناءً على الدرجات بترتيب تنازلي باستخدام a.second > b.second.

  3. كتابة البيانات:
    بعد فرز البيانات، يتم فتح الملف مرة أخرى باستخدام std::ofstream للكتابة. ثم يتم استخدام حلقة for للانتقال عبر العناصر المفروزة وكتابتها إلى الملف بتنسيق المطلوب.

  4. إغلاق الملفات:
    في كل مرة يتم فتح ملف (سواء للقراءة أو الكتابة)، يتم ضرورة إغلاقه بعد الانتهاء من استخدامه. يتم ذلك باستخدام close().

  5. مقدمة للوظائف:
    يتم استخدام وظيفة main() لاستدعاء الوظيفة الرئيسية readAndSort() التي تقوم بتنفيذ جميع الخطوات اللازمة.

هذه الخطوات تضمن قراءة البيانات، فرزها، وكتابتها مرة أخرى في الملف بالترتيب المطلوب، وذلك باستخدام أفضل الممارسات في لغة البرمجة C++.

زر الذهاب إلى الأعلى