الخوارزميات، البرمجة، المترجمات
مُقدَّم| English | المعنى |
|---|---|
| algorithm/ˈælɡərɪθəm/ | خوارزمية |
| high-level language/haɪ ˈlevl ˈlæŋɡwɪdʒ/ | لغة عالية المستوى |
| compiler/kəmˈpaɪlə/ | مُترجم |
| syntax error/ˈsɪntæks ˈerə/ | خطأ في الصياغة |
| logic error/ˈlɒdʒɪk ˈerə/ | خطأ منطقي |
يمكن أن يبيع البناء النظيف سعرًا خاطئًا
- يهدف برنامج متجر إلى تطبيق خصم بنسبة 10٪ على سعر قدره 100، لكنه يحسب السعر * 10 / 100 كمبلغ للدفع.
- يقوم بحساب مبلغ الخصم 10، بدلاً من السعر بعد الخصم 90. يمكن للرمز أن يُجمّع ويُنفذ بينما يطبق صيغة خاطئة.
ما هو الخوارزمية؟
- الخوارزمية هي مجموعة نهائية ومرتبة من الخطوات تحل مشكلة ما. الوصفة هي خوارزمية: خطوات دقيقة، مرتبة، تنتهي بوضع محدد.
- البرمجة هي فن تحويل الخوارزمية إلى كود ينفذه الحاسوب. بالنسبة للخوارزميات المنتهية الموضحة هنا، يجب أن يؤدي كل إدخال صالح إلى نتيجة بعد عدد محدود من الخطوات. قد يعمل البرنامج أيضًا كخدمة مستمرة؛ فليس كل برنامج هو عملية حسابية منتهية.
لغات البرمجة
- الحواسيب تُنفذ كود الآلة (متغيرات 0 و1 الخام) — وهو صعب الكتابة للبشر. نكتب بلغة عالية المستوى مثل Java: سهلة القراءة وتشبه الإنجليزية.
- كود Java يقول ماذا نفعل؛ والمترجم يحوله إلى تعليمات آلية. يعلّم هذا المقرر حل المشكلات من خلال Java.
المُترجمات (Compilers)
- المُجمِّع مثل javac يترجم ملفات المصدر من Java إلى ملفات فئة ويحقق من القواعد والأنواع والأسماء. يجمع Java إلى كود بايت، الذي يُنفذ بدوره آلة جافا الافتراضية (JVM).
- "اكتب مرة واحدة، شغّل في أي مكان": يمكن تشغيل ملفات الفئة على منصات مختلفة مع آلة افتراضية متوافقة والمكتبات المطلوبة؛ تحتاج إصدارات ملفات الفئة الأحدث إلى وقت تشغيل يدعمها. تختلف أخطاء التجميع (المكتشفة قبل التشغيل) عن أوقات التشغيل (المكتشفة أثناء التنفيذ).
يمكن وصف الخوارزمية بشكل أفضل بأنها...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
خطوات محدودة ومرتبّة تنتهي — هذه هي الخوارزمية.
مترجم جافا يحوّل كودك المصدري إلى...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
جافا تقوم بترجمة الكود إلى رمز بايت، والذي تنفذه JVM.
برنامج يتم ترجمته وتشغيله لكنه يعطي إجابة خاطئة يحتوي على...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
نتيجة خاطئة رغم ترجمة نظيفة = خطأ في المنطق.
خطأ في القواعد يمنع ترجمة برنامج جافا.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
قواعد مكسورة → يرفض المترجم البناء.
إذا تم ترجمة برنامج بدون أخطاء، فهو مضمون أنه صحيح.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
يفحص المترجم القواعد والنوع والسميات، لكنه لا يحدد القاعدة التجارية المقصودة أو الإخراج الصحيح.
ينتهي تنفيذ البرنامج حتماً عند حدوث أي استثناء وقت التشغيل، حتى لو تم التقاطه بواسطة كود معالجة الاستثناءات المطابق له.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
قد يتم التقاط بعض الاستثناءات ومعالجتها؛ أما تلك التي لم تُلتقط فقد توقف التنفيذ.
أي عملية تثير ArithmeticException لمتغير int قيمته 0؟
Difficulty 1/5 · 100 coins + a small bonus on first completion today
القسمة الصحيحة على صفر تثير خطأ؛ بينما للقسمة العشرية (double) على صفر نتائج مطابقة لنموذج IEEE.
أنواع الأخطاء
- خطأ نحو يكسر قواعد Java — يرفض المُجمِّع البناء. خطأ وقت التشغيل يحدث أثناء التنفيذ؛ وقد ينهي الاستثناء غير المعالج البرنامج. قسمة أعداد صحيحة على متغير صفري تثير ArithmeticException، بينما تتبع قسمة الأعداد العشرية قواعد مختلفة.
- خطأ منطقي يعمل بشكل صحيح لكن يعطي إجابة خاطئة. تصحيح الأخطاء هو إيجاد وإصلاح الثلاثة أنواع.
من الكود المصدري إلى البرنامج التشغيلي
شاهد كيف يتحول كود جافا المصدر إلى برنامج تشغيلي.
البرنامج الذي يُجمّع ليس صحيحًا تلقائيًا. يلتقط المُجمِّع أخطاء النحو وأخطاء وقت التجميع الأخرى، بما في ذلك أخطاء الأنواع والأسماء. خطأ منطقي — صيغة خاطئة، شرط خاطئ — يُجمّع بنجاح ويعمل، لكنه ينتج نتيجة خاطئة. اختبر دائمًا مخرجات خوارزميتك، وليس فقط ما إذا كانت تُجمّع.
Match each defect to its category.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
The categories depend on when and how the defect is detected; successful compilation does not establish the intended result.
خوارزمية لإيجاد العدد الأكبر بين عددين a و b:
- الخطوة 1: إذا كان
a > b، فالإجابة هيa. - الخطوة 2: وإلا، الجواب هو
b. - نهائية، مُرتبة، وتنتهي دائماً — خوارزمية صالحة، جاهزة للترميز في Java.
انقل الاستدلال إلى حالة جديدة
- تحقق من مخرجات الخصم مع حالات معروفة. لهذا المثال، يجب أن يُعطي 100 90 ويجب أن يُعطي 0 0؛ قم بتضمين إدخال غير صحيح تحت سياسة تقريب محددة بدلاً من افتراض أن القسمة الصحيحة هي حساب عشري.
- يلتقط المُجمِّع أيضًا أخطاء الأنواع والأسماء، ليس فقط أخطاء علامات الترقيم. وفي المقابل، يمكن معالجة الاستثناء أثناء التنفيذ؛ فالبناء النظيف لا يضمن النتيجة المقصودة أو غياب فشل وقت التشغيل.
الخوارزمية هي مجموعة نهائية ومُرتبة من الخطوات تحل مشكلة؛ البرمجة تحولها إلى كود. Java هي لغة عالية المستوى يُترجمها المُترجم إلى bytecode لآلة JVM. انتبه لأخطاء الصياغة، وقت التشغيل، والمنطق — الترجمة السليمة لا تضمن نتيجة صحيحة.