| يجب أن يكون المرشحون قادرين على: | ملاحظات وإرشادات |
|---|---|
| تنفيذ وكتابة الشيفرة الوهمية من تصميم معروض إما كـ مخطط انسيابي للبرنامج أو إنجليزية منظمة | |
| اكتب أوامر كود زائف لـ: • الإعلان عن ثوابت وتعيين قيم ابتدائية لها • الإعلان عن متغيرات • تعيين قيم إلى متغيرات • تعبيرات تتضمن أي من العمليات الحسابية أو المنطقية المدخلة من لوحة المفاتيح والمخرجة إلى الشاشة | |
| استخدم الدوال المدمجة وروتينات المكتبة | أي دوال غير مذكورة في دليل الكود الزائف سيتم توفيرها. دوال معالجة النصوص ستُعطى دائمًا |
البرمجة
A-Level علوم الحاسوب · الموضوع 11
24:05
أساسيات البرمجة
يجب أن يطلب البرنامج كلمة مرور، ويستمر في الطلب حتى تكون صحيحة. بسيط — ولكن أي حلقة تكرار تستخدم؟ البرامج تتخذ قرارات وتكرر العمل، واختيار…
سرد باللغة الإنجليزية · ترجمة مدمجة بالإنجليزية + الصينية
11.1
أساسيات البرمجة
المنهج
المصدر: منهج كامبريدج الدولي


من التصميم إلى الكود
يجب أن تكون قادراً على تحويل تصميم — مخطط انسيابي (مخطط انسيابي للبرنامج) أو إنجليزية منظمة — إلى كود زائف، ثم إلى لغة حقيقية:
- حدد المتغيرات وأنواعها البيانية.
- حوّل صناديق الإدخال/الإخراج إلى
INPUT/OUTPUT. - حوّل المعينيات القرارية إلى
IF...ELSE...ENDIF(أوCASE). - حوّل أسهم الحلقات إلى
WHILE،REPEAT...UNTIL، أوFOR. - حوّل صناديق العمليات إلى إسنادات أو حسابات.
- تحقق عن طريق تتبع مدخل صغير.
*كل رمز في المخطط الانسيابي يصبح كلمة مفتاحية في الكود الزائف
الثوابت والمتغيرات
الثابت يحمل قيمة لا تتغير أبداً؛ المتغير يحمل واحدة قد تتغير. أعلن them مع نوع:
*قيمة المتغير يمكن أن تتغير؛ ثابت يبقى ثابتاً
CONSTANT Pi = 3.14159
DECLARE Radius : REAL
DECLARE Area : REAL
Radius ← 5
Area ← Pi * Radius * Radius
استخدم ثوابت للقيم الثابتة المتكررة (Pi، MaxScore)؛ فهي تجعل الكود أكثر وضوحاً وسهلة التغيير في مكان واحد.
في الامتحان، الثابت هو إجابة سؤال "حدد طريقة أكثر ملاءمة لتمثيل" قيمة ثابتة، مثل معدل ضريبي أو حد أقصى للنقاط، تظهر في عدة أماكن في الكود الزائف. المنفعة التي يذكرها المقيّم: القيمة تُضع مرة واحدة ولا يمكن تغييرها بالخطأ بواسطة البرنامج؛ التغيير يتم في مكان واحد ويصل إلى كل تعليمة تستخدمها؛ المعرف يعطي القيمة معنى (MaxScore بدلاً من 100)، لذا الكود أسهل في القراءة والتحقق؛ وهناك خطر أقل لحدوث خطأ إملائي في قيمة طويلة مثل 3.14159. السؤال "اذكر قيمة يمكن استبدالها بثابت" يطلب الحرفي من الكود الزائف (0.2، 40)، وليس اسماً جديداً.
يُعلن كل متغير مرة واحدة، مع معرف (اسمه) ونوع بياني، قبل استخدامه. الأنواع الستة في دليل الكود الزائف 9618:
| النوع | يحمل | يُكتب في الكود كـ | الاستخدام النموذجي |
|---|---|---|---|
INTEGER |
أعداد صحيحة | 42، -3 |
عداد، فهرس مصفوفة، عداد حلقة تكرار |
REAL |
أعداد بكسر عشري | 3.75 |
سعر، متوسط |
CHAR |
حرف واحد | 'A' (علامات اقتباس مفردة) |
حرف درجة، مفتاح قائمة |
STRING |
تسلسل من الأحرف | "Hello" (علامات اقتباس مزدوجة) |
اسم، رمز بريدي |
BOOLEAN |
TRUE أو FALSE |
TRUE |
علم مثل Found |
DATE |
تاريخ تقويمي | 12/05/2026 |
تاريخ ميلاد |
إجابة سؤال "أعطِ النوع البياني المناسب" تعتمد على كيفية استخدام المتغير في الكود الزائف: قيمة بها فاصلة عشرية هي REAL؛ شيء مُعيّن في TRUE أو FALSE هو BOOLEAN؛ قيمة داخل علامات اقتباس مفردة هي CHAR؛ قيمة تُستخدم كفهرس مصفوفة، أو مع DIV وMOD، هي INTEGER. اكتب النوع بحروف كبيرة، ومُصاغة كما يصفها الدليل.
مثال محلول. حدد النوع البياني المناسب لكل متغير.
Found ← FALSE
Initial ← 'K'
Price ← 12.99
Count ← Count + 1
Name ← "Li Wei"
Found هو BOOLEAN (يحمل FALSE)؛ Initial هو CHAR (حرف واحد في علامات اقتباس مفردة)؛ Price هو REAL (قيمة عشرية)؛ Count هو INTEGER (عداد يزيد بمقدار واحد)؛ Name هو STRING (نص في علامات اقتباس مزدوجة).
الإسناد والتعبيرات
استخدم ← لـ الإسناد:
Total ← Total + 1
Average ← Sum / Count
التعبيرات تستخدم المعاملات:
- حسابية
+ - * /، زائدDIV(القسمة الصحيحة) وMOD(الباقي):7 DIV 2 = 3؛7 MOD 2 = 1. - مقارنات
=،<>،<،>،<=،>=. - منطق
AND،OR،NOT.
السبقية (من الأعلى إلى الأدنى): NOT → * / DIV MOD → + - → المقارنات → AND → OR. استخدم الأقواس عند الشك.
الإدخال والإخراج
OUTPUT "Enter your name:"
INPUT Name
OUTPUT "Hello, ", Name
الدوال المدمجة والروتينات المكتبية
العديد من المهام تحتوي على وحدات مكتبة جاهزة، لذا لا حاجة لكتابتها. يحتوي الإدراج الخاص بالورقة 2 على القائمة بالتسميات الدقيقة والمعاملات وأنواع الإرجاع للوحدات المسموح باستخدامها؛ وأي دالة أخرى تحتاجها المسألة تُعطى في نص المسألة بحد ذاته. الأسماء أدناه هي التسميات الموجودة في الإدراج. VAL وSTR هما اسمان خاصان بـ IGCSE ويظهران في كلتا وثيقتي 9618، لذا لا يمنحان أي نقاط. أما UCASE وLCASE فهما حالة مختلفة: فهما موجودان فعليًا في 9618 ومُعرَّفان في دليل الكود الوهمي، لكنهما يأخذان مُعاملًا واحدًا فقط وهو CHAR، ولا يُدرَج它们在 الإدراج على الإطلاق — بالنسبة لسلسلة نصية كاملة في الورقة 2، الوحدة المناسبة هي TO_UPPER.
تحتوي مكتبة البرامج على وحدات تمت كتابتها وترجمتها واختبارها مسبقًا؛ يستدعي البرنامج هذه الوحدات بدلاً من كتابة كود خاص به. الفوائد التي يقبلها النظام للإجابة عن سؤال "اذكر ثلاث فوائد" (state three benefits): الوحدات تم اختبارها بالفعل، لذا فهي أقل عرضة لاحتوائها على أخطاء؛ توفر وقت التطوير؛ قد تقوم بأعمال لا يستطيع المبرمج كتابتها (إحصاءات معقدة، رسوم بيانية)؛ كُتبت بواسطة خبراء وتُعاد استخدامها عبر برامج متعددة؛ كما يمكن استدعاء وحدة ذات واجهة ثابتة من أي مكان داخل البرنامج.
| الوحدة | الإرجاع | مثال |
|---|---|---|
LENGTH(s) |
عدد الأحرف في s |
LENGTH("Hello") = 5 |
LEFT(s, n) / RIGHT(s, n) |
أول / آخر n أحرف |
RIGHT("Hello", 2) = "lo" |
MID(s, start, n) |
n أحرف بدءًا من الموقع start (تبدأ العدادات من 1) |
MID("Hello", 2, 3) = "ell" |
TO_UPPER(s) / TO_LOWER(s) |
s بحروف كبيرة / بحروف صغيرة |
TO_UPPER("ab1") = "AB1" |
NUM_TO_STR(x) / STR_TO_NUM(s) |
رقم كنص / نص كرقم | STR_TO_NUM("3.5") = 3.5 |
IS_NUM(s) |
TRUE إذا كان s رقماً صحيحاً |
IS_NUM("12a") = FALSE |
ASC(c) / CHR(n) |
كود الحرف لـ c / الحرف الذي يحمل الكود n |
ASC('A') = 65, CHR(66) = 'B' |
INT(x) |
الجزء الصحيح من x |
INT(7.9) = 7 |
RAND(n) |
رقم عشري حقيقي من 0 إلى ما دون n |
INT(RAND(6)) + 1 يمثل رمي نرد |
DAY(d), MONTH(d), YEAR(d) |
أجزاء DATE |
YEAR(TODAY()) |
DAYINDEX(d), SETDATE(d, m, y), TODAY() |
يوم الأسبوع (1 = الأحد)؛ تاريخ مكوّن من ثلاثة أعداد صحيحة؛ تاريخ اليوم | |
EOF(f) |
TRUE عندما لا يتبقى أكثر أسطر لقراءتها في الملف f |
WHILE NOT EOF("data.txt") |
تُربط السلاسل النصية باستخدام & (الدمج/التوصيل): "A" & "BC" هو "ABC". استخدم التسميات الدقيقة من الإدراج، مع المعاملات بنفس ترتيبها.
التواريخ والأرقام العشوائية تظهر كتعليمات سطر واحد. SETDATE(17, 11, 2007) يبني تاريخ 17 نوفمبر 2007؛ 12 - MONTH(MyDOB) هو عدد الأشهر من شهر الميلاد حتى نهاية السنة؛ IF DAYINDEX(MyDOB) = 5 THEN يختبر هل هو يوم الخميس، لأن الأحد هو اليوم 1. يُرجع RAND(n) رقماً حقيقياً من 0 إلى ما دون n، لذا فإن العدد الصحيح العشوائي من Low إلى High (شاملاً الطرفين) هو INT(RAND(High - Low + 1)) + Low: يعطي INT(RAND(21)) - 10 قيمة من -10 إلى 10.

