في علوم الحاسب، يعد **الرِّماز المفترض** أو **شبه الشيفرة** أو **شبه الرِماز** (بالإنجليزية: 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 الكبير) دوران وهيكل اختيار في تعبير واحد:

```
Return {\displaystyle \sum \_{k\in S}x\_{k}}
```

عادةً ما يتم استخدام التنضيد غير ASCII للمعادلات الرياضية، على سبيل المثال عن طريق لغات الترميز، مثل تيكس أو MathML أو محرري الصيغة الاحتكارية.

يشار أحيانًا إلى السودوكود على النمط الرياضي على أنها كود هجين، على سبيل المثال *هجين ألغول* (أصل المفهوم) وهجين *فورتران* وهجين *بيسك* وهجين *باسكال* وهجين *C* وهجين *ليسب*.

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

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

### مثال

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

```
**algorithm** ford-fulkerson **is**
    **input:** Graph *G* with flow capacity *c*, 
           source node *s*, 
           sink node *t*
    **output:** Flow *f* such that *f* is maximal from *s* to *t*

    *(Note that f(u,v) is the flow from node u to node v, and c(u,v) is the flow capacity from node u to node v)*

    **for each** edge (*u*, *v*) **in** *GE* **do**
        *f*(*u*, *v*) ← 0
        *f*(*v*, *u*) ← 0

    **while** there exists a path *p* from *s* to *t* **in** the residual network *Gf* **do**
        let *cf* be the flow capacity of the residual network *Gf*
        *cf*(*p*) ← min{*cf*(*u*, *v*) | (*u*, *v*) **in** *p*}
        **for each** edge (*u*, *v*) **in** *p* **do**
            *f*(*u*, *v*) ←  *f*(*u*, *v*) + *cf*(*p*)
            *f*(*v*, *u*) ← −*f*(*u*, *v*)

    **return** *f*
```

التجميع الآلي للغات المكتوبة بأسلوب السودوكود
---------------------------------------------

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

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

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

إن أحد البدائل لاستخدام السودوكود الرياضي (الذي يتضمن تدوين نظرية المجموعة أو عمليات المصفوفات) لتوثيق الخوارزميات هو استخدام لغة برمجة رياضية رسمية وهي عبارة عن مزيج من الرموز الرياضية غير ASCII وهياكل التحكم في البرنامج. ثم يمكن تحليل الشفرة وتفسيرها بواسطة آلة.

تتضمن العديد من لغات المواصفات الرسمية تدوين نظرية المجموعات باستخدام أحرف خاصة. من الأمثلة:

* تدوين Z
* لغة مواصفات أسلوب التنمية في فيينا (VDM-SL).

تتضمن بعض لغات برمجة المصفوفات التعبيرات الموجهة وعمليات المصفوفات كصيغ غير ASCII مختلطة بهياكل التحكم التقليدية. من الأمثلة:

* لغة برمجة إيه بي إل (APL) ولهجاتها APLX و أ+
* ماثكاد (MathCAD)

انظر أيضًا
----------

* برمجة المفاهيم
* مخطط دراكون
* خارطة الانسياب
* البرمجة المتعلمة
* لغة تصميم البرنامج
* الكود القصير
* اللغة الإنجليزية المنظمة

مراجع
-----

1. ↑  *معجم المصطلحات المعلوماتية* (بالعربية والإنجليزية)، دمشق: الجمعية العلمية السورية للمعلوماتية، 2000، ص. 432، OCLC:47938198، QID:Q108408025
2. ↑  أحمد شفيق الخطيب (2018). *معجم المصطلحات العلمية والفنية والهندسية الجديد* (بالعربية والإنجليزية) (ط. 1). بيروت: مكتبة لبنان ناشرون. ص. 623. ISBN:978-9953-33-197-3. OCLC:1043304467. OL:19871709M. QID:Q12244028.
3. ↑  تيسير الكيلاني؛ مازن الكيلاني (2001). *معجم الكيلاني لمصطلحات الحاسب الإلكتروني: إنجليزي-إنجليزي-عربي موضح بالرسوم* (بالعربية والإنجليزية) (ط. 2). بيروت: مكتبة لبنان ناشرون. ص. 449. ISBN:978-9953-10-302-0. OCLC:473796723. QID:Q108807042.
4. ↑  موفق دعبول؛ مروان البواب؛ نزار الحافظ؛ نوار العوا (2017)، *قائمة مصطلحات المعلوماتية* (بالعربية والإنجليزية)، دمشق: مجمع اللغة العربية بدمشق، ص. 196، QID:Q112244705
5. ↑  نزار الحافظ (2007)، *مسرد مصطلحات المعلوماتية* (بالعربية والإنجليزية)، الجمعية العلمية السورية للمعلوماتية، ص. 64، QID:Q108442159
6. ↑  McConnell، Steve (2004). *Code Complete*. ص. 54. ISBN:978-0-7356-1967-8. Avoid syntactic elements from the target programming language
7. ↑  Invitation to Computer Science, 8th Edition by Schneider/Gersting, "Keep statements language independent" as quoted at

قراءة متعمقة
------------

* Zobel، Justin (2013). "Algorithms". *Writing for Computer Science* (ط. Second). Springer. ISBN:978-1-85233-802-2.

روابط خارجية
------------

* معيار السودوكود
* الخوارزميات المجمعة من جمعية آلات الحوسبة
* إرشادات سودوكود ، ملف PDF.

* أيقونة بوابةبوابة برمجة الحاسوب
* أيقونة بوابةبوابة رياضيات
* أيقونة بوابةبوابة علم الحاسوب

|  |  |
| --- | --- |
| ضبط استنادي: وطنية عدلها في ويكي بيانات | 
* المكتبة القومية الإسرائيلية (J9U)
* مكتبة الكونغرس (LCNAF)

 |