الشفرة الزائفة

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

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

طلب

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

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

بناء الجملة

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

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

تُتيح هذه المرونة مزايا وعيوبًا كبيرة: فمن ناحية المزايا، لا توجد لغة برمجة قابلة للتنفيذ "تُضاهي سهولة ابتكار بنيات جديدة حسب الحاجة، وترك القارئ يحاول استنتاج معناها من خلال شروحات غير رسمية"، ومن ناحية العيوب، "عادةً ما يكون الكود غير المختبر غير صحيح". [ 7 ]

مثال على الشفرة الزائفة (للعبة الرياضية fizz buzz )

أسلوب باسكال:

الإجراء fizzbuzz ؛ من أجل i := 1 إلى 100 ، اطبع_الرقم : = صحيح ؛ إذا كان i يقبل القسمة على 3 ، فابدأ بطباعة " Fizz " ؛ اطبع_الرقم : = خطأ ؛ نهاية ؛ إذا كان i يقبل القسمة على 5 ، فابدأ بطباعة " Buzz " ؛ اطبع_الرقم := خطأ ؛ نهاية ؛ إذا كان طباعة_الرقم صحيحًا ، اطبع i ؛ اطبع سطرًا جديدًا ؛ نهاية

نمط C:

fizzbuzz () { for ( i = 1 ; i <= 100 ; i ++ ) { print_number = true ; if ( i is divisible by 3 ) { print "Fizz" ; print_number = false ; } if ( i is divisible by 5 ) { print "Buzz" ; print_number = false ; } if ( print_number ) print i ; print a newline ; } }

أسلوب بايثون:

دالة fizzbuzz (): for i in range ( 1 , 101 ): print_number = true if i is divisible by 3 : print "Fizz" print_number = false if i divisible by 5 : print " Buzz" print_number = false if print_number : print i print سطر جديد

الشفرة الزائفة ذات الطابع الرياضي

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

يعودكSxك{\displaystyle \sum _{k\in S}x_{k}}

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

يُشار أحيانًا إلى الشفرة الزائفة ذات الطابع الرياضي باسم شفرة البيدجين ، على سبيل المثال لغة البيدجين ALGOL (أصل المفهوم)، ولغة البيدجين Fortran ، ولغة البيدجين BASIC ، ولغة البيدجين Pascal ، ولغة البيدجين C ، ولغة البيدجين Lisp .

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

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

مثال

فيما يلي مثال أطول لرمز زائف ذي طابع رياضي، خاص بخوارزمية فورد-فولكرسون :

خوارزمية فورد-فولكرسون هي المدخلات: الرسم البياني G بسعة تدفق c ، عقدة المصدر s ، مخرج عقدة المصب t : التدفق f بحيث يكون f أقصى قيمة له من s إلى t(لاحظ أن f (u,v) هو التدفق من العقدة u إلى العقدة v، و c (u,v) هي سعة التدفق من العقدة u إلى العقدة v)لكل حافة ( u , v ) في G ∈  اجعل f ( u , v ) ← 0، و f ( v , u ) ← ​​0. طالما يوجد مسار p من s إلى t في الشبكة المتبقية G  ليكن c f سعة التدفق للشبكة المتبقية G  c f ( p ) ← min{ c f ( u , v ) | ( u , v ) in p } لكل حافة ( u , v ) في p ، f ( u , v )f ( u , v ) + c f ( p ) f ( v , u ) ← − f ( u , v )إرجاع f

الترجمة الآلية للغات ذات نمط الشفرة الزائفة

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

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

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

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

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

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

انظر أيضاً

مراجع

  1. Reisig 2007 ، ص. 23، برامج الشفرة الزائفة ودلالاتها.
  2. التعريف المتكرر للرمز الزائف منذ عام 2003 على الأقل هو "وصف مفصل ولكنه قابل للقراءة لما يجب أن يفعله برنامج الكمبيوتر أو الخوارزمية، معبر عنه بلغة طبيعية ذات أسلوب رسمي".
  3. أولاتي-كاباليرو، برايان ألكسندر؛ بيروكال-روخاس، آلان؛ هيدالغو-سيسبيس، جيسون (2021). "الرمز الزائف المتزامن والموزع: مراجعة منهجية للأدبيات". المؤتمر السابع والأربعون للحوسبة في أمريكا اللاتينية (CLEI) لعام 2021. الصفحات 1-10 . doi : 10.1109/CLEI53233.2021.9640222 . ISBN  978-1-6654-9503-5.
  4. ميتشل وآخرون 1996 ، ص 105.
  5. ماكونيل، ستيف (2004). كود كومبليت . بيرسون إديوكيشن. ص 54. ISBN  978-0-7356-1967-8تجنب العناصر النحوية من لغة البرمجة المستهدفة
  6. كتاب "مدخل إلى علوم الحاسوب"، الطبعة الثامنة، من تأليف شنايدر/ غيرستينغ ، "اجعل العبارات مستقلة عن اللغة" كما ورد في هذا السؤال على موقع ستاك إكستشينج
  7. لامبورت، ليزلي (2 يناير 2009). "لغة خوارزمية بلس كال" (ملف PDF) . مايكروسوفت للأبحاث . تم الاطلاع عليه بتاريخ 28 مايو 2024 .

للمزيد من القراءة

  • زوبل، جاستن (2013). "الخوارزميات". الكتابة لعلوم الحاسوب (  الطبعة الثانية). سبرينغر. ISBN 978-1-85233-802-2.
  • روي، جيفري ج. (2006). "تصميم البرامج وشرحها باستخدام الشفرة الزائفة الأدبية". مجلة الموارد التعليمية في الحوسبة ، 6 (1). رابطة آلات الحوسبة (ACM): 1. doi : 10.1145/1217862.1217863 . ISSN 1531-4278 . S2CID 25810599 .  
  • أولاتي-كاباليرو، برايان ألكسندر؛ بيروكال-روخاس، آلان؛ هيدالغو-سيسبيس، جيسون (25-10-2021). "الرمز الزائف المتزامن والموزع: مراجعة منهجية للأدبيات". المؤتمر السابع والأربعون للحوسبة في أمريكا اللاتينية (CLEI) لعام 2021. معهد مهندسي الكهرباء والإلكترونيات (IEEE). الصفحات 1-10 . doi : 10.1109/clei53233.2021.9640222 . ISBN  978-1-6654-9503-5.
  • ريسيج، وولفغانغ (2007). "آلات الحالة المجردة للفصول الدراسية" . منطق لغات المواصفات . دراسات في علوم الحاسوب النظرية. سلسلة EATCS. ​​سبرينغر برلين هايدلبرغ. ص 15-46 . ISBN  978-3-540-74107-7تم الاطلاع عليه بتاريخ 2023-10-05 .
  • ميتشل، جوان ل.؛ بينيباكر، ويليام ب.؛ فوج، تشاد إي.؛ ليغال، ديدييه ج. (1996). "الرمز الزائف ومخططات التدفق". معيار ضغط فيديو MPEG . نيويورك، نيويورك: سبرينغر الولايات المتحدة. ص 105-116 . doi : 10.1007/0-306-46983-9_6 . ISBN  978-0-412-08771-4.
  • بيلامي، راشيل (1994-06-01). "ما وظيفة الشفرة الزائفة؟ تحليل نفسي لاستخدام الشفرة الزائفة من قبل المبرمجين ذوي الخبرة". تفاعل الإنسان مع الحاسوب . 9 (2). إنفورما المملكة المتحدة المحدودة: 225-246 . doi : 10.1207/s15327051hci0902_3 . ISSN 0737-0024 .