s = "COMPUTER" (المواقع 1–8)مثال محلول. قيّم كل تعبير، بافتراض أن Word ← "Program"، Code ← 'Q'، وN ← 7.
| التعبير | القيمة | السبب |
|---|---|---|
LENGTH(Word) |
7 |
سبعة أحرف |
MID(Word, 4, 2) |
"gr" |
حرفان، بدءًا من الموقع 4 |
LEFT(Word, 3) & "!" |
"Pro!" |
مدموج مع & |
TO_UPPER(RIGHT(Word, 2)) |
"AM" |
الدالة الداخلية تعمل أولاً |
ASC(Code) - ASC('A') |
16 |
'Q' تساوي 81 و'A' تساوي 65 |
N DIV 2 + N MOD 2 |
4 |
3 + 1 |
NUM_TO_STR(N) & "th" |
"7th" |
الرقم يتحول إلى نص أولاً |
INT(N / 2) |
3 |
3.5 مقصوص إلى جزئه الصحيح |
اعمل من الداخل إلى الخارج، واحتفظ بعلامات الاقتباس: "7" هو نص و7 هو رقم.
مثال محلول. قد تحتوي كل تعليمة على خطأ في استخدام دالة أو عامل. صف الخطأ، أو اكتب NO ERROR. (افترض أن كل متغير له النوع الصحيح.)
| التعليمة | الخطأ |
|---|---|
Result ← 2 & 4 |
& يجمع النصوص؛ 2 و4 أعداد صحيحة، لذا يلزم استخدام + |
SubString ← MID("pseudocode", 4, 1) |
NO ERROR: حرف واحد من الموقع 4، "u" |
IF x = 3 OR 4 THEN |
OR يتطلب قيمة منطقية (Boolean) على كل جانب: IF x = 3 OR x = 4 THEN |
Result ← Status AND INT(x / 2) |
AND يتطلب قيمتين منطقيتين؛ INT(x / 2) عدد صحيح |
Message ← "Done" + LENGTH(MyString) |
+ لا يمكنه جمع نص مع عدد صحيح: "Done" & NUM_TO_STR(LENGTH(MyString)) |
كل عامل يعمل على أنواع محددة: & على النصوص، + - * / DIV MOD على الأعداد، AND OR NOT على القيم المنطقية، و= <> على قيمتين من نفس النوع. جدول "قيّم كل تعبير، أو اكتب ERROR" يُصحح بنفس الطريقة: LENGTH(42) و"A" + 1 يعتبران ERROR، لأن النوع لا يطابق الدالة أو العامل.
مثال محلول. باستخدام Points ← 100، Active ← TRUE، وExempt ← FALSE، قيّم كل تعبير.
| التعبير | القيمة | السبب |
|---|---|---|
(Points > 99) OR Active |
TRUE |
كلا الجانبين صحيح؛ يكفي أحد |
(Points MOD 2 = 0) OR Exempt |
TRUE |
100 MOD 2 هي 0 |
(Points <= 75) AND (Active OR Exempt) |
FALSE |
الجانب الأول خاطئ، وAND تتطلب الاثنين |
(Active OR NOT Active) AND NOT Exempt |
TRUE |
Active OR NOT Active دائماً صحيحة |
التعبير الأخير يُبسط: X OR NOT X هي TRUE بغض النظر عن قيمة X، لذا يكون التعبير بأكمله مجرد NOT Exempt. قيّم الأقواس أولاً، ثم NOT، ثم AND، ثم OR.
المتغير هو صندوق معنون
كل عملية إسناد تخزن قيمة واحدة في صندوق معنّى؛ إعادة التسمية لنفس الاسم تحل محلها. تتبع البرنامج وشاهد كل صندوق يأخذ قيمته الحالية.
| English | العربية |
|---|---|
| pseudocode/ˈsuːdəʊkəʊd/ | الكود الوهمي |
| variables/ˈveərɪəblz/ | المتغيرات |
| data types/ˈdeɪtə taɪps/ | أنواع البيانات |
| assignment/əˈsaɪnmənt/ | التعيين (assignment) |
| constant/ˈkɒnstənt/ | ثابت |
| identifier/aɪˈdentɪfaɪə/ | معرف |
| function/ˈfʌŋkʃn/ | دالة |
| library routines/ˈlaɪbrəri ruːˈtiːnz/ | إجراءات المكتبة |
| insert/ˈɪnsɜːt/ | إدراج |
| parameters/pəˈræmɪtəz/ | المعاملات |
| program library/ˈprəʊɡræm ˈlaɪbrəri/ | مكتبة البرامج |
| concatenation/kənˌkætəˈneɪʃn/ | الدمج (concatenation) |
| selection/sɪˈlekʃn/ | اختيار |
11.2
الاختيار
المنهج
| يجب أن يكون المرشحون قادرين على: | ملاحظات وإرشادات |
|---|---|
| استخدم الكود الزائف لكتابة: • جملة 'IF' بما في ذلك بند 'ELSE' وجمل 'IF' المتداخلة • هيكل 'CASE' • حلقة 'مُتحكَم بالعد': • حلقة 'شرط ما بعد التنفيذ' • حلقة 'شرط ما قبل التنفيذ' | |
| برر لماذا قد تكون بنية حلقة معينة أكثر ملاءمة لحل مشكلة مقارنة بالأخرى |
المصدر: منهج كامبريدج الدولي
الاختيار يحدد أي الخطوات ستُنفَّذ.
IF age >= 18 THEN
OUTPUT "Adult"
ELSE
OUTPUT "Minor"
ENDIF

