أمثلة على الكود الوهمي
15 مثالًا محلولًا بالكود الوهمي بأسلوب Cambridge IGCSE وA-Level، من أول OUTPUT حتى ترتيب الفقاعات. يعرض كل مثال مخرجاته، ويمكنك تشغيله في المحرر أدناه.
كيف تقرأ هذه الأمثلة
يصف الكود الوهمي خطوات البرنامج بلغة إنجليزية منظّمة، دون القواعد الصارمة للغة برمجة حقيقية. كل مثال أدناه يستخدم أسلوب Cambridge المعتمد في امتحانات IGCSE وA-Level: DECLARE للمتغيّرات، و← للإسناد، وOUTPUT للطباعة، وتُغلق الكتل بـ ENDIF أو NEXT أو ENDWHILE.
يطرح كل مثال مسألة، ويقدّم الكود الوهمي، ويعرض المخرجات التي ينتجها، ويشرح طريقة عمله. اضغط شغّله في المحرر لتحميل أي مثال في المحرر أعلى الصفحة، حيث يمكنك تتبّعه سطرًا بسطر ومشاهدة المتغيّرات وهي تتغيّر. هل الصياغة جديدة عليك؟ في محرر الكود الوهمي مكتبة قابلة للنقر لكل البُنى.
1. Hello, World
اطبع رسالة على الشاشة.
OUTPUT "Hello, World!"Hello, World!تطبع OUTPUT كل ما يأتي بعدها، ويُكتب النص بين علامتي تنصيص مزدوجتين. هذا السطر الواحد برنامج كامل: الكود الوهمي لا يحتاج إلى دالة رئيسية ولا إلى استيراد أي شيء.
2. جمع عددين
خزّن عددين صحيحين، واجمعهما، واطبع المجموع.
DECLARE a : INTEGER
DECLARE b : INTEGER
DECLARE total : INTEGER
a ← 12
b ← 30
total ← a + b
OUTPUT "The total is ", totalThe total is 42يُعلَن عن كل متغيّر باسم ونوع قبل استخدامه. السهم ← يخزّن قيمة، لذا اقرأ total ← a + b هكذا: "تصبح total مساوية لـ a زائد b". والفاصلة في OUTPUT تضع النص والقيمة معًا على سطر واحد.
3. زوجي أم فردي
حدّد ما إذا كان العدد زوجيًا أم فرديًا.
DECLARE n : INTEGER
n ← 17
IF n MOD 2 = 0 THEN
OUTPUT n, " is even"
ELSE
OUTPUT n, " is odd"
ENDIF17 is oddتعطي MOD باقي القسمة. العدد الزوجي لا يترك باقيًا عند قسمته على 2، لذا يكون الاختبار n MOD 2 = 0. تختار IF أحد فرعين، وتغلق ENDIF الكتلة. في الكود الوهمي تقارن علامة = المفردة بين قيمتين، ولا تُستخدم أبدًا للإسناد.
4. تقدير درجة اختبار
حوّل درجة من 100 إلى تقدير: A لـ 80 فما فوق، وB من 60 إلى 79، وC لما دون 60.
DECLARE score : INTEGER
DECLARE grade : CHAR
score ← 74
IF score >= 80 THEN
grade ← 'A'
ELSE
IF score >= 60 THEN
grade ← 'B'
ELSE
grade ← 'C'
ENDIF
ENDIF
OUTPUT "Score ", score, " gets grade ", gradeScore 74 gets grade Bتجري الاختبارات من الحدّ الأعلى نزولًا، لذا تفشل الدرجة 74 في الاختبار الأول وتنجح في الثاني. وضع IF داخل ELSE لأخرى هو طريقة الكود الوهمي في Cambridge لكتابة سلسلة else-if. ويحمل النوع CHAR حرفًا واحدًا بين علامتي تنصيص مفردتين.
5. جمع الأعداد من 1 إلى 10
اجمع كل الأعداد الصحيحة من 1 إلى 10.
DECLARE total : INTEGER
DECLARE i : INTEGER
total ← 0
FOR i ← 1 TO 10
total ← total + i
NEXT i
OUTPUT "Sum of 1 to 10 is ", totalSum of 1 to 10 is 55تتكرّر حلقة FOR عددًا ثابتًا من المرات: يأخذ i القيم 1 و2 و3 وهكذا حتى 10، وتحدّد NEXT i نهاية جسم الحلقة. يبدأ المجموع التراكمي من 0 ويزداد في كل دورة. والناتج 55 يطابق الصيغة n(n + 1) / 2.
6. طباعة جدول الضرب
اطبع أول خمسة أسطر من جدول ضرب العدد 7.
DECLARE i : INTEGER
FOR i ← 1 TO 5
OUTPUT "7 x ", i, " = ", 7 * i
NEXT i7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35يُستخدم عدّاد الحلقة i داخل العملية الحسابية، فتطبع كل دورة سطرًا مختلفًا. ويمكن لـ OUTPUT أن تضمّ عدة نصوص وعدة قيم مفصولة بفواصل.
7. عدّ تنازلي بحلقة WHILE
عُدّ تنازليًا من 5 إلى 1، ثم اطبع رسالة ختامية.
DECLARE count : INTEGER
count ← 5
WHILE count > 0 DO
OUTPUT count
count ← count - 1
ENDWHILE
OUTPUT "Liftoff!"5
4
3
2
1
Liftoff!تفحص حلقة WHILE شرطها قبل كل دورة وتتوقف فور أن يصبح الشرط خاطئًا. الشرط هنا count > 0، وجسم الحلقة يُنقص count بواحد في كل مرة. احذف السطر الذي يُنقصه ولن تنتهي الحلقة أبدًا. استخدم WHILE عندما لا تعرف مسبقًا عدد الدورات التي تحتاجها.
8. إيجاد أكبر عدد في مصفوفة
جد أكبر قيمة في قائمة من ستة أعداد.
DECLARE nums : ARRAY[1:6] OF INTEGER
DECLARE i : INTEGER
DECLARE largest : INTEGER
nums[1] ← 14
nums[2] ← 3
nums[3] ← 27
nums[4] ← 9
nums[5] ← 21
nums[6] ← 6
largest ← nums[1]
FOR i ← 2 TO 6
IF nums[i] > largest THEN
largest ← nums[i]
ENDIF
NEXT i
OUTPUT "The largest number is ", largestThe largest number is 27تعلن ARRAY[1:6] عن ست خانات مرقّمة من 1 إلى 6، لأن المصفوفات في Cambridge تبدأ عادةً من 1. يفترض البرنامج أن العنصر الأول هو الأكبر، ثم يقارن كل عنصر آخر به ويحتفظ بالأكبر منهما. بعد المرور على المصفوفة مرة واحدة يحمل largest الإجابة.
9. حساب المتوسط
جد متوسط أربع درجات اختبار.
DECLARE marks : ARRAY[1:4] OF INTEGER
DECLARE i : INTEGER
DECLARE total : INTEGER
marks[1] ← 70
marks[2] ← 85
marks[3] ← 64
marks[4] ← 91
total ← 0
FOR i ← 1 TO 4
total ← total + marks[i]
NEXT i
OUTPUT "Average mark: ", total / 4Average mark: 77.5تضيف الحلقة كل عنصر من عناصر المصفوفة إلى total، ثم يقسم البرنامج على عدد الدرجات. يعطي العامل / ناتجًا عشريًا، ولهذا يكون الناتج 77.5. استخدم DIV بدلًا منه عندما تريد قسمة صحيحة.
10. البحث الخطي
جد موقع الاسم Dara في قائمة أسماء.
DECLARE names : ARRAY[1:5] OF STRING
DECLARE i : INTEGER
DECLARE found : BOOLEAN
names[1] ← "Ana"
names[2] ← "Ben"
names[3] ← "Chen"
names[4] ← "Dara"
names[5] ← "Eli"
found ← FALSE
i ← 1
WHILE i <= 5 AND found = FALSE DO
IF names[i] = "Dara" THEN
found ← TRUE
ELSE
i ← i + 1
ENDIF
ENDWHILE
IF found = TRUE THEN
OUTPUT "Dara is at position ", i
ELSE
OUTPUT "Not found"
ENDIFDara is at position 4يفحص البحث الخطي العناصر واحدًا تلو الآخر من البداية. يوقف شرط WHILE الحلقة إما عند العثور على الاسم وإما بعد فحص كل العناصر، ويسجّل العلم found أيّ الأمرين حدث. يعمل مع البيانات غير المرتّبة، لكنه في القائمة الطويلة قد يحتاج إلى مقارنة لكل عنصر.
11. ترتيب الفقاعات
رتّب خمسة أعداد تصاعديًا.
DECLARE nums : ARRAY[1:5] OF INTEGER
DECLARE i : INTEGER
DECLARE j : INTEGER
DECLARE temp : INTEGER
nums[1] ← 5
nums[2] ← 1
nums[3] ← 4
nums[4] ← 2
nums[5] ← 8
FOR i ← 1 TO 4
FOR j ← 1 TO 5 - i
IF nums[j] > nums[j + 1] THEN
temp ← nums[j]
nums[j] ← nums[j + 1]
nums[j + 1] ← temp
ENDIF
NEXT j
NEXT i
FOR i ← 1 TO 5
OUTPUT nums[i]
NEXT i1
2
4
5
8يقارن ترتيب الفقاعات كل عنصرين متجاورين ويبدّل بينهما إذا كانا بترتيب خاطئ. بعد كل دورة من الحلقة الخارجية تكون أكبر قيمة متبقية قد انتقلت إلى النهاية، لذا تستطيع الحلقة الداخلية أن تتوقف قبل عنصر واحد في كل مرة. ويحتاج التبديل إلى متغيّر ثالث، temp، يحفظ قيمة بينما تُنسخ الأخرى مكانها.
12. المضروب باستخدام دالة
اكتب دالة تعيد مضروب n (أي n!)، ثم استخدمها لحساب 5!.
FUNCTION Factorial(n : INTEGER) RETURNS INTEGER
DECLARE result : INTEGER
DECLARE i : INTEGER
result ← 1
FOR i ← 2 TO n
result ← result * i
NEXT i
RETURN result
ENDFUNCTION
OUTPUT "5! = ", Factorial(5)5! = 120تأخذ FUNCTION معاملات، وتؤدّي عملها، وتعيد قيمة باستخدام RETURN، ويذكر رأسها نوع القيمة التي تعيدها. المتغيّرات المعلن عنها داخلها لا توجد إلا أثناء تشغيلها. و5! تساوي 5 × 4 × 3 × 2 × 1، أي 120.
13. عدّ أحرف العلة في كلمة
عُدّ أحرف العلة في الكلمة PSEUDOCODE.
DECLARE word : STRING
DECLARE letter : CHAR
DECLARE vowels : INTEGER
DECLARE i : INTEGER
word ← "PSEUDOCODE"
vowels ← 0
FOR i ← 1 TO LENGTH(word)
letter ← SUBSTRING(word, i, 1)
IF letter = 'A' OR letter = 'E' OR letter = 'I' OR letter = 'O' OR letter = 'U' THEN
vowels ← vowels + 1
ENDIF
NEXT i
OUTPUT word, " has ", vowels, " vowels"PSEUDOCODE has 5 vowelsتعطي LENGTH عدد الأحرف في السلسلة النصية، وتأخذ SUBSTRING(word, i, 1) حرفًا واحدًا بدءًا من الموقع i. تمرّ الحلقة على كل حرف وتضيف واحدًا إلى العدّاد كلما كان A أو E أو I أو O أو U.
14. FizzBuzz
اطبع الأعداد من 1 إلى 15، لكن اطبع Fizz لمضاعفات 3، وBuzz لمضاعفات 5، وFizzBuzz لمضاعفاتهما معًا.
DECLARE i : INTEGER
FOR i ← 1 TO 15
IF i MOD 15 = 0 THEN
OUTPUT "FizzBuzz"
ELSE
IF i MOD 3 = 0 THEN
OUTPUT "Fizz"
ELSE
IF i MOD 5 = 0 THEN
OUTPUT "Buzz"
ELSE
OUTPUT i
ENDIF
ENDIF
ENDIF
NEXT i1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzzترتيب الاختبارات مهم. العدد 15 من مضاعفات 3 ومن مضاعفات 5، لذا يجب أن يأتي اختبار 15 أولًا، وإلا طبع البرنامج Fizz ولم يصل إلى FizzBuzz أبدًا. إنه تمرين إحماء كلاسيكي في المقابلات لأنه يختبر هذا النوع من التفكير بالضبط.
15. محاولات كلمة المرور بحلقة REPEAT UNTIL
جرّب حتى ثلاث كلمات مرور بالتتابع، واسمح بالدخول إذا كانت إحداها صحيحة.
DECLARE attempts : ARRAY[1:3] OF STRING
DECLARE tries : INTEGER
DECLARE guess : STRING
attempts[1] ← "hunter1"
attempts[2] ← "letmein"
attempts[3] ← "open sesame"
tries ← 0
REPEAT
tries ← tries + 1
guess ← attempts[tries]
OUTPUT "Try ", tries, ": ", guess
UNTIL guess = "open sesame" OR tries = 3
IF guess = "open sesame" THEN
OUTPUT "Access granted"
ELSE
OUTPUT "Locked out"
ENDIFTry 1: hunter1
Try 2: letmein
Try 3: open sesame
Access grantedتفحص حلقة REPEAT ... UNTIL شرطها في النهاية، لذا يُنفَّذ جسمها مرة واحدة على الأقل دائمًا. تتوقف عندما تتطابق كلمة المرور أو بعد المحاولة الثالثة. تأتي التخمينات من مصفوفة كي يعمل المثال دون كتابة أي شيء، أما في إجابة الامتحان فعادةً ما تقرأ كل واحدة باستخدام INPUT.
أسئلة شائعة عن أمثلة الكود الوهمي
ما مثال الكود الوهمي؟
مثال قصير يقرّر ما إذا كان الاختبار ناجحًا: IF score >= 50 THEN OUTPUT "Pass" ELSE OUTPUT "Fail" ENDIF. يُقرأ تقريبًا كالإنجليزية لكنه يتبع قواعد ثابتة، لذا يمكن تحويله إلى Python أو Java أو أي لغة أخرى سطرًا بسطر. البرامج الخمسة عشر في هذه الصفحة تتدرّج من سطر واحد حتى البحث والترتيب.
كيف تكتب الكود الوهمي؟
حدّد ما يجب أن يفعله البرنامج، ثم اكتب الخطوات بالترتيب بمجموعة صغيرة من الكلمات المفتاحية: DECLARE للمتغيّرات، و← للإسناد، وIF للقرارات، وFOR أو WHILE للتكرار، وOUTPUT للنتائج. أزِح جسم كل كتلة إلى الداخل، وأغلقها بكلمة نهايتها، واكتب إجراءً واحدًا في كل سطر.
هل الكود الوهمي نفسه في كل الامتحانات؟
لا. يستخدم Cambridge (IGCSE وA-Level) الكلمة DECLARE والسهم ←، ويستخدم AQA السهم ← دون إعلانات، وتشبه Exam Reference Language من OCR لغة Python، ويكتب Edexcel SET ... TO. الأمثلة هنا بأسلوب Cambridge، أما محرر الكود الوهمي فيتنقّل بين الأساليب الأربعة كلها.
هل يمكنني تشغيل الكود الوهمي؟
نعم، في هذه الصفحة. الكود الوهمي ليس لغة برمجة حقيقية، لذا لا يوجد له مترجم رسمي، لكن المحرر هنا يشغّل الكود الوهمي بأسلوب Cambridge في متصفحك، ويعرض المخرجات، ويتنقّل فيه سطرًا بسطر. اضغط شغّله في المحرر أسفل أي مثال.
ما الفرق بين الكود الوهمي والمخطط الانسيابي؟
كلاهما يصف الخوارزمية قبل كتابتها كودًا. يرسم المخطط الانسيابي الخطوات على شكل مربعات وأسهم، وهذا يناسب العمليات القصيرة ذات القرارات القليلة. أما الكود الوهمي فيكتبها نصًا منظّمًا، فيصلح للبرامج الأطول ويتحوّل إلى كود حقيقي بطريقة أكثر مباشرة.
هل يجب أن أعلن عن المتغيّرات في الكود الوهمي؟
في الكود الوهمي بأسلوب Cambridge نعم: تتوقع معايير التصحيح DECLARE name : TYPE قبل استخدام المتغيّر. أساليب أخرى، مثل أسلوب AQA، لا تستخدم الإعلانات. والإعلان عن المتغيّر يخبر القارئ أيضًا بنوع القيمة التي يحملها.