تمرين من المصدر الأصلي · تطبيق عملي

الاستبدال

استخدم الشرح العربي للفهم، واعتمد صفحة CS50 الأصلية مرجعًا نهائيًا للمواصفات والتسليم.

جلسة دراسة مقترحة: حتى 60 دقيقةالجهد الكلي التقريبي: 120 دقيقة · أكمل من حيث توقفت لاحقًا.Week 2
محاور هذه الخطوة
  • المصفوفات
  • السلاسل النصية
  • سطر الأوامر
  • النطاق

ترجمة آلية تحت المراجعة

الاستبدال

المصدر الأصلي

قائمة تنفيذ التمرين

تُحفظ علامات هذه القائمة على هذا الجهاز والمتصفح فقط. أنشئ حسابًا مفعّلًا لحفظ إنجاز التمرين في مسارك.

الاستبدال

مشكلة بحاجة إلى حل

في التشفير البديل، نقوم "بتشفير" (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.

الإرشادات التفصيلية

محتوى خارجي من YouTube

لن نتصل بهذه الخدمة قبل موافقتك. يمكنك فتح المصدر في نافذة مستقلة بدل تحميله هنا.

فتح المصدر

كيفية الاختبار

صحة

check50 cs50/problems/2026/x/substitution
كيفية الاستخدام debug50

أتطلع للتشغيل debug50؟ يمكنك القيام بذلك على النحو التالي، بعد تجميع الشيفرة الخاصة بك بنجاح باستخدام make,

debug50 ./substitution KEY

حيث KEY هو المفتاح الذي تقدمه كوسيطة سطر أوامر لبرنامجك. لاحظ أن تشغيل

debug50 ./substitution

سيؤدي (من الناحية المثالية!) إلى إنهاء برنامجك عن طريق مطالبة المستخدم بمفتاح.

النمط

style50 substitution.c

كيفية الإرسال

في جهازك الطرفي، قم بتنفيذ ما يلي لإرسال عملك، والإجابة على المطالبات التي تظهر أيضًا.

submit50 cs50/problems/2026/x/substitution

أنهيت التطبيق؟

راجع عناصر التنفيذ أعلاه، ثم احفظ إنجازك وانتقل إلى التمرين التالي.

حفظ إنجاز التمرين

يمكنك قراءة الدورة كاملة دون حساب. يصبح حفظ التقدم متاحًا بعد تفعيل الحساب، ويبقى محفوظًا بعد انتهاء العضوية.

العودة إلى جميع التمارين