شبه رماز

يرجى مراجعة هذه المقالة وإزالة وسم المقالات غير المراجعة، ووسمها بوسوم الصيانة المناسبة.
من ويكيبيديا، الموسوعة الحرة
(بالتحويل من سودوكود)

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

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

التطبيق[عدل]

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

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

بناء الجملة[عدل]

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

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

هذا مثال على السودوكود للعبة 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 

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

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

الرموز الرياضية الشائعة[عدل]

نوع العملية رمز مثال
تعيين القيم ← أو : = c ← 2π r ، c := 2π r
المقارنة = ، ≠ ، <،> ، ≤ ، ≥
العمليات الحسابية +, −, ×, /, mod
التقريب ⌊ ، ⌋ ، ⌈ ، a ← ⌊ b ⌋ + ⌈ c
العمليات المنطقية and, or
المجموع والضرب Σ Π h ← Σ aA 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 مختلطة بهياكل التحكم التقليدية. من الأمثلة:

انظر أيضًا[عدل]

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

مراجع[عدل]

  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

قراءة متعمقة[عدل]

روابط خارجية[عدل]