لأكثر من حالتين يمكنك استخدام IF متداخل (nested)، لكن التشابك العميق يصعب قراءته — حيث أن CASE أكثر وضوحاً عند اختبار قيمة واحدة مقابل عدة خيارات:
CASE OF Grade
"A": OUTPUT "Excellent"
"B": OUTPUT "Good"
OTHERWISE: OUTPUT "Try again"
ENDCASE
يسمح Cambridge CASE بقيم مفردة، وقوائم قيم (1, 2, 3:)، ونطاقات (1 TO 5:).
الـ IF المتداخل هو عبارة عن IF داخل فرع من IF آخر. كل IF يحتاج إلى ENDIF خاص به، ويحقق الممتحن أن كل بنية مغلقة:
IF Mark >= 50 THEN
IF Mark >= 80 THEN
OUTPUT "Distinction"
ELSE
OUTPUT "Pass"
ENDIF
ELSE
OUTPUT "Fail"
ENDIF
الحدود هي locations تُفقد فيها العلامات. "علامة 50 أو أكثر تعني النجاح" هي Mark >= 50، وليست Mark > 50؛ الفرع الأخير لـ CASE، الخاص بـ "أي شيء آخر"، يُكتب OTHERWISE، وليس شرطاً مثل > 200. الخطأ في المقارنة هنا هو خطأ منطقي: البرنامج يعمل، لكنه يعطي مخرجات خاطئة لبعض المدخلات — وجدول التتبع مع قيمة حدية مثل 50 هو الطريقة التي تجد بها ذلك.

مثال محلول. أعد كتابة هذا بنفس الوظيفة، دون استخدام بنية CASE.
CASE OF MySwitch
1: ThisChar ← 'a'
2: ThisChar ← 'y'
3: ThisChar ← '7'
OTHERWISE: ThisChar ← '*'
ENDCASE
كل قيمة تصبح فرعاً لسلسلة من IFs، وتصبح OTHERWISE الفرع الأخير لـ ELSE:
IF MySwitch = 1 THEN
ThisChar ← 'a'
ELSE
IF MySwitch = 2 THEN
ThisChar ← 'y'
ELSE
IF MySwitch = 3 THEN
ThisChar ← '7'
ELSE
ThisChar ← '*'
ENDIF
ENDIF
ENDIF
يتم دمج بناديين يخصصان نفس القيمة في بند واحد بقائمة قيم: 1, 2: ThisChar ← 'a'. يتم اختبار الحراس بالترتيب: مع النطاقات مثل 1 TO 50: متبوعة بـ 40 TO 60:، تأخذ القيمة 45 الفرع الأول المطابق، لذا قد لا يتم تنفيذ تعيين في فرع لاحق أبداً — وعندما تغطي الفروع السابقة بالفعل كل القيم الممكنة، فإن فرع OTHERWISE لن يتم الوصول إليه أيضاً.
وبالعكس، فإن الـ IFs المتداخلة التي تختبر عدة Booleans تكون أوضح إذا كانت هناك شرط واحد لكل نتيجة: IF A AND B AND C THEN CALL Sub1()، ثم IF A AND B AND NOT C THEN CALL Sub2()، وهكذا. ربط الاختبارات باستخدام AND وOR يلغي التداخل، ويتم قبول IF A THEN بدلاً من IF A = TRUE THEN.
الاختيار (IF / ELSE)
غيّر المدخلات وراقب أي فرع يتم تشغيله — جوهر الاختيار.
| English | العربية |
|---|---|
| flowchart/ˈfləʊtʃɑːt/ | مخطط انسيابي |
| structured English/ˈstrʌktʃəd ˈɪŋɡlɪʃ/ | اللغة الإنجليزية المنسقة |
| nested/ˈnestɪd/ | متداخل |
| logic error/ˈlɒdʒɪk ˈerə/ | خطأ منطق |
| trace table/treɪs ˈteɪbl/ | جدول التتبع |
| iteration/ˌɪtəˈreɪʃn/ | التكرار |
| count-controlled loop/kaʊnt kənˈtrəʊld luːp/ | حلقة محكومة بعدد العدادات |
| pre-condition loop/priː kənˈdɪʃn luːp/ | حلقة الشرط المسبق |
| post-condition loop/pəʊst kənˈdɪʃn luːp/ | حلقة الشرط اللاحق |
| dry run/draɪ rʌn/ | التشغيل الجاف |
11.2
التكرار
التكرار يعيد تنفيذ كتلة. ثلاث حلقات تختلف في عدد مرات تشغيل الجسم.
حلقة التحكم بالعداد (FOR)
حلقة التحكم بالعداد — استخدمها عندما تعرف كم مرة يجب التكرار:
FOR i ← 1 TO 10
OUTPUT i
NEXT i
يمكن لـ STEP تغيير العداد (مثل FOR i ← 10 TO 1 STEP -1). الأفضل لعدد ثابت من التكرارات أو معالجة كل عنصر في مصفوفة.
حلقة الشرط المسبق (WHILE)
حلقة الشرط المسبق تختبر الشرط قبل كل مرور، لذا قد تعمل صفر مرات:
WHILE total < 100 DO
INPUT n
total ← total + n
ENDWHILE
حلقة الشرط اللاحق (REPEAT...UNTIL)
حلقة الشرط اللاحق تختبر الشرط بعد كل مرور، لذا تعمل دائماً مرة واحدة على الأقل:
REPEAT
INPUT password
UNTIL password = correctPassword
اختيار الحلقة المناسبة

- العداد معروف مسبقاً → FOR.
- قد تحتاج إلى صفر مرور → WHILE.
- دائماً مرة واحدة على الأقل → REPEAT...UNTIL.
برر اختيارك بناءً على ما إذا كان العداد معروفاً وما إذا كان يجب أن يعمل الجسم مرة واحدة على الأقل. السؤال النموذجي يعطي سيناريو ("اطلب كلمة مرور حتى تكون صحيحة، لكن اطلبها مرة واحدة على الأقل") ويسأل أي حلقة تناسب.
العلاقتان هما لـ اسم الحلقة والسبب، بكلمات المخطط: محكومة بالعداد، لأن عدد التكرارات معروف قبل بدء الحلقة؛ شرط لاحق، لأن جسم الحلقة يجب تنفيذه مرة واحدة على الأقل؛ شرط مسبق، لأن الحلقة قد لا تحتاج للتنفيذ على الإطلاق. حلقة تمر على العناصر الأربعة لمصفوفة كُتبت كـ WHILE مع عداد هي "ليست الأنسب": العداد، أربعة، معروف، لذا حلقة FOR تناسب.
مثال محلول. أي حلقة تناسب كل مهمة؟ (أ) اطبع جدول ضرب 12؛ (ب) استمر في قراءة الأرقام حتى يدخل المستخدم 0؛ (ج) اطلب كلمة مرور حتى تكون صحيحة. اختر عن طريق طرح سؤال كم مرة يعمل الجسم ومتى يحدث الاختبار. (أ) العداد معروف مسبقاً (12)، لذا استخدم حلقة FOR. (ب) العداد غير معروف، والمدخل الأول قد يكون 0 بالفعل - لذا يجب أن يأتي الاختبار قبل الجسم: حلقة WHILE، والتي تعمل صفر أو أكثر من المرات. (ج) العداد غير معروف،但你 يجب أن تطلب مرة واحدة على الأقل قبل وجود أي شيء لاختباره - لذا يأتي الاختبار بعد الجسم: حلقة REPEAT...UNTIL، والتي تعمل واحدة أو أكثر من المرات. السؤال المحوري هو ما إذا كان يجب أن يعمل الجسم مرة واحدة على الأقل: WHILE قد تعمل صفر مرات، REPEAT تعمل دائماً مرة واحدة.
التشغيل الجاف باستخدام جدول التتبع
يسجل جدول التتبع قيمة كل متغير أثناء التشغيل الجاف (العمل يدوياً) خوارزمية. إنه كيفية اختبار حلقة على الورق، وسؤال بـ 6 علامات في معظم أوراق Paper 2.
DECLARE Count, Total : INTEGER
Count ← 1
Total ← 0
WHILE Total < 10
Total ← Total + Count * 2
Count ← Count + 1
ENDWHILE
OUTPUT Count, Total
| العداد | المجموع | المجموع < 10 | المخرجات |
|---|---|---|---|
| 1 | 0 | TRUE | |
| 2 | 2 | TRUE | |
| 3 | 6 | TRUE | |
| 4 | 12 | FALSE | 4, 12 |
القواعد التي تحصل عليها عليها العلامات: عمود واحد لكل متغير، بالترتيب الذي تعطيك إياه الأسئلة؛ اكتب قيمة فقط عندما تتغير؛ ابدأ صفًا جديداً في كل مرة تتكرر فيها الحلقة؛ قيّم الشرط بالقيم الحالية، وتوقف لحظة أن يصبح FALSE؛ ضع المخرجات في عمود خاص بها، تماماً كما سيظهر. تتبع الخوارزمية كما هي مكتوبة، وليس تلك التي تعتقد أنها مقصودة — إذا لم تتوقف أبداً، قل ذلك.
مثال محلول. أي البنى تستخدمه كل سطر — التحديد، التكرار أو استدعاء الإجراء?
| الكود الوهمي | التحديد | التكرار | الإجراء |
|---|---|---|---|
| IF Ready = TRUE THEN |
CALL Start()
ENDIF
| FOR I ← 1 TO 20 ... NEXT I | | yes | |
| WHILE NOT IsFull() ... ENDWHILE | | yes | yes |
| CASE OF Key ... OTHERWISE ... ENDCASE | yes | | |
IF وCASE هما انتقائية؛ FOR، WHILE وREPEAT هي تكرار؛ الاسم المتبوع بأقواس — Start()، IsFull() — هو استدعاء لإجراء أو دالة، أينما ظهر بما في ذلك داخل شرط.
تتبع حلقة تكرار، دورة بدورة
جدول التتبع يسجل كل متغير بعد كل دورة من الحلقة. شاهد العداد i يتصاعد بينما يتجمع المجموع الجاري — تماماً ما يطلبه سؤال تتبع الامتحان ملؤه.
تتبع حلقة
مرر عبر الحلقة وراقب تغير المتغيرات في كل دورة — بالضبط ما تسجله جدول التتبع.
11.3
الإجراءات والدوال
المنهج
| يجب أن يكون المرشحون قادرين على: | ملاحظات وإرشادات |
|---|---|
| عرّف واستخدم إجراءً | |
| اشرح أين في بناء خوارزمية يكون استخدام الإجراء مناسبًا | |
| استخدم المعاملات | قد لا يحتوي الإجراء على معلمات، أو معلمة واحدة، أو أكثر. يمكن تمرير المعلمة عبر المرجع أو عبر القيمة |
| عرّف واستخدم دالةً | |
| اشرح أين في بناء خوارزمية يكون استخدام الدالة مناسبًا | تُستخدم الدالة في تعبير، مثلاً: القيمة المُرجعة تحل محل الاستدعاء |
| استخدم المصطلحات المتعلقة بـ الإجراءات والدوال | بما في ذلك رأس الإجراء/الدالة، واجهة الإجراء/الدالة، المعلمة، الحجة، القيمة المُرجعة |
| اكتب كوداً زائفاً فعالاً |
المصدر: منهج كامبريدج الدولي
البرمجة المنهجية تبني البرنامج من وحدات فرعية صغيرة ذات أسماء، كل منها يؤدي مهمة واحدة.
الإجراء
الإجراء هو كتلة مسماة تقوم بإجراء؛ قد تأخذ معاملات لكنها لا تُرجع قيمة.
PROCEDURE Greet(name : STRING)
OUTPUT "Hello, ", name
ENDPROCEDURE
CALL Greet("Ada")
الدالة
الدالة تشبه الإجراء لكنها ترجع قيمة تصبح جزءًا من تعبير.
FUNCTION Square(x : INTEGER) RETURNS INTEGER
RETURN x * x
ENDFUNCTION
result ← Square(5) + 1 // result = 26
استخدم إجراءً عندما تقوم الوحدة الفرعية بإجراء؛ استخدم دالةً عندما تحسب قيمة للمُطلِق.
يتطلب المنهج أين في بناء الخوارزمية يكون كل منهما مناسباً. الإجراء مناسب حيث تكون نفس مجموعة الخطوات مطلوبة في نقاط متعددة (التحقق من إدخال، طباعة قائمة، تبديل قيمتين): تُكتب الخطوات مرة واحدة وتُستدعى بالاسم CALL. الدالة مناسبة حيث يجب حساب قيمة واحدة ثم استخدامها في تعبير — مجموع، نتيجة TRUE/FALSE، الأكبر بين عددين — لأن القيمة المُرجعة تستبدل الاستدعاء: IF IsValid(Code) THEN.

المعاملات
المعامل هو متغير تعلنه الوحدة الفرعية لاستقبال الإدخال؛ القيم التي يزود بها المُطلَق هي الحجج. طريقتان لنقلهما:
- النقل بالقيمة — تحصل الرoutine على نسخة؛ التغييرات بداخلها لا تؤثر على المُطلِق. استخدمه للإدخالات التي تقرأها فقط.
- النقل بالمعنى — تحصل الرoutine على إشارة إلى متغير المُطلِق؛ التغييرات تؤثر على المُطلِق. استخدمه عندما يجب أن تُحدّث المعامل.
*النقل بالقيمة ينسخ القيمة إلى مربع جديد؛ النقل بالمعنى يسمح للروتين بتغيير متغير المُطلَق نفسه
PROCEDURE Swap(BYREF a : INTEGER, BYREF b : INTEGER)
DECLARE temp : INTEGER
temp ← a
a ← b
b ← temp
ENDPROCEDURE
تكتب كامبردج طريقة النقل في الترويسة، BYVAL أو BYREF، قبل كل معامل. إذا لم يُكتب أيٌّ منهما، يُفترض BYVAL، لذا فإن روتيناً يجب أن يُغيّر متغير المُطلَق — Swap، أو إجراءً يُحدّث المجموع الكلي — يحتاج BYREF في ترويته.
مثال محلول. ما هو المخرجات؟
PROCEDURE Adjust(BYREF X : INTEGER, BYVAL Y : INTEGER)
X ← X + Y
Y ← Y * 2
ENDPROCEDURE
A ← 5
B ← 3
CALL Adjust(A, B)
OUTPUT A, B
X هو مرجع إلى A، لذلك يصبح A مساوياً لـ 8. Y هي نسخة من B، لذا فإن مضاعفة Y تترك B عند 3. المخرجات هي 8, 3. لو كان الترويسة تقول BYVAL X، لكان A لا يزال 5.
المتغيرات المحلية والعالمية
المتغير المحلي يُعلن داخل وحدة فرعية ويوجد فقط أثناء تشغيلها. المتغير العالمي يُعلن خارجها وهو مرئي في كل مكان. يفضل استخدام المتغيرات المحلية والمعاملات — الاستخدام المكثف للمتغيرات العالمية يجعل الكود صعب المتابعة والاختبار. (المنطقة التي يكون فيها الاسم مرئياً هي نطاقه.)
الفرق في سطر واحد: يمكن الوصول للمتغير العالمي من أي مكان في البرنامج، بينما يمكن الوصول للمتغير المحلي فقط داخل الوحدة الفرعية التي تعلنه. فوائد المتغيرات المحلية التي يقبلها المنهج: يمكن استخدام نفس المعرف في وحدة فرعية أخرى دون تصادم؛ لا يمكن تغيير قيمته عن طريق الخطأ بواسطة أجزاء أخرى من البرنامج؛ يتم تحرير الذاكرة عند انتهاء الوحدة الفرعية؛ والوحدة الفرعية مستقلة، لذا يمكن اختبارها بشكل منفرد وإعادة استخدامها في برنامج آخر.
يتم إنشاء المتغير المحلي كل مرة يُستدعى فيها الروتين ويتم تدميره عند إرجاعه، لذا لا يمكنه حمل قيمة من استدعاء إلى الآخر. لذلك، الإجراء الذي يبني نصاً عبر استدعاءات متكررة يحتاج إلى أن يكون هذا النص عالمياً (أو يُمرر BYREF). إذا تم تغيير MyString من متغير عالمي إلى متغير محلي مُعلن داخل MyOutput()، تبدأ كل استدعاء بـ MyString جديد فارغ، يُفقَد النص المضاف بواسطة الاستدعاءات السابقة، ويُصبح الإجراء "لا يعمل كما هو متوقع".
*المتغير المحلي مربع جديد فارغ في كل استدعاء؛ فقط المتغير العالمي (أو المعامل BYREF) يحافظ على قيمة بين الاستدعاءات
*المتغير العالمي مرئي في كل مكان؛ المتغير المحلي يوجد فقط داخل إجرائه الخاص
متى تستخدم وحدة فرعية
استخدم وحدة فرعية عندما:
- تظهر نفس المنطق في أكثر من مكان — اكتبه مرة واحدة، استدعه مرات عديدة.
- للكتلة غرض مسماة واضح — يسجل الاسم ما تفعله.
- البرنامج معقد — قسّمه إلى أجزاء (تحليل تقسيم).
- تريد اختبار جزء بمعزل عنه.
لا تجعلها صغيرة جداً بحيث تتجاوز تكلفة الاستدعاء العمل الموجود بداخلها.
المصطلحات
- تعريف — كتلة
PROCEDURE ... ENDPROCEDURE(أو دالة). - استدعاء — حيث يُنطَق بها. حجة — قيمة تُمرَّر. معامل — المتغير الذي يستقبلها.
- القيمة المُرجعة — ما تمرره الدالة.
- ترويسة إجراء/دالة — السطر الأول الذي يعطي الاسم والمعاملات (
PROCEDURE Name(params)أوFUNCTION Name(params) RETURNS type). - واجهة الإجراء/الدالة / التوقيع — الاسم + المعاملات + نوع الإرجاع: ما يجب أن يعرفه المُدعِي لاستخدامها.
مثال محلول. صف كل مصطلح مستخدم في الترويسة FUNCTION Pass2(Count : INTEGER) RETURNS BOOLEAN.
| المصطلح | المعنى |
|---|---|
FUNCTION |
دالة جزئية تُرجع قيمة |
Pass2 |
المعرّف المستخدم لدعايتها |
Count |
المعامل: المعرّف الذي يستقبل الحجة الممررة إليه |
INTEGER |
النوع البياني للمعامل |
RETURNS BOOLEAN |
النوع البياني للقيمة التي تُرجعها الدالة |
المعرّفان في PROCEDURE MyProc(Count : INTEGER, Message : STRING) هما معاملات: يستقبلان القيم الممررة عند استدعاء الإجراء، ويُستخدمان بداخله كمتغيرات محلية.
لتحويل إجراء إلى دالة: غيّر PROCEDURE إلى FUNCTION وأضف RETURNS <type>؛ استبدل الـ OUTPUT (أو المعامل BYREF الذي حمل النتيجة للخارج) بعبارة RETURN؛ وغير كل استدعاء بحيث تُستخدم القيمة المُرجعة، Result ← Unpack(Text) بدلاً من CALL Unpack(Text, Result). بالنسبة لسؤال "اكتب الترويسة"، اكتب السطر كاملاً: FUNCTION Calculate(Expression : STRING) RETURNS INTEGER. يتم تمرير معامل المصفوفة بالمرجع، لذا فإن الإجراء الذي يكتب في مصفوفة يغير مصفوفة المُنَادِي.
عندما يكتسب برنامج وحدة جديدة، فإن الواجهة هي ما يتم الاتفاق عليه أولاً: الاسم، المعاملات (عددهم، ترتيبهم، أنواعهم) ونوع الإرجاع، بالإضافة إلى أي بيانات عالمية تقرأها الوحدة أو تكتبها. تتطلب الوحدة التي ترسل تذكيراً قبل الموعد النهائي سجل (أو فهارسه) كمعامل ولا تُرجع شيئاً، لذا فهي إجراء؛ ويدعي البرنامج الرئيسيها مرة واحدة لكل سجل.
كتابة وحدة لورقة امتحان 2
نصف ورقة امتحان 2 هو "اكتب خوارزمية زائفة لوحدة X". يمنح المخطط درجة لكل ميزة، لذا فإن الوحدة غير المكتملة لا تزال تحصل على درجات عن كل جزء صحيح. الأجزاء التي يبحث عنها المصحح:

