ترجمة آلية تحت المراجعة
الاستبدال
المصدر الأصليقائمة تنفيذ التمرين
تُحفظ علامات هذه القائمة على هذا الجهاز والمتصفح فقط. أنشئ حسابًا مفعّلًا لحفظ إنجاز التمرين في مسارك.
الاستبدال
مشكلة بحاجة إلى حل
في التشفير البديل، نقوم "بتشفير" (i.e.، إخفاء بطريقة عكسية) رسالة عن طريق استبدال كل حرف بحرف آخر. للقيام بذلك، نستخدم مفتاحًا: في هذه الحالة، يجب تعيين كل حرف من الحروف الأبجدية للحرف الذي يجب أن يتوافق معه عندما نقوم بتشفيره. "لفك تشفير" الرسالة، سيحتاج متلقي الرسالة إلى معرفة المفتاح، حتى يتمكن من عكس العملية: ترجمة النص المشفر (يسمى عمومًا النص المشفر) مرة أخرى إلى الرسالة الأصلية (تسمى عمومًا نص عادي).
المفتاح، على سبيل المثال، قد يكون السلسلة NQXPOMAFTRHLZGECYJIUWSKDVB. هذا المفتاح المكون من 26 حرفًا يعني ذلك
يجب تحويل A (الحرف الأول من الأبجدية) إلى N (الحرف الأول من المفتاح)،
يجب تحويل B (الحرف الثاني من الأبجدية) إلى Q (الحرف الثاني للمفتاح)، وهكذا.
رسالة مثل HELLOسيتم تشفيره كـ FOLLE، مع استبدال كل حرف حسب التعيين الذي يحدده المفتاح.
في ملف يسمى substitution.c في مجلد يسمى substitution، قم بإنشاء برنامج يمكّنك من تشفير الرسائل باستخدام تشفير بديل. في الوقت الذي يقوم فيه المستخدم بتنفيذ البرنامج، يجب عليه أن يقرر، من خلال توفير وسيطة سطر الأوامر، ما يجب أن يكون عليه المفتاح في الرسالة السرية التي سيقدمها في وقت التشغيل.
تجريبي
المواصفات
تصميم وتنفيذ برنامج، substitution، الذي يقوم بتشفير الرسائل باستخدام تشفير بديل.
- قم بتنفيذ برنامجك في ملف يسمى
substitution.cفي دليل يسمىsubstitution. - يجب أن يقبل برنامجك وسيطة سطر أوامر واحدة، وهو المفتاح الذي سيتم استخدامه للاستبدال. يجب ألا يكون المفتاح نفسه حساسًا لحالة الأحرف، لذا سواء كان أي حرف في المفتاح كبيرًا أو صغيرًا، فلا يؤثر ذلك على سلوك برنامجك.
- إذا تم تنفيذ برنامجك بدون أي وسيطات سطر أوامر أو باستخدام أكثر من وسيطة سطر أوامر، فيجب أن يقوم برنامجك بطباعة رسالة خطأ من اختيارك (مع
printf) والعودة منmainقيمة1(والذي يميل إلى الإشارة إلى خطأ) على الفور. - إذا كان المفتاح غير صالح (أي أنه لا يحتوي على 26 حرفًا، أو يحتوي على أي حرف ليس حرفًا أبجديًا، أو لا يحتوي على كل حرف مرة واحدة بالضبط)، فيجب أن يقوم برنامجك بطباعة رسالة خطأ من اختيارك (مع
printf) والعودة منmainقيمة1على الفور. - يجب أن يقوم برنامجك بالإخراج
plaintext:(بدون سطر جديد) ثم قم بمطالبة المستخدم بـstringمن النص العادي (باستخدامget_string). - يجب أن يقوم برنامجك بالإخراج
ciphertext:(بدون سطر جديد) متبوعًا بالنص المشفر المقابل للنص العادي، مع استبدال كل حرف أبجدي في النص العادي بالحرف المقابل في النص المشفر؛ يجب أن يتم إخراج الأحرف غير الأبجدية دون تغيير. - يجب أن يحافظ برنامجك على حالة الأحرف: يجب أن تظل الأحرف الكبيرة أحرفًا كبيرة؛ يجب أن تظل الأحرف الصغيرة أحرفًا صغيرة.
- بعد إخراج النص المشفر، يجب عليك طباعة سطر جديد. يجب أن يخرج برنامجك بعد ذلك بالعودة
0منmain.
قد تجد وظيفة واحدة أو أكثر معلنة فيها ctype.h ليكون مفيدًا لكل manual.cs50.io.
الإرشادات التفصيلية
كيفية الاختبار
صحة
check50 cs50/problems/2026/x/substitution
كيفية الاستخدام debug50
أتطلع للتشغيل debug50؟ يمكنك القيام بذلك على النحو التالي، بعد تجميع الشيفرة الخاصة بك بنجاح باستخدام make,
debug50 ./substitution KEY
حيث KEY هو المفتاح الذي تقدمه كوسيطة سطر أوامر لبرنامجك. لاحظ أن تشغيل
debug50 ./substitution
سيؤدي (من الناحية المثالية!) إلى إنهاء برنامجك عن طريق مطالبة المستخدم بمفتاح.
النمط
style50 substitution.c
كيفية الإرسال
في جهازك الطرفي، قم بتنفيذ ما يلي لإرسال عملك، والإجابة على المطالبات التي تظهر أيضًا.
submit50 cs50/problems/2026/x/substitution