البرمجة

تحليل تكرار الأرقام الثنائية في ملف باستخدام C++ وSTL

في محاولتك لبناء برنامج C++، تقوم بقراءة أرقام من ملف نصي باسم “bac.txt” وترغب في إيجاد الرقم أو الأرقام المكونة من رقمين (10، 11، 12، …، 99) التي تظهر بشكل أكثر تكرارًا. قد تكون مشكلتك في عدم القدرة على طباعة على الشاشة الرقم أو الأرقام التي تظهر بشكل أكثر تكرارًا.

للبداية، يجدر بك فحص الشيفرة التي قمت بتقديمها. في الدالة counter، قمت بتعريف متغيرات v و v1 دون استخدامها في الشيفرة. يجب عليك التحقق مما إذا كانت هذه المتغيرات ضرورية أم لا، وإذا لم يكن كذلك يمكنك الاستغناء عنها.

ثم في دالة main، قمت بحساب الأعداد وتخزينها في مصفوفة v ومن ثم البحث عن القيمة القصوى (maxim). ولكن، لاحظ أنه في حلقة الطباعة لم تقم بطباعة الفراغ بين الأرقام المكررة، يمكنك استخدام cout << " "; بين cout << i; لتحقيق ذلك.

لطيف أيضًا أن تقوم بإضافة رسائل تفيد المستخدم حول ما يحدث في البرنامج. يمكنك إضافة تعليقات (comments) لشرح الشيفرة وجعلها أكثر فهمًا.

أخيرًا، إذا كنت لا تزال تواجه مشكلة في طباعة النتائج على الشاشة، يمكنك محاولة استخدام cout مع endl للانتقال إلى سطر جديد بعد كل عملية طباعة.

cpp
for(i = 10; i < 100; i++) { if(v[i] == maxim) { cout << i << " "; } } cout << endl;

بعد تجربة هذه التحسينات، يجب أن تكون قادرًا على رؤية النتائج المرجوة على الشاشة.

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

في جهودك لبناء برنامج C++، يظهر أنك تقوم بقراءة ملف نصي ("bac.txt") وتقوم بفحص الأرقام المؤلفة من رقمين (10 إلى 99) لمعرفة أيها الرقم أو الأرقام تظهر بشكل أكثر تكرارًا في الملف. لكنني أود أن أقدم لك بعض التوجيهات الإضافية لتحسين برنامجك وجعله أكثر فعالية وفهمًا.

أولاً، يمكنك تحسين فعالية برنامجك من خلال استخدام وظائف مكتبة STL في C++. على سبيل المثال، يمكنك استخدام std::map لتخزين تكرار كل رقم واستخدام std::pair لتخزين الرقم وعدد تكراراته. ذلك سيجعل الشيفرة أكثر وضوحًا ويسهل فهمها.

cpp
#include #include #include int main() { std::ifstream file("bac.txt"); std::map<int, int> frequencyMap; char digit1, digit2; while (file >> digit1 >> digit2) { int number = (digit1 - '0') * 10 + (digit2 - '0'); frequencyMap[number]++; } int maxFrequency = 0; for (const auto& pair : frequencyMap) { if (pair.second > maxFrequency) { maxFrequency = pair.second; } } std::cout << "Most frequent number(s): "; for (const auto& pair : frequencyMap) { if (pair.second == maxFrequency) { std::cout << pair.first << " "; } } std::cout << std::endl; return 0; }

هذا الكود يستخدم std::map لتحقيق العد التكراري لكل رقم، ثم يبحث عن العدد (أو الأعداد في حالة تساوي التكرار) الذي يظهر بشكل أكبر.

بالإضافة إلى ذلك، قم بإضافة تعليقات (comments) لشرح خطوات البرنامج وجعل الشيفرة أكثر قراءة وفهمًا.

مقالات ذات صلة

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

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!