- الترويسة، كما تصفها السؤال:
PROCEDURE Name(Param : TYPE)أوFUNCTION Name(Param : TYPE) RETURNS TYPE، معBYREFحيث يجب أن يغير الروتين الحجة. - الإعلانات المحلية:
DECLAREكل متغير محلي مع نوعه، وتهيئة العدادات والإجماليات (Count ← 0). - الحلقة التي تزور كل عنصر:
FOR Index ← 1 TO 50لمصفوفة حجمها مُعطى؛WHILE NOT EOF(...)لملف. - الشرط، مع المقارنة والحد الصحيحين، على العنصر المناسب:
IF Score[Index] > Limit THEN. - التحديث داخل الفرع: زيادة العداد، تخزين القيمة، أو إخراج الرسالة.
- النهاية:
RETURNمرة واحدة، بعد الحلقة، في دالة؛ENDFUNCTIONأوENDPROCEDURE؛ وإغلاق كلIFوFORوWHILE.
مثال محلول. مصفوفة عالمية Score : ARRAY[1:50] OF INTEGER تحتوي على درجات الاختبار. اكتب دالة CountAbove(Limit : INTEGER) تُرجع عدد الدرجات الأكبر من Limit.
FUNCTION CountAbove(BYVAL Limit : INTEGER) RETURNS INTEGER
DECLARE Index, Count : INTEGER
Count ← 0
FOR Index ← 1 TO 50
IF Score[Index] > Limit THEN
Count ← Count + 1
ENDIF
NEXT Index
RETURN Count
ENDFUNCTION
الدرجات: الترويسة مع معاملها وRETURNS INTEGER؛ Count مُعلَن ومُعدّل إلى 0؛ حلقة تمر على جميع عناصر 50؛ المقارنة > Limit (وليس >=)؛ تحديث العداد داخل IF؛ RETURN Count بعد الحلقة. يستخدم البرنامج الرئيسي قيمة الإرجاع في تعبير أو إخراج: OUTPUT "Above 70: ", CountAbove(70).
مثال محلول. اكتب دالة IsValid(Code : STRING) تُرجع TRUE عندما يكون Code حرفين كبيرين متتاليين يليهما أربعة أرقام — وهو النموذج AB1234 — وتُرجع FALSE بخلاف ذلك.
FUNCTION IsValid(BYVAL Code : STRING) RETURNS BOOLEAN
DECLARE Index : INTEGER
DECLARE Ch : STRING
IF LENGTH(Code) <> 6 THEN
RETURN FALSE
ENDIF
FOR Index ← 1 TO 6
Ch ← MID(Code, Index, 1)
IF Index <= 2 THEN
IF Ch < "A" OR Ch > "Z" THEN
RETURN FALSE
ENDIF
ELSE
IF Ch < "0" OR Ch > "9" THEN
RETURN FALSE
ENDIF
ENDIF
NEXT Index
RETURN TRUE
ENDFUNCTION
يأتي فحص الطول أولاً، لذا لن يُطلب أبداً من MID وضع غير موجود. التحقق مثل هذا يُرجع BOOLEAN حتى يتمكن المُنَادِي من كتابة IF IsValid(Entry) THEN ... ELSE OUTPUT "Invalid code" ENDIF: رسالة للمستخدم يتم إخراجها بواسطة المُنَادِي، وليس بواسطة الدالة — الدالة تحسب، والإجراء يعمل.
مثال محلول. اكتب دالة IsPalindrome(Word : STRING) تُرجع TRUE عندما يُقرأ Word بنفس الطريقة من الخلف، مثل "RACECAR".
قارن الأحرف من الطرفين المتقابلين، متجهًا نحو الداخل: الموضع Index يُقارَن بالموضع Len - Index + 1، ويجب اختبار النصف الأول فقط.

i بالموقع Len - i + 1 ويتوقف عند المنتصفFUNCTION IsPalindrome(BYVAL Word : STRING) RETURNS BOOLEAN
DECLARE Len, Index : INTEGER
Len ← LENGTH(Word)
FOR Index ← 1 TO Len DIV 2
IF MID(Word, Index, 1) <> MID(Word, Len - Index + 1, 1) THEN
RETURN FALSE
ENDIF
NEXT Index
RETURN TRUE
ENDFUNCTION
نفس الأدوات الثلاث — حلقة FOR عبر المواقع، MID(s, i, 1) لقراءة حرف واحد، و& لبناء سلسلة جديدة — تجيب عن معظم وحدات السلاسل في الورقة 2: عدّ تكرار حرف معين (IF MID(s, i, 1) = Ch THEN Count ← Count + 1)، استبدال كل ظهور لحرف (إضافة إما NewChar أو الحرف الأصلي إلى NewString في كل موقع)، إخفاء كل الأرقام باستثناء آخر أربعة أرقام من رقم البطاقة (إضافة '*' لكل موقع حتى Len - 4)، أو كتابة MID() خاص بك بدمج الأحرف من Start إلى Start + Length - 1. طلب MID لموقع خارج نهاية السلسلة هو خطأ وقت التشغيل، لذا تحقق من LENGTH أولاً.
الملفات. تتلاشى القيم في المتغيرات عند انتهاء البرنامج، لذا فإن الوحدة التي يجب أن تحتفظ بالبيانات للتشغيل التالي تكتبها في ملف: OPENFILE "scores.txt" FOR WRITE، سطر WRITEFILE "scores.txt", NUM_TO_STR(Score[Index]) واحد داخل الحلقة، وCLOSEFILE "scores.txt" مرة واحدة، بعد الحلقة؛ القراءة الخلفية تستخدم FOR READ، READFILE وWHILE NOT EOF("scores.txt"). الموضوع 10 يحتوي على القسم الكامل للملفات؛ هنا الدرجات للفتح بالنموذج الصحيح، والقراءة أو الكتابة داخل الحلقة، والإغلاق مرة واحدة بعد ذلك.
مكدس الاستدعاء: دفع عند الاستدعاء، سحب عند الإرجاع
استدعاء الدالة الفرعية يضيف إطاراً جديداً في الأعلى؛ والإرجاع يحذفه ويعيد قيمة إلى المُنشئ. الإجراء الجاري تشغيله هو دائماً الإطار الموجود في الأعلى.
| English | العربية |
|---|---|
| array/əˈreɪ/ | المصفوفة (array) |
| operators/ˈɒpəreɪtəz/ | المعاملات |
| precedence/ˈpresɪdəns/ | أولوية |
| procedure/prəˈsiːdʒə/ | إجراء |
| structured programming/ˈstrʌktʃəd ˈprəʊɡræmɪŋ/ | البرمجة المنسقة |
| subroutines/ˈsʌbruːtiːnz/ | إجراءات جزئية |
| return value/rɪˈtɜːn ˈvæljuː/ | قيمة الإرجاع |
| arguments/ˈɑːɡjuːmənts/ | وسائط |
| pass by value/pæs baɪ ˈvæljuː/ | التمرير بالقيمة |
| pass by reference/pæs baɪ ˈrefrəns/ | التمرير بالإشارة |
| global variable/ˈɡləʊbl ˈveərɪəbl/ | متغير عالمي |
| local variable/ˈləʊkl ˈveərɪəbl/ | متغير محلي |
| scope/skəʊp/ | نطاق |
| decomposition/ˌdiːkɒmpəˈzɪʃn/ | تحلل |
| signature/ˈsɪɡnɪtʃə/ | التوقيع |
| format/ˈfɔːmæt/ | الصيغة |
| Validation/ˌvælɪˈdeɪʃn/ | التحقق من صحة البيانات |
| run-time error/rʌn taɪm ˈerə/ | خطأ وقت التشغيل |
| invariant/ɪnˈveərɪənt/ | ثابت |
| linear search/ˈlɪnɪə sɜːtʃ/ | البحث الخطي |
| syntax error/ˈsɪntæks ˈerə/ | خطأ صياغة |
| IDE/ˌaɪ diː ˈiː/ | بيئة التطوير المتكاملة |
| breakpoint/ˈbreɪkpɔɪnt/ | نقطة توقف |
| single stepping/ˈsɪŋɡl ˈstepɪŋ/ | التنفيذ خطوة بخطوة |
11.3
كتابة خوارزميات زائفة فعالة
ثلاث ميزات تجعل الكود الوهمي أسهل في الفهم — إجابة سؤال "اذكر ثلاث ميزات" — هي المعرفات ذات المعنى (Total، وليس t)، والتنسيق المساحي للعبارات داخل كل بنية، والتعليقات (// ...) التي تشرح الغرض؛ تُقبل أيضًا الكلمات المفتاحية بحروف كبيرة، وعبارة واحدة في كل سطر، وأسطر فارغة بين الأقسام. الكود الوهمي الفعال يتجاوز ذلك:
- نقل الثوابت خارج الحلقات — إذا كانت قيمة (ثابت) لا تتغير مع عداد الحلقة، فاحسبها مرة واحدة قبل الحلقة.
- الخروج من الحلقة مبكراً عند العثور على الإجابة (إيقاف البحث الخطي بمجرد ظهور الهدف).
- تجنب العمل الزائد — احفظ النتيجة وأعد استخدامها بدلاً من إعادة الحساب.
- اختيار البنية المناسبة للبيانات — المصفوفة تفوق المتغيرات المنفصلة العديدة عندما تنتمي العناصر معاً.
- استبدال الشروط المتداخلة العميقة بـ CASE عند اختبار قيمة واحدة مقابل متعددة.
- تعليق النية، وليس الآليات (
// validate the postcode، وليس// loop 6 times). - استخدام أسماء ذات معنى (
numberOfPupils، وليسn) وتهيئة المتغيرات قبل الاستخدام.

11.3
الاختبار والأخطاء
ثلاثة أنواع من الأخطاء، يُكتشف كل منها بطريقة مختلفة:
| الخطأ | ماهيته | مثال | يُكتشف بواسطة |
|---|---|---|---|
| خطأ في الصياغة | عبارة تخالف قواعد اللغة | غياب ENDIF؛ OUTPT "Hi" |
المترجم، قبل تشغيل البرنامج |
| خطأ وقت التشغيل | يعمل البرنامج، لكن لا يمكن تنفيذ عبارة ما | القسمة على صفر؛ فهرس مصفوفة يساوي 0 أو 51؛ استدعاء دالة بمعامل غير صالح؛ حلقة لا تنتهي أبداً، مما يجعل البرنامج "يتجمد" | أثناء التشغيل: يتوقف البرنامج أو يتعلّق |
| خطأ منطقي | يعمل البرنامج حتى النهاية، لكن المخرجات خاطئة | > حيث كان مطلوباً >=؛ مجموع لم يُضبط على 0 |
الاختبار باستخدام جدول التتبع والبيانات التجريبية المختارة |
يساعد بيئة التطوير المتكاملة في اكتشاف النوعين الأخيرين: نقطة التوقف توقف البرنامج عند سطر مختار؛ التنفيذ خطوة بخطوة يشغل بعد ذلك عبارة واحدة في كل مرة؛ وعرض التقرير (أو المراقبة) يوضح قيمة كل متغير في تلك اللحظة، مما يسمح برؤية السطر الذي تتغير فيه القيمة بشكل مباشر. طرق الاختبار والبيانات التجريبية موجودة في الموضوع 12.
11.3
التعريفات التي يقبلها المصحح
السؤال التعريفي يتم تقييمه بناءً على صياغة ثابتة. احفظها بدقة.
| مصطلح | تعريف |
|---|---|
| إجراء فرعي | برنامج جزئي يؤدي مهمة (تسلسل خطوات) ولا يعيد قيمة؛ يُستدعى بـ CALL |
| دالة | برنامج جزئي يعيد قيمة واحدة إلى نقطة استدعائها، لذا يمكن استخدامه في تعبير |
| معامل | المعرف في ترويسة البرنامج الجزئي يستقبل قيمة أو مرجعاً عند استدعاء البرنامج الجزئي |
| حجة | القيمة (أو المتغير) المقدمة في الاستدعاء، والمطابقة للمعامل |
| تمرير بالقيمة | تُعطى نسخة من قيمة الحجة للبرنامج الجزئي، لذا فإن التغييرات بداخله لا تؤثر على المتغير الأصلي |
| تمرير بالمرجع | يُعطى عنوان المتغير للبرنامج الجزئي، لذا فإن التغييرات بداخله تغير المتغير الأصلي |
| ترويسة | السطر الأول من تعريف البرنامج الجزئي: اسمه، ومعاملاته، ونوع الإرجاع بالنسبة للدالة |
| واجهة | ما يجب أن يعرفه البرنامج المُدعِم لاستخدام برنامج جزئي: اسمه، ومعاملاته (عددهم، ترتيبهم، أنواعهم) ونوع الإرجاع |
| قيمة إرجاع | القيمة التي تعيدها الدالة إلى التعبير الذي استدعاها |
| متغير محلي | مُصنّف داخل برنامج جزئي؛ يوجد فقط أثناء تشغيل البرنامج الجزئي ويمكن استخدامه فقط بداخله |
| متغير عالمي | مُصنّف خارج جميع البرامج الجزئية؛ يمكن استخدامه في أي مكان في البرنامج |
| حلقة مسبوقة العداد | تكرار عدد ثابت من المرات، يُتحكم بها عبر عداد (FOR ... NEXT) |
| حلقة شرط مسبق | تختبر شرطها قبل كل دورة، لذا قد لا يُنفذ الجسم أبداً (WHILE ... ENDWHILE) |
| حلقة شرط لاحق | تختبر شرطها بعد كل دورة، لذا يُنفذ الجسم مرة واحدة على الأقل (REPEAT ... UNTIL) |
| ثابت | قيمة مُسمّاة لا يمكن تغييرها أثناء تشغيل البرنامج |
| برنامج جزئي | كتلة مستقلة من الكود تقوم بمهمة ويُستدعى باسمها: إجراء فرعي أو دالة |
| روتين مكتبة | برنامج جزئي كُتب ومُختبر بالفعل ومتاح للاستدعاء من برنامج |
11.3
نصائح للامتحان
- التمييز بين الإجراء الفرعي (بدون قيمة إرجاع) والدالة (تعيد قيمة)؛ معرفة التمرير بالقيمة مقابل المرجع.
- اختيار الحلقة المناسبة: مسبوقة العداد (FOR) عندما يكون عدد التكرارات معلوماً، مشروطة (WHILE/REPEAT) في الحالات الأخرى.
- التمييز بين المتغيرات المحلية والعالمية والنطاق؛ تفضيل المتغيرات المحلية في الوحدات القابلة لإعادة الاستخدام.
- استخدام أسماء الروتين وترتيب المعاملات بدقة كما ورد في الإضافة.
VALوSTRهي أسماء IGCSE ولا تحصل على درجات؛UCASEوLCASEهي روتينات حقيقية 9618 من دليل الكود الوهمي لكنها تعمل على حرف واحد، لذا في ورقة 2 تستغرق السلسلة الكاملةTO_UPPERأوTO_LOWER. - في إجابة "اكتب الكود الوهمي" يحمل الترويسة، والإعلانات، والحلقة، والشرط، والتحديث، و
RETURNكلٌ درجة: اكتب جميع الأجزاء الستة، حتى لو كان أحدها غير مؤكد.
أخطاء شائعة
- استدعاء دالة وعدم استخدام ما تعيده. قم بتعيين النتيجة، أو استخدمها في التعبير أو المخرجات:
Sorted ← BubbleSort(MyArray, 7). - تمرير طول بمقدار واحد:
6لمصفوفة ذات سبع عناصر، أو آخر فهرس كان المطلوب هو الطول. حدد ما إذا كان المعامل طولاً أم فهرساً، وتأكد من زيارة العنصر الأخير. - إغلاق ملف داخل الحلقة التي تقرأه. افتح مرة واحدة، أغلق مرة واحدة، بعد الحلقة.
- استخدام المدخلات مباشرة كاسم ملف. أضف الامتداد الذي قدمته السؤال:
FileName ← Choice & ".txt". - ترك التراكيب مفتوحة. كل
IFيحتاج إلىENDIF، وكلFORإلىNEXT، وكلWHILEإلىENDWHILE، وكل دالة إلىRETURN؛ المخطط يحتوي على علامة لذلك. - حدود خاطئة:
>لـ "على الأقل" (والذي يعني>=)، أوFORيبدأ من0لمصفوفة مُعلَنة[1:50]. - عداد أو مجموع لا يتم تعيينه إلى
0قبل الحلقة. - في جدول التتبع، إعادة كتابة كل متغير في كل صف، أو تغيير قيمة قبل تنفيذ التعليق الذي يغيرها.
- نصف شرط:
IF x = 3 OR 4— يجب أن يكون كل طرف منORوANDمقارنة كاملة. و+لا يربط النصوص؛ بينما&يفعل ذلك. - الإعلان عن قيمة محلياً يجب أن تستمر بين الاستدعاءات. المجموع المتراكم أو النص المبني عبر عدة استدعاءات هو عالمي أو
BYREF.
دروس تفاعلية حول هذا الموضوع
ا-working عليه خطوة بخطوة، مع تمارين تحقق فوري.