في هذا السياق، يظهر أن لديك تحديًا في إدارة ملف يحتوي على بيانات تحتاج إلى ترتيبها وكتابتها مرة أخرى بناءً على أعلى درجة. للتغلب على هذا التحدي، يمكنك استخدام لغة البرمجة 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
لفرز البيانات بناءً على الدرجات بترتيب تنازلي. أخيرًا، قمنا بكتابة البيانات المرتبة إلى نفس الملف.
هذا يضمن لك تحقيق هدفك بفعالية، سواء كانت البيانات قليلة أو كبيرة.
المزيد من المعلومات
بالتأكيد، سأقدم لك المزيد من المعلومات حول الكود والطريقة التي تم بها حل التحدي.
-
قراءة البيانات:
في الكود، تم استخدامstd::ifstream
لفتح ملف للقراءة، ثم قراءة البيانات النصية باستخدام>>
. الأسماء تُقرأ إلى المتغيرname
، والدرجات إلى المتغيرscore
. هذه البيانات ثم تُحفظ فيstd::vector
من نوعScorePair
، الذي يحتوي على الاسم والدرجة. -
فرز البيانات:
تم استخدامstd::sort
لفرز البيانات. تم استخدام وظيفة lambda كوظيفة مقارنة لتحديد ترتيب العناصر. في هذه الحالة، يتم فرز العناصر بناءً على الدرجات بترتيب تنازلي باستخدامa.second > b.second
. -
كتابة البيانات:
بعد فرز البيانات، يتم فتح الملف مرة أخرى باستخدامstd::ofstream
للكتابة. ثم يتم استخدام حلقةfor
للانتقال عبر العناصر المفروزة وكتابتها إلى الملف بتنسيق المطلوب. -
إغلاق الملفات:
في كل مرة يتم فتح ملف (سواء للقراءة أو الكتابة)، يتم ضرورة إغلاقه بعد الانتهاء من استخدامه. يتم ذلك باستخدامclose()
. -
مقدمة للوظائف:
يتم استخدام وظيفةmain()
لاستدعاء الوظيفة الرئيسيةreadAndSort()
التي تقوم بتنفيذ جميع الخطوات اللازمة.
هذه الخطوات تضمن قراءة البيانات، فرزها، وكتابتها مرة أخرى في الملف بالترتيب المطلوب، وذلك باستخدام أفضل الممارسات في لغة البرمجة C++.