البرمجة

تشفير الحروف باستخدام مفاتيح متغيرة

في البداية، دعنا نلقي نظرة على الشيفرة التي قدمتها. الدالة main تحتوي على حلقة تكرارية for تقوم بتكرار عملية التشفير لكلمات المرور المخزنة في مصفوفة password. داخل كل تكرار، يتم استدعاء الدالة keyshanc لتوليد مفاتيح التشفير باستخدام كلمة المرور الحالية.

ثم يُطلب من المستخدم إدخال الحروف التي يرغب في اختبار تشفيرها، وعندما يقوم المستخدم بإدخال الحرف #، ينتهي البرنامج. ومع ذلك، هنا يبدو أن هناك مشكلة في التعامل مع الحلقة التي تقوم بالتشفير. الحلقة الداخلية while تبدو وكأنها تعاني من عدم القدرة على الخروج بشكل صحيح عند إدخال الحرف #.

لحل هذه المشكلة، يمكنك استخدام بيانة break للخروج من الحلقة عندما يتم إدخال الحرف #. ولضمان عملية الخروج بشكل صحيح، يجب وضع بيانة break في كلا الحلقتين for و while للتأكد من أن البرنامج يخرج بشكل صحيح من كلتا الحلقتين.

لنقم بتعديل الشيفرة على النحو التالي:

cpp
int main() { string password[]={"JaneAusten","MarkTwain","CharlesDickens","ArthurConanDoyle"}; for(int i=0;i<4;++i) { char keys[95]; keyshanc(keys, password[i]); char inputChar, trueChar=NULL; cout << "Enter characters to test the encoding; enter # to quit:\n"; cin>>inputChar; for (int x=0; x < 95; ++x) { if (keys[x] == inputChar) { trueChar = char(x+32); break; } } while (inputChar != '#') { cout<>inputChar; if (inputChar == '#') // إضافة هذا الشرط للخروج من الحلقة { break; // استخدام بيانة break للخروج من الحلقة } for (int x=0; x < 95; ++x) { if (keys[x] == inputChar) { trueChar = char(x+32); break; } } } } // نقل العودة (return) إلى خارج الحلقة for return 0; }

بهذه الطريقة، سيتم الخروج بشكل صحيح من الحلقة while عند إدخال الحرف # وسيتم تكرار العملية لكلمات المرور الأربعة التي تم تخزينها في المصفوفة password.

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

بالطبع، دعنا نواصل استكشاف هذا الموضوع بمزيد من التفاصيل والتحليل.

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

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

هذا هو التعديل المقترح لتحسين الشيفرة:

cpp
#include #include using namespace std; // Assume keyshanc function is defined elsewhere // Function to encrypt a character based on the provided key char encryptChar(char inputChar, char keys[]) { for (int x = 0; x < 95; ++x) { if (keys[x] == inputChar) { return char(x + 32); // Assuming the offset is constant } } // If the character is not found in the keys array, return it unchanged return inputChar; } int main() { string password[] = {"JaneAusten", "MarkTwain", "CharlesDickens", "ArthurConanDoyle"}; for (int i = 0; i < 4; ++i) { char keys[95]; keyshanc(keys, password[i]); char inputChar; cout << "Enter characters to test the encoding; enter # to quit:\n"; cin >> inputChar; while (inputChar != '#') { cout << encryptChar(inputChar, keys); cin >> inputChar; } } return 0; }

من خلال هذا التعديل، تم إضافة دالة encryptChar التي تأخذ الحرف الذي يقوم المستخدم بإدخاله وتشفيره مباشرة باستخدام مفاتيح التشفير المولدة. هذا يجعل الشيفرة أكثر فعالية وسهولة في الفهم، حيث لا داعي لاستخدام متغيرات إضافية لتخزين الحرف المشفر مؤقتًا.

بهذه الطريقة، يمكن للبرنامج التعامل بشكل أكثر فعالية مع مدخلات المستخدم وتشفيرها بشكل صحيح باستخدام مفاتيح مختلفة تم اختيارها من مصفوفة كلمات المرور.

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

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

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر