# شبه رماز

في علوم الحاسب، يعد الرِّماز المفترض أو شبه الشيفرة أو شبه الرِماز (بالإنجليزية: Pseudocode)‏ وصفًا بلغة بسيطة للخطوات في خوارزمية. غالبًا ما يستخدم السودوكود الهياكل المستخدمة في لغات البرمجة العادية، ولكنه مخصص للقراءة البشرية بدلاً من القراءة الآلية. عادةً ما يتجاهل التفاصيل الضرورية لفهم الآلة للخوارزمية، مثل الإعلان عن المتغيرات والرموز الخاصة بلغات البرمجة. يتم تعزيز لغة البرمجة بتفاصيل وصف اللغة الطبيعية، حيثما كان ذلك مناسبًا، أو باستخدام تدوين رياضي مضغوط. يستخدم السودوكود لسهولة فهمه أكثر من كود لغة البرمجة التقليدية، ولكونه وصف فعال ومستقل عن البيئة للمبادئ الأساسية للخوارزمية. يستخدم السودودكود بشكل شائع في الكتب المدرسية والمنشورات العلمية لتوثيق الخوارزميات وفي تخطيط البرامج والخوارزميات الأخرى.
لا يوجد معيار واسع لبناء جملة السودوكود، لأن البرنامج في السودوكود ليس برنامجًا قابلاً للتنفيذ، ومع ذلك توجد معايير محدودة معينة (مثل التقييم الأكاديمي). السودوكود يشبه البرامج الهيكلية والتي يمكن تجميعها بدون أخطاء. يمكن اعتبار المخططات الانسيابية ومخططات دراكون ومخططات لغة النمذجة الموحدة (UML) بديلاً رسوميًا للسودوكود، ولكنها تحتاج إلى مساحة أكبر على الورق. تعمل لغات مثل HAGGIS على سد الفجوة بين السودوكود والكود المكتوب بلغات البرمجة.

## التطبيق

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

## بناء الجملة

لا يخضع الرمز الكاذب عمومًا لقواعد بناء جمل لغة معينة؛ لا يوجد نموذج قياسي منهجي. يستعير بعض الكتاب الأسلوب والنحو من هياكل التحكم في بعض لغات البرمجة التقليدية، على الرغم من عدم تشجيع ذلك. تتضمن بعض مصادر بناء الجملة فورتران وباسكال وبيسيك وسي وسي ++ وجافا وليسب وألغول. عادة ما يتم حذف الإعلانات عن المتغيرات واستبدال استدعاءات الدوال وكتل الكود، مثل الكود الموجود داخل حلقة، بجملة لغة طبيعية من سطر واحد.
قد يختلف أسلوب كتابة السودوكود على نطاق واسع بناءً على الكاتب، من تقليد شبه دقيق للغة برمجة حقيقية من جهة، إلى وصف يقترب من النثر المنسق من جهة أخرى.
هذا مثال على السودوكود للعبة fizz buzz الرياضية:
| سيدوكود بنمط فورترانprogram fizzbuzz Do i = 1 to 100 set print_number to true If i is divisible by 3 print "Fizz" set print_number to false If i is divisible by 5 print "Buzz" set print_number to false If print_number, print i print a newline end do | سيدوكود بنمط باسكالprogram fizzbuzz Do i = 1 to 100 set print_number to true If i is divisible by 3 print "Fizz" set print_number to false If i is divisible by 5 print "Buzz" set print_number to false If print_number, print i print a newline end do | سيدوكود بنمط سيvoid function fizzbuzz { for (i = 1; i <= 100; i++) { set print_number to true; If i is divisible by 3 { print "Fizz"; set print_number to false; } If i is divisible by 5 { print "Buzz"; set print_number to false; } If print_number, print i; print a newline; } } | السودوكود للنمط الأساسي المنظم:Sub fizzbuzz For i = 1 to 100 print_number = True If i is divisible by 3 Then Print "Fizz" print_number = False End If If i is divisible by 5 Then Print "Buzz" print_number = False End If If print_number = True Then print i Print a newline Next i End Sub |

## النمط الرياضي الكاذب

في الحساب العددي، غالبًا ما يتكون السودوكود من تدوين رياضي، عادةً من نظرية المجموعات والمصفوفات، ممزوجًا بهياكل التحكم في لغة البرمجة التقليدية، وربما أيضًا أوصاف اللغة الطبيعية . هذا التدوين مضغوط وغالبًا ما يكون غير رسمي يمكن فهمه من قبل مجموعة واسعة من الأشخاص المدربين رياضيًا، وغالبًا ما يستخدم كطريقة لوصف الخوارزميات الرياضية. على سبيل المثال ، قد يمثل معامل المجموع (رمزسيجما الكبير) أو معامل الضرب (حرف pi الكبير) دوران وهيكل اختيار في تعبير واحد:
عادةً ما يتم استخدام التنضيد غير ASCII للمعادلات الرياضية، على سبيل المثال عن طريق لغات الترميز، مثل تيكس أو MathML أو محرري الصيغة الاحتكارية.
يشار أحيانًا إلى السودوكود على النمط الرياضي على أنها كود هجين، على سبيل المثال هجين ألغول (أصل المفهوم) وهجين فورتران وهجين بيسك وهجين باسكال وهجين C وهجين ليسب.

### الرموز الرياضية الشائعة

| نوع العملية | رمز | مثال |
| تعيين القيم | ← أو : = | c ← 2π r ، c := 2π r |
| المقارنة | = ، ≠ ، <،> ، ≤ ، ≥ | |
| العمليات الحسابية | +, −, ×, /, mod | |
| التقريب | ⌊ ، ⌋ ، ⌈ ، | a ← ⌊ b ⌋ + ⌈ c ⌉ |
| العمليات المنطقية | and, or | |
| المجموع والضرب | Σ Π | h ← Σ $_{a∈A}$ 1/ a |

### مثال

فيما يلي مثال أطول على السودوكود ذات النمط الرياضي لخوارزمية فورد وفولكرسون:

## التجميع الآلي للغات المكتوبة بأسلوب السودوكود
### قواعد اللغة الطبيعية في لغات البرمجة

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

### لغات البرمجة الرياضية

إن أحد البدائل لاستخدام السودوكود الرياضي (الذي يتضمن تدوين نظرية المجموعة أو عمليات المصفوفات) لتوثيق الخوارزميات هو استخدام لغة برمجة رياضية رسمية وهي عبارة عن مزيج من الرموز الرياضية غير ASCII وهياكل التحكم في البرنامج. ثم يمكن تحليل الشفرة وتفسيرها بواسطة آلة.
تتضمن العديد من لغات المواصفات الرسمية تدوين نظرية المجموعات باستخدام أحرف خاصة. من الأمثلة:
* تدوين Z
* لغة مواصفات أسلوب التنمية في فيينا (VDM-SL).
تتضمن بعض لغات برمجة المصفوفات التعبيرات الموجهة وعمليات المصفوفات كصيغ غير ASCII مختلطة بهياكل التحكم التقليدية. من الأمثلة:
* لغة برمجة إيه بي إل (APL) ولهجاتها APLX و أ+
* ماثكاد (MathCAD)