Skip to content · ⁨الانتقال إلى المحتوى⁩
Subjects · ⁨المواد⁩
  • 1 Style and layout · ⁨النمط والتنسيق⁩
    1.1

    الكلمات المفتاحية والحالة

    English

    Pseudocode 伪代码 is the language Cambridge writes algorithms 算法 in. It is not a real programming language — no computer runs it — but the exam marks it as if it were, so the form matters.

    Every keyword 关键字 is written in upper case: IF, REPEAT, PROCEDURE, OUTPUT.

    • Write IF, never if or If.
    • A keyword can never be used as a name of your own: you may not call a variable FOR.

    Common mistakes

    • Lower-case keywords. The mark scheme expects upper case.
    • Inventing keywords. Only the words in this handout are in the syllabus.
    العربية

    الكود الوهمي هو اللغة التي تكتب بها كامبريدج الخوارزميات. إنه ليس لغة برمجة حقيقية — لا حاسوب يشغله — لكن الامتحان يمنحه الدرجات وكأنه كذلك، لذلك الصيغة مهمة.

    تُكتب كل كلمة مفتاحية بـحروف كبيرة: IF، REPEAT، PROCEDURE، OUTPUT.

    DECLARE Count : INTEGER
    Count ← 3
    IF Count > 0
      THEN
        OUTPUT "Ready"
    ENDIF
    
    • اكتب IF، ولا تكتب أبدًا if أو If.
    • لا يمكن استخدام الكلمة المفتاحية كاسم خاص بك: لا يمكنك تسمية متغير باسم FOR.

    أخطاء شائعة

    • كلمات مفتاحية بحروف صغيرة. مخطط الدرجات يتوقع الحروف الكبيرة.
    • ابتكار كلمات مفتاحية. فقط الكلمات الموجودة في هذه الورقة مدرجة في المنهج.
    1.2

    المعرّفات

    English

    An identifier 标识符 is the name you give a variable 变量, a constant 常量, a procedure 过程 or a function 函数.

    Four rules, all from the syllabus:

    • It must start with a capital letter: Count, not count.
    • It may hold only letters and digits — no spaces, no punctuation.
    • It is not case-sensitive 不区分大小写, so Count and COUNT are the same name. Pick one spelling and keep it.
    • Make it mean something. NumberOfPlayers earns the reader's time; N does not.

    Common mistakes

    • count ← 0 — a lower-case start. 0478 requires the capital.
    • Number of players — spaces are not allowed inside a name.
    العربية

    المعرّف هو الاسم الذي تعطيه لمتغير، أو ثابت، أو إجراء أو دالة.

    DECLARE NumberOfPlayers : INTEGER
    NumberOfPlayers ← 4
    OUTPUT NumberOfPlayers
    

    أربع قواعد، جميعها من المنهج:

    • يجب أن تبدأ بحرف كبير: Count، وليس count.
    • قد يحتوي فقط على أحرف وأرقام — لا مسافات، لا علامات ترقيم.
    • لا يُحسب الحروف الكبيرة والصغيرة (case-insensitive)، لذا Count وCOUNT هما نفس الاسم. اختر تهجيًا واحدًا وأبقِ عليه.
    • اجعله ذا معنى. NumberOfPlayers يكسب وقت القارئ؛ بينما N لا يفعل ذلك.

    أخطاء شائعة

    • count ← 0 — يبدأ بحرف صغير. يتطلب 0478 الحرف الكبير.
    • Number of players — المسافات غير مسموحة داخل الاسم.
    1.3

    التعليقات والتمديد

    English

    A comment 注释 starts with // and runs to the end of the line. It is for the human reader; the algorithm ignores it.

    Indentation 缩进 shows which statements are inside a structure. The syllabus asks for four spaces per level, with one exception you must know:

    • THEN and ELSE are indented two spaces from their IF.
    • The statements under them are indented four.
    • ENDIF lines up with its own IF.

    Common mistakes

    • Putting THEN on the IF line. That is the A-Level 9618 layout — see topic 11.
    • No indentation at all. A marker has to see the structure to award the structure marks.
    العربية

    يبدأ التعليق بـ// ويستمر حتى نهاية السطر. هو للقارئ البشري؛ الخوارزمية تتجاهله.

    // Swap the values of X and Y
    DECLARE X, Y, Temp : INTEGER
    X ← 1
    Y ← 2
    Temp ← X   // temporarily store X
    X ← Y
    Y ← Temp
    OUTPUT X, " ", Y
    

    التمديد يظهر أي تعليمات تكون داخل بنية. يطلب المنهج أربعة مسافات لكل مستوى، مع استثناء واحد يجب أن تعرفه:

    DECLARE X, Y : INTEGER
    X ← 7
    Y ← 3
    IF X > Y
      THEN
        OUTPUT "X is bigger"
      ELSE
        OUTPUT "Y is bigger or equal"
    ENDIF
    
    • THEN وELSE مساحان بمقدار مسافتين من IF الخاص بهما.
    • التعليمات تحتها يتم تمديدها بمقدار أربعة مسافات.
    • ENDIF محاذاةً مع IF الخاص بها.

    أخطاء شائعة

    • وضع THEN على سطر IF. هذا هو تنسيق A-Level 9618 — انظر الموضوع 11.
    • بدون أي تمديد. يجب أن يرى المصحح البنية لمنح درجات البنية.
  • 2 Variables, constants and types · ⁨المتغيرات والثوابت والأنواع⁩
    2.1

    خمسة أنواع بيانات

    English

    0478 pseudocode has exactly five data types 数据类型. Learn the list — naming a type that is not on it loses the mark.

    Type Holds Example
    INTEGER a whole number 整数 42, -7
    REAL a number with a decimal part 小数 3.14, -0.5
    CHAR a single character 单个字符 'A'
    STRING a sequence of characters 字符串 "Hello"
    BOOLEAN TRUE or FALSE 布尔值 TRUE
    • A STRING is written in double quotes, a CHAR in single quotes.
    • TRUE and FALSE are keywords, so they are upper case and carry no quotes.

    Common mistakes

    • Writing FLOAT, DOUBLE or BOOL. Those are real languages, not this syllabus.
    • 'Hello' for a string — single quotes hold one character only.
    العربية

    الكود الوهمي 0478 يحتوي على خمسة أنواع بيانات بالضبط. احفظ القائمة — تسمية نوع غير موجود فيها يفقد الدرجة.

    النوع يحتوي على مثال
    INTEGER عدد صحيح 42، -7
    REAL عدد يحتوي على جزء عشري 3.14، -0.5
    CHAR حرف واحد 'A'
    STRING تسلسل من الأحرف "Hello"
    BOOLEAN TRUE أو FALSE TRUE
    DECLARE Age : INTEGER
    DECLARE Price : REAL
    DECLARE Grade : CHAR
    DECLARE Name : STRING
    DECLARE Passed : BOOLEAN
    Age ← 17
    Price ← 2.50
    Grade ← 'A'
    Name ← "Mei"
    Passed ← TRUE
    OUTPUT Name, " is ", Age, " and passed: ", Passed
    
    • تُكتب STRING بين علامتي تنصيص مزدوجتين، أما CHAR فتُكتب بين علامتي تنصيص مفردتين.
    • TRUE وFALSE كلمات مفتاحية، لذا تُكتب بحروف كبيرة ولا تحيط بها علامات تنصيص.

    أخطاء شائعة

    • كتابة FLOAT، DOUBLE أو BOOL. هذه لغات حقيقية وليست ضمن هذا المنهج الدراسي.
    • استخدام 'Hello' للنصوص — لأن علامات التنصيص المفردة تحتفظ بحرف واحد فقط.
    2.2

    DECLARE

    English

    DECLARE names a variable 变量 and fixes its type before you use it.

    Several names of one type go on a single line, separated by commas:

    • Declare a variable before its first use, near the top of the algorithm.
    • A variable keeps its type for the whole algorithm — an INTEGER never holds "Mei".

    Common mistakes

    • Leaving out the colon: DECLARE Counter INTEGER.
    • Using a variable that was never declared. The exam expects the declaration.
    العربية

    يُسمّي DECLARE متغيرًا ويحدد نوعه قبل استخدامه.

    DECLARE <identifier> : <data type>
    
    DECLARE Counter : INTEGER
    DECLARE TotalToPay : REAL
    Counter ← 1
    TotalToPay ← 19.99
    OUTPUT "Item ", Counter, " costs ", TotalToPay
    

    عدة أسماء لنفس النوع توضع على سطر واحد، مفصولة بفاصلة:

    DECLARE Length, Width, Area : INTEGER
    Length ← 6
    Width ← 4
    Area ← Length * Width
    OUTPUT "Area = ", Area
    
    • صرّف متغيرًا قبل استخدامه لأول مرة، بالقرب من أعلى الخوارزمية.
    • يحافظ المتغير على نوعه طوال خوارزمية البرمجة — فلا يمكن لمتغير INTEGER أن يحمل قيمة "Mei".

    أخطاء شائعة

    • إهمال النقطتين الرأسيتين: DECLARE Counter INTEGER.
    • استخدام متغير لم يتم تصريفه أبدًا. يتوقع الامتحان التصريف.
    2.3

    CONSTANT

    English

    A constant 常量 is a value that is fixed for the whole algorithm — a tax rate, π, the size of a class. Naming it once means a change is made in one place.

    • In 0478 the arrow is used, exactly as for an assignment.
    • The value must be a literal 字面量 — a number, a string, TRUE — never a calculation and never another variable.
    • A constant can never be given a new value later. That is the whole point of it.

    Common mistakes

    • CONSTANT TaxRate = 0.20. The = form is the A-Level 9618 spelling — see topic 11.
    • Assigning to a constant further down the algorithm.
    العربية

    الثابت هو قيمة ثابتة طوال الخوارزمية — معدل ضريبة، π، حجم الفئة. تسميته مرة واحدة يعني أن التغيير يتم في مكان واحد.

    CONSTANT <identifier> ← <value>
    
    CONSTANT TaxRate ← 0.20
    DECLARE Price, Tax : REAL
    Price ← 50.00
    Tax ← Price * TaxRate
    OUTPUT "Tax to pay: ", Tax
    
    • في 0478 يُستخدم السهم، تمامًا كما في إسناد القيمة.
    • يجب أن تكون القيمة ثابتة نصية — رقم، نص، TRUE — لا عملية حسابية ولا متغير آخر.
    • لا يمكن إعطاء ثابت قيمة جديدة لاحقًا. هذا هو الغرض منه بالكامل.

    أخطاء شائعة

    • CONSTANT TaxRate = 0.20. صيغة = هي الإملاء الصحيح لـ A-Level 9618 — انظر الموضوع 11.
    • إسناد قيمة لثابت لاحقًا في الخوارزمية.
  • 3 Assignment, input and output · ⁨التعيين، الإدخال والإخراج⁩
    3.1

    سهم الإسناد

    English

    The assignment 赋值 operator is ←, a left-pointing arrow. It means take the value on the right and put it in the box on the left.

    Counter ← Counter + 1 looks impossible as mathematics and is ordinary as an instruction: work out the right-hand side with the value the box holds now, then store the result back.

    • If you cannot type ←, write <-. Both are accepted, here and in the exam.
    • The left side must be a single identifier or one array element. Never a calculation.

    Common mistakes

    • Counter = 0. In pseudocode = is a comparison, not an assignment — and confusing the two is the single commonest syntax error in this paper.
    • Counter + 1 ← Counter. The arrow points at the thing being changed.
    العربية

    عامل الإسناد هو ←، وهو سهم يشير إلى اليسار. يعني خذ القيمة على اليمين وضعها في الصندوق على اليسار.

    <identifier> ← <value>
    
    DECLARE Counter : INTEGER
    Counter ← 0
    Counter ← Counter + 1
    Counter ← Counter + 1
    OUTPUT Counter
    

    يبدو Counter ← Counter + 1 مستحيلًا كرياضيات وعادي كتعليمات: احسب الجانب الأيمن باستخدام القيمة التي يحتويها الصندوق الآن، ثم احفظ النتيجة مجددًا.

    • إذا لم تتمكن من كتابة ←، فاكتب <-. كلاهما مقبول هنا وفي الامتحان.
    • يجب أن يكون الجانب الأيسر معرّفًا واحدًا أو عنصر مصفوفة واحد. لا عملية حسابية أبدًا.

    أخطاء شائعة

    • Counter = 0. في الكود الوهمي، = هي عملية مقارنة وليست عملية إسناد — وقد تسبب ارتباكاً. بين الاثنين هو الخطأ النحوي الأكثر شيوعًا في هذا الاختبار.
    • Counter + 1 ← Counter. السهم يشير إلى الشيء الذي يتم تغييره.
    3.2

    INPUT و OUTPUT

    English

    INPUT reads a value from the user into a variable. OUTPUT displays one or more values.

    • INPUT takes exactly one variable, and that variable must already be declared.
    • OUTPUT takes any number of items separated by commas; they are printed one after another with nothing between them.
    • A literal 字面量 string in an OUTPUT goes in double quotes; a variable does not.

    Prompting the user

    An INPUT on its own shows nothing on screen, so a well-written algorithm prints a prompt 提示 first:

    Common mistakes

    • INPUT "Enter a number", X — the prompt is a separate OUTPUT statement.
    • OUTPUT "Total: " + Total. 0478 joins output items with a comma; + is arithmetic and & belongs to A-Level 9618 (topic 11).
    • Forgetting the quotes: OUTPUT Hello looks for a variable called Hello.
    العربية

    يقرأ INPUT قيمةً من المستخدم ويخزنها في متغير. يعرض OUTPUT قيمةً واحدة أو أكثر.

    DECLARE Name : STRING
    DECLARE Age : INTEGER
    INPUT Name
    INPUT Age
    OUTPUT "Hello ", Name
    OUTPUT "Next year you will be ", Age + 1
    
    • يأخذ INPUT متغيرًا واحدًا بالضبط، ويجب أن يكون هذا المتغير قد تم تصريفه بالفعل.
    • تأخذ OUTPUT أي عدد من العناصر مفصولة بـ فواصل؛ وتطبعها واحدة تلو الأخرى. الأخرى دون أي فاصل بينهما.
    • السلسلة الحرفية في OUTPUT توضع بين علامتي تنصيص؛ أما المتغير فلا.

    استدعاء المستخدم

    إن INPUT وحده لا يعرض شيئًا على الشاشة، لذا يجب أن يطبع الخوارزمية الجيدة رسالة تحذيرية أولاً:

    DECLARE Radius : REAL
    OUTPUT "Enter the radius: "
    INPUT Radius
    OUTPUT "The diameter is ", Radius * 2
    

    أخطاء شائعة

    • INPUT "Enter a number", X — الرسالة التحذيرية عبارة عن statement OUTPUT منفصلة.
    • OUTPUT "Total: " + Total. يربط 0478 عناصر المخرجات بفاصلة؛ + عملية حسابية و & ينتمي إلى A-Level 9618 (موضوع 11).
    • نسيان علامات التنصيص: OUTPUT Hello يبحث عن متغير يُدعى Hello.
  • 4 Arithmetic and logic · ⁨العمليات الحسابية والمنطقية⁩
    4.1

    عمليات حسابية

    English

    Five arithmetic 算术 operators, in the order a calculator uses them.

    Operator Meaning A is 7, B is 2
    + add 加 A + B is 9
    - subtract 减 A - B is 5
    * multiply 乘 A * B is 14
    / divide 除 A / B is 3.5
    ^ raise to a power 幂 A ^ B is 49

    Brackets come first, then ^, then * and /, then + and - — the usual precedence 优先级. Use brackets whenever the reader would have to stop and think.

    Common mistakes

    • Expecting / to give a whole number. 7 / 2 is 3.5, not 3; for a whole number use DIV.
    • Writing A x B or A ÷ B. Use * and /.
    العربية

    خمسة مشغلات حسابية، بالترتيب الذي تستخدمه الآلة الحاسبة.

    المشغل المعنى A يساوي 7، B يساوي 2
    + إضافة A + B يساوي 9
    - طرح A - B يساوي 5
    * ضرب A * B يساوي 14
    / قسمة A / B يساوي 3.5
    ^ رفع لأس A ^ B يساوي 49
    DECLARE A, B : INTEGER
    A ← 7
    B ← 2
    OUTPUT "Sum: ", A + B
    OUTPUT "Product: ", A * B
    OUTPUT "Quotient: ", A / B
    OUTPUT "Power: ", A ^ B
    

    الأقواس تأتي أولاً، ثم ^، ثم * و/، ثم + و- — الأولوية المعتادة . استخدم الأقواس كلما كان القارئ سيضطر للتوقف والتفكير.

    DECLARE Total : REAL
    Total ← (12 + 18) / 2
    OUTPUT "Mean: ", Total
    

    أخطاء شائعة

    • انتظار أن يعطي / عدداً صحيحاً. 7 / 2 هو 3.5، وليس 3؛ للحصول على عدد صحيح استخدم DIV.
    • كتابة A x B أو A ÷ B. استخدم * و/.
    4.2

    DIV و MOD

    English

    Integer division 整数除法 answers two different questions, and 0478 writes each of them as a function 函数, with the two values in brackets.

    • DIV(a, b) — how many whole times b goes into a, the quotient 商.
    • MOD(a, b) — what is left over, the remainder 余数.

    Both take integers, and both return an integer.

    What they are for

    MOD is the standard test for divides exactly, which makes it the way to ask whether a number is even 偶数:

    DIV converts a total into whole units — seconds into minutes, pence into pounds:

    Common mistakes

    • 10 MOD 3. That is the A-Level 9618 form; 0478 uses the function form MOD(10, 3).
    • Mixing the two up. DIV gives the whole part; MOD gives what does not fit.
    العربية

    يقدم القسمة الصحيحة إجابتين لسؤالين مختلفين، ويكتب 0478 كل منهما كـ دالة، مع القيمتين بين أقواس.

    • DIV(a, b) — كم مرة تدخل b بشكل كامل في a، أي المقام.
    • MOD(a, b) — ما يتبقى، أي الباقي.
    OUTPUT DIV(10, 3)
    OUTPUT MOD(10, 3)
    OUTPUT DIV(17, 5)
    OUTPUT MOD(17, 5)
    

    كلاهما يأخذ أعداداً صحيحة، وكلاهما يعيد عدداً صحيحاً.

    ما هي الغاية منهما

    MOD هو الاختبار القياسي لـ القابلية للقسمة تماماً، مما يجعله الطريقة لسؤال ما إذا كان العدد زوجياً:

    DECLARE Number : INTEGER
    Number ← 12
    IF MOD(Number, 2) = 0
      THEN
        OUTPUT Number, " is even"
      ELSE
        OUTPUT Number, " is odd"
    ENDIF
    

    DIV يحول المجموع إلى وحدات كاملة — الثواني إلى دقائق، الب Pence إلى الجنيهات:

    DECLARE Seconds : INTEGER
    Seconds ← 200
    OUTPUT DIV(Seconds, 60), " minutes and ", MOD(Seconds, 60), " seconds"
    

    أخطاء شائعة

    • 10 MOD 3. هذا هو نمط A-Level 9618؛ يستخدم 0478 صيغة الدالة MOD(10, 3).
    • خلط الاثنين معاً. DIV يعطي الجزء الصحيح؛ MOD يعطي ما لم يتسع له.
    4.3

    المشغلات النسبية والمنطقية

    English

    A relational operator 关系运算符 compares two values and produces TRUE or FALSE.

    Operator Means
    = is equal to 等于
    <> is not equal to 不等于
    > is greater than 大于
    < is less than 小于
    >= is greater than or equal to 大于等于
    <= is less than or equal to 小于等于

    The three logic operators 逻辑运算符 join conditions:

    • AND — both sides must be TRUE.
    • OR — at least one side must be TRUE.
    • NOT — turns TRUE into FALSE and back.

    Common mistakes

    • <> is the not equal sign here — not !=, which belongs to other languages.
    • IF Age >= 15 AND <= 18. Each side of AND needs its own complete comparison: Age >= 15 AND Age <= 18.
    • Calling these comparison operators in an answer. The syllabus term is relational.
    العربية

    المشغل النسبي يقارن قيمتين وينتج TRUE أو FALSE.

    المشغل المعنى
    = يساوي
    <> لا يساوي
    > أكبر من
    < أصغر من
    >= أكبر من أو يساوي
    <= أصغر من أو يساوي
    DECLARE Mark : INTEGER
    Mark ← 55
    OUTPUT "Pass: ", Mark >= 50
    OUTPUT "Perfect: ", Mark = 100
    OUTPUT "Not zero: ", Mark <> 0
    

    ثلاثة مشغلات منطقية تربط الشروط:

    • AND — يجب أن يكون كلا الطرفين TRUE.
    • OR — يجب أن يكون الضلع على الأقل TRUE.
    • NOT — يحول TRUE إلى FALSE ويعود به.
    DECLARE Age : INTEGER
    DECLARE HasTicket : BOOLEAN
    Age ← 16
    HasTicket ← TRUE
    IF Age >= 15 AND HasTicket = TRUE
      THEN
        OUTPUT "Admitted"
    ENDIF
    IF NOT (Age > 18)
      THEN
        OUTPUT "Still a student rate"
    ENDIF
    

    أخطاء شائعة

    • <> هو رمز لا يساوي هنا — وليس !=، الذي ينتمي لغات أخرى.
    • IF Age >= 15 AND <= 18. يحتاج كل ضلع من AND إلى مقارنة كاملة خاصة به: Age >= 15 AND Age <= 18.
    • تسمية هذه بـ مشغلات المقارنة في إجابة. المصطلح المنهاجي هو نسبي.
  • 5 String operations · ⁨عمليات السلاسل النصية⁩
    5.1

    LENGTH و UCASE و LCASE

    English

    0478 publishes four string 字符串 routines and no others. Three of them are here.

    LENGTH(<identifier>) returns how many characters 字符 a string holds — spaces included.

    UCASE(<identifier>) returns the string in upper case 大写, LCASE(<identifier>) in lower case 小写. Neither changes the original 原值 — each hands back a new value.

    That last line still prints Happy: to keep the change you must assign it back.

    Comparing without worrying about case

    UCASE on both sides is the standard way to accept an answer however it was typed:

    Common mistakes

    • Expecting UCASE(Name) to change Name. Assign the result back.
    • LENGTH counts characters, not words. LENGTH("Happy Days") is 10.
    العربية

    ينشر 0478 أربع رواتب نصوص ولا غير. ثلاثة منها موجودان هنا.

    LENGTH(<identifier>) تُرجع عدد الأحرف التي يحتويها النص — بما في ذلك المسافات.

    OUTPUT LENGTH("Happy Days")
    OUTPUT LENGTH("")
    

    UCASE(<identifier>) تُرجع النص بحروف كبيرة، بينما LCASE(<identifier>) بحروف صغيرة. لا أحدهما يغير الأصل — كل منهما يعيد قيمة جديدة.

    DECLARE Name : STRING
    Name ← "Happy"
    OUTPUT UCASE(Name)
    OUTPUT LCASE(Name)
    OUTPUT Name
    

    لا يزال السطر الأخير يطبع Happy: للحفاظ على التغيير يجب إعادة تعيينه.

    DECLARE Name : STRING
    Name ← "Happy"
    Name ← UCASE(Name)
    OUTPUT Name
    

    المقارنة دون القلق بشأن حالة الأحرف

    استخدام UCASE على كلا الطرفين هو الطريقة القياسية لقبول الإجابة بغض النظر عن كيفية كتابتها:

    DECLARE Answer : STRING
    Answer ← "yes"
    IF UCASE(Answer) = "YES"
      THEN
        OUTPUT "Accepted"
    ENDIF
    

    أخطاء شائعة

    • توقع أن تقوم UCASE(Name) بتغيير Name. أعد تعيين النتيجة.
    • LENGTH تحسب الأحرف، وليس الكلمات. LENGTH("Happy Days") تساوي 10.
    5.2

    SUBSTRING

    English

    SUBSTRING(<identifier>, <start>, <length>) pulls a piece out of a string — starting at position start, taking length characters.

    ⚠️ Counting starts at 1, not 0. The first character of "Happy Days" is at position 1.

    Taking one character, and the rest

    LENGTH inside SUBSTRING is what makes the last two lines work for a word of any size — hard-coding 8 would break the moment the word changed.

    Reading a string one character at a time

    Common mistakes

    • Starting at 0. Position 1 is the first character.
    • Reading the third argument as an end position. It is a count — SUBSTRING(W, 2, 3) takes three characters beginning at the second.
    • Asking for more characters than the string has.
    العربية

    SUBSTRING(<identifier>, <start>, <length>) تستخرج قطعة من النص — بدءاً من الموضع start، مع أخذ length أحرف.

    OUTPUT SUBSTRING("Happy Days", 1, 5)
    OUTPUT SUBSTRING("Happy Days", 7, 4)
    

    ⚠️ يبدأ العد من 1، وليس 0. الحرف الأول لـ "Happy Days" يقع في الموقع 1.

    أخذ حرف واحد والباقي

    DECLARE Word : STRING
    Word ← "Computer"
    OUTPUT "First letter: ", SUBSTRING(Word, 1, 1)
    OUTPUT "Last letter: ", SUBSTRING(Word, LENGTH(Word), 1)
    OUTPUT "Without the first: ", SUBSTRING(Word, 2, LENGTH(Word) - 1)
    

    LENGTH داخل SUBSTRING هو ما يجعل السطرين الأخيرين يعملان لكلمة بأي حجم — التثبيت الصارم لـ 8 سيؤدي إلى فشل الأمر بمجرد تغير الكلمة.

    قراءة نص حرفاً تلو الآخر

    DECLARE Word : STRING
    DECLARE Index : INTEGER
    Word ← "Cat"
    FOR Index ← 1 TO LENGTH(Word)
        OUTPUT SUBSTRING(Word, Index, 1)
    NEXT Index
    

    أخطاء شائعة

    • البدء من 0. الموقع 1 هو الحرف الأول.
    • قراءة الحجة الثالثة كـ موقع نهاية. إنه عدد — SUBSTRING(W, 2, 3) تأخذ ثلاثة أحرف تبدأ من الثاني.
    • طلب أحرف أكثر مما يحتويه النص.
  • 6 Selection · ⁨الاختيار⁩
    6.1

    IF, THEN, ELSE, ENDIF

    English

    Selection 选择 runs one group of statements or another, depending on a condition 条件.

    Add ELSE for the other case. Exactly one of the two branches 分支 runs — never both, never neither.

    The layout is the one part students lose marks on, so learn it as a shape:

    • IF and its condition on one line, nothing after the condition.
    • THEN and ELSE on their own lines, indented two spaces.
    • The statements indented four.
    • ENDIF back at the column of its IF.

    Nesting 嵌套

    An IF inside an IF handles more than two outcomes. Each one needs its own ENDIF.

    Common mistakes

    • Forgetting ENDIF. Every IF closes, and a missing one is a syntax error 语法错误 the marker will see at a glance.
    • IF Mark >= 50 THEN OUTPUT "Pass" on one line. No such form exists in either syllabus; write the three lines.
    • IF Mark = 50 THEN written as IF Mark ← 50. The arrow assigns; = compares.
    العربية

    الاختيار يشغل مجموعة واحدة من التعليمات أو أخرى، اعتماداً على شرط.

    IF <condition>
      THEN
        <statements>
    ENDIF
    
    DECLARE Mark : INTEGER
    Mark ← 72
    IF Mark >= 50
      THEN
        OUTPUT "Pass"
    ENDIF
    

    أضف ELSE للحالة الأخرى. يتم تشغيل فرع واحد فقط من الفرعين — لا كلاهما، ولا neither. التخطيط هو الجزء الذي يفقد الطلاب عليه درجات، لذا احفظه كشكل:

    DECLARE Mark : INTEGER
    Mark ← 41
    IF Mark >= 50
      THEN
        OUTPUT "Pass"
      ELSE
        OUTPUT "Fail"
    ENDIF
    

    التخطيط هو الجزء الذي يفقد الطلاب عليه الدرجات، لذا احفظه كشكل:

    • IF وشروطه في سطر واحد، لا شيء بعد الشرط.
    • THEN و ELSE في أسطر مستقلة، مسافة بادئة اثنين من المسافات.
    • العبارات المسبوقة بمسافة بادئة أربع.
    • ENDIF يعود إلى عمود IF الخاص بها.

    التداخل

    يُعالج IF داخل IF أكثر من نتيجتين. لكل واحدة تحتاج إلى ENDIF خاص بها.

    DECLARE Mark : INTEGER
    Mark ← 85
    IF Mark >= 80
      THEN
        OUTPUT "Distinction"
      ELSE
        IF Mark >= 50
          THEN
            OUTPUT "Pass"
          ELSE
            OUTPUT "Fail"
        ENDIF
    ENDIF
    

    أخطاء شائعة

    • نسيان ENDIF. كل IF يُغلق، والواحد المفقود هو خطأ في الصياغة الذي المؤشر سيراه على الفور.
    • IF Mark >= 50 THEN OUTPUT "Pass" في سطر واحد. لا يوجد مثل هذا النمط في أي من المناهج؛ اكتب الأسطر الثلاثة.
    • IF Mark = 50 THEN مكتوبة كـ IF Mark ← 50. السهم يقوم بالتعيين؛ = تقوم بالمقارنة.
    6.2

    حالة

    English

    When one variable is tested against several single values, CASE OF says it far more clearly than a stack of nested IFs.

    • Each branch is a value, a colon, then what to do.
    • OTHERWISE catches everything the listed values missed. It is optional, and writing one is good practice — it is what happens when the user types something unexpected.
    • The first matching branch runs, and the rest are skipped.

    A range, and a character

    Common mistakes

    • Using CASE OF for a condition. It tests one variable against values; Mark >= 50 needs an IF.
    • Forgetting ENDCASE.
    • Leaving out OTHERWISE and then wondering why an unexpected value does nothing at all.
    العربية

    كومة من CASE OF المتداخلة. وضوحًا أكثر من مجموعة متداخلة من IF.

    CASE OF <identifier>
        <value 1> : <statement>
        <value 2> : <statement>
        OTHERWISE <statement>
    ENDCASE
    
    DECLARE Choice : INTEGER
    Choice ← 2
    CASE OF Choice
        1 : OUTPUT "You chose north"
        2 : OUTPUT "You chose south"
        3 : OUTPUT "You chose east"
        4 : OUTPUT "You chose west"
        OTHERWISE OUTPUT "That is not a direction"
    ENDCASE
    
    • كل فرع يمثل قيمة، ثم علامتي تنصيص، وما يجب فعله.
    • OTHERWISE يلتقط كل ما فاتت القيم المدرجة. وهو اختياري، وكتابة واحد منه يعتبر ممارسة جيدة — لأنه يحدث عندما يكتب المستخدم شيئًا غير متوقع.
    • يتم تنفيذ الفرع الأول المطابق، ويتم تجاهل البقية.

    نطاق، وحرف

    DECLARE Grade : CHAR
    Grade ← 'B'
    CASE OF Grade
        'A' : OUTPUT "Excellent"
        'B' : OUTPUT "Good"
        'C' : OUTPUT "Satisfactory"
        OTHERWISE OUTPUT "Unclassified"
    ENDCASE
    

    أخطاء شائعة

    • استخدام CASE OF كـ شرط. فهو يختبر متغيرًا واحدًا مقابل قيم؛ بينما Mark >= 50 يتطلب وجود IF.
    • نسيان ENDCASE.
    • نسيان OTHERWISE ثم التساؤل لماذا قيمة غير متوقعة لا تفعل شيئًا على الإطلاق.
  • 7 Iteration · ⁨التكرار⁩
    7.1

    FOR، حلقة العد

    English

    Iteration 迭代 repeats statements. Use a FOR loop when you know before you start how many times — a count-controlled 计数控制 loop.

    The counter 计数器 starts at the first value, and the loop runs once for every value up to and including the second. 1 TO 5 runs five times.

    STEP

    STEP changes the size of each jump. A negative step counts down.

    Running totals

    The commonest use: a variable outside the loop that the loop adds to.

    Total ← 0 must sit before the loop. Inside, it would reset on every pass.

    Common mistakes

    • NEXT naming the wrong counter. Nested loops must close in the reverse order they opened: the inner NEXT first.
    • Assuming 1 TO 5 runs four times. Both ends are included.
    • Changing the counter inside the loop. Let FOR own it.
    العربية

    التكرار يعيد تنفيذ الجمل. استخدم حلقة FOR عندما تعرف قبل البدء كم مرة — حلقة تحكم بعدد التكرارات.

    FOR <identifier> ← <value1> TO <value2>
        <statements>
    NEXT <identifier>
    
    DECLARE Index : INTEGER
    FOR Index ← 1 TO 5
        OUTPUT "Line ", Index
    NEXT Index
    

    يبدأ العداد من القيمة الأولى، وتعمل الحلقة مرة لكل قيمة حتى وتشمل القيمة الثانية. 1 TO 5 يعمل خمس مرات.

    STEP (الخطوة)

    STEP يغير حجم كل قفزة. خطوة سالبة تحسب تنازليًا.

    DECLARE Index : INTEGER
    FOR Index ← 2 TO 10 STEP 2
        OUTPUT Index
    NEXT Index
    FOR Index ← 3 TO 1 STEP -1
        OUTPUT "Countdown ", Index
    NEXT Index
    

    المجاميع المتراكمة

    استخدامها الأكثر شيوعًا: متغير خارج الحلقة يضيف إليه Loop.

    DECLARE Index, Total : INTEGER
    Total ← 0
    FOR Index ← 1 TO 10
        Total ← Total + Index
    NEXT Index
    OUTPUT "Sum of 1 to 10 is ", Total
    

    يجب أن يكون Total ← 0 قبل الحلقة. داخلها، سيقوم بإعادة تعيينه في كل دورة.

    أخطاء شائعة

    • NEXT تسمية العداد الخاطئ. الحلقات المتداخلة يجب أن تُغلق عكسًا ترتيب فتحها: NEXT الداخلي أولًا.
    • افتراض أن 1 TO 5 يعمل أربع مرات. كلا الطرفين مشمولان.
    • تغيير العداد داخل الحلقة. دع FOR يتحكم فيه.
    7.2

    WHILE، حلقة الشرط المسبق

    English

    A WHILE loop tests before each pass, so it can run zero times. Use it when the number of repeats depends on something that happens while the loop runs.

    Something inside the loop must eventually make the condition false, or the loop never ends — an infinite loop 无限循环.

    Common mistakes

    • Forgetting to change the variable the condition tests, giving an infinite loop.
    • Leaving out DO or ENDWHILE.
    • Using WHILE where the count is known. A FOR says what you mean in one line.
    العربية

    حلقة WHILE تختبر قبل كل دورة، لذا يمكن أن تعمل صفر مرات. استخدمها عندما عدد التكرارات يعتمد على شيء يحدث أثناء عمل الحلقة.

    WHILE <condition> DO
        <statements>
    ENDWHILE
    
    DECLARE Total : INTEGER
    Total ← 1
    WHILE Total < 100 DO
        Total ← Total * 2
    ENDWHILE
    OUTPUT "First power of two past 100: ", Total
    

    شيء داخل الحلقة يجب أن يجعل الشرط خاطئًا في النهاية، أو لن تنتهي الحلقة — حلقة لا نهائية.

    DECLARE Count : INTEGER
    Count ← 5
    WHILE Count > 0 DO
        OUTPUT Count
        Count ← Count - 1
    ENDWHILE
    OUTPUT "Lift off"
    

    أخطاء شائعة

    • نسيان تغيير المتغير الذي يختبره الشرط، مما يعطي حلقة لا نهائية.
    • نسيان DO أو ENDWHILE.
    • استخدام WHILE حيث العدد معروف. FOR يقول ما تعنيه في سطر واحد.
    7.3

    REPEAT، حلقة الشرط اللاحق

    English

    A REPEAT loop tests after each pass, so it always runs at least once.

    That "at least once" is the reason to choose it: validating 验证 input, where you must ask before you can judge the answer.

    ⚠️ UNTIL states the condition that stops the loop; WHILE states the one that keeps it going. They are opposites, and swapping them is the classic error.

    Tests Runs at least once? Condition means
    FOR a counter no (an empty range runs zero times) —
    WHILE before no keep going while this is true
    REPEAT after yes stop when this becomes true

    Common mistakes

    • Writing UNTIL Number < 100 when you mean UNTIL Number >= 100.
    • Using REPEAT where the body must be able to run zero times.
    • Forgetting that UNTIL ends the structure — there is no ENDREPEAT.
    العربية

    حلقة REPEAT تختبر بعد كل دورة، لذا تعمل دائمًا مرة واحدة على الأقل.

    REPEAT
        <statements>
    UNTIL <condition>
    

    هذه "مرة واحدة على الأقل" هي السبب لاختيارها: التحقق من الإدخال، حيث يجب عليك السؤال قبل الحكم على الإجابة.

    DECLARE Number : INTEGER
    Number ← 0
    REPEAT
        Number ← Number + 25
        OUTPUT "Trying ", Number
    UNTIL Number >= 100
    OUTPUT "Reached ", Number
    

    ⚠️ UNTIL يحدد الشرط الذي يوقف الحلقة؛ WHILE يحدد الذي يبقيها مستمرة. هما متعاكسان، واستبدالهما هو الخطأ الكلاسيكي.

    اختبارات تعمل مرة واحدة على الأقل؟ الشرط يعني
    FOR عداد لا (النطاق الفارغ يعمل صفر مرة) —
    WHILE قبل لا استمر طالما هذا صحيح
    REPEAT بعد نعم توقف عندما يصبح هذا صحيحًا

    أخطاء شائعة

    • كتابة UNTIL Number < 100 بينما تقصد UNTIL Number >= 100.
    • استخدام REPEAT حيث يجب أن تكون القدرة على العمل صفر مرة للجزء الرئيسي.
    • نسيان أن UNTIL ينهي البنية — لا يوجد ENDREPEAT.
  • 8 Arrays · ⁨المصفوفات⁩
    8.1

    المصفوفات أحادية البعد

    English

    An array 数组 holds many values of one type under one name. Each value sits at an index 下标.

    • The bounds 边界 are written lower:upper, and both are included — [1:3] has three elements 元素.
    • Cambridge arrays normally start at 1, not 0.
    • Every element has the same type, fixed by OF.

    Filling and reading with a FOR loop

    An array and a counted loop belong together: the counter is the index.

    Finding the largest

    Start Largest at the first element, never at 0 — with negative data, 0 would win and the answer would be wrong.

    Common mistakes

    • Reading Scores[6] from an array declared [1:5]. That is out of bounds 越界.
    • Writing Scores(3). Arrays use square brackets; round brackets call a function.
    • Declaring [1:5] and then looping 0 TO 4.
    العربية

    المصفوفة تحتفظ بالعديد من القيم من نوع واحد تحت اسم واحد. كل قيمة تقع عند فهرس.

    DECLARE <identifier> : ARRAY[<lower>:<upper>] OF <data type>
    
    DECLARE Names : ARRAY[1:3] OF STRING
    Names[1] ← "Mei"
    Names[2] ← "Sam"
    Names[3] ← "Ana"
    OUTPUT Names[2]
    
    • الحدود تُكتب lower:upper، وكلا الطرفين مشمولان — [1:3] لديه ثلاثة عناصر.
    • مصفوفات كامبريدج تبدأ عادةً من 1، وليس 0.
    • كل عنصر له نفس النوع، محدد بواسطة OF.

    ملء وقراءة باستخدام حلقة FOR

    المصفوفة وحلقة العد تابعة لبعضها البعض: العداد هو الفهرس.

    DECLARE Scores : ARRAY[1:5] OF INTEGER
    DECLARE Index, Total : INTEGER
    FOR Index ← 1 TO 5
        Scores[Index] ← Index * 10
    NEXT Index
    Total ← 0
    FOR Index ← 1 TO 5
        Total ← Total + Scores[Index]
    NEXT Index
    OUTPUT "Total: ", Total
    OUTPUT "Mean: ", Total / 5
    

    إيجاد الأكبر

    DECLARE Scores : ARRAY[1:5] OF INTEGER
    DECLARE Index, Largest : INTEGER
    Scores[1] ← 42
    Scores[2] ← 17
    Scores[3] ← 93
    Scores[4] ← 8
    Scores[5] ← 55
    Largest ← Scores[1]
    FOR Index ← 2 TO 5
        IF Scores[Index] > Largest
          THEN
            Largest ← Scores[Index]
        ENDIF
    NEXT Index
    OUTPUT "Largest: ", Largest
    

    ابدأ Largest من العنصر الأول، لا من 0 — مع البيانات السالبة، 0 سيفوز و الإجابة ستكون خاطئة.

    أخطاء شائعة

    • قراءة Scores[6] من مصفوفة تم الإعلان عنها بـ [1:5]. هذا يعتبر خارج النطاق المسموح به.
    • كتابة Scores(3). المصفوفات تستخدم أقواس مربعة؛ الأقواس الدائرية تستدعي دالة.
    • إعلان [1:5] ثم تكرار 0 TO 4.
    8.2

    المصفوفات ثنائية البعد

    English

    A 2-D array 二维数组 is a table: rows and columns, two indexes.

    The first index is the row 行, the second the column 列.

    Nested loops walk a table

    One loop per dimension 维度. The inner loop finishes a whole row before the outer moves on.

    ⚠️ The inner NEXT closes the inner counter. NEXT Row before NEXT Col crosses the loops over and is nonsense — a marker spots it instantly.

    Common mistakes

    • Swapping row and column. Grid[2,3] is row 2, column 3.
    • Grid[Row][Col]. Cambridge writes one pair of brackets with a comma inside.
    • Crossing the NEXT lines over, as above.
    العربية

    مصفوفة 2-D هي جدول: صفوف وأعمدة، فهرسين.

    DECLARE <identifier> : ARRAY[<lower1>:<upper1>, <lower2>:<upper2>] OF <data type>
    
    DECLARE Grid : ARRAY[1:2, 1:3] OF INTEGER
    Grid[1,1] ← 1
    Grid[1,2] ← 2
    Grid[1,3] ← 3
    Grid[2,1] ← 4
    Grid[2,2] ← 5
    Grid[2,3] ← 6
    OUTPUT Grid[2,3]
    

    الفهرس الأول هو الصف، الفهرس الثاني هو العمود.

    الحلقات المتداخلة تمر عبر الجدول

    حلقة واحدة لكل بُعد. تنتهي الحلقة الداخلية صفًا كاملًا قبل أن تتقدم الخارجية.

    DECLARE Grid : ARRAY[1:2, 1:3] OF INTEGER
    DECLARE Row, Col : INTEGER
    FOR Row ← 1 TO 2
        FOR Col ← 1 TO 3
            Grid[Row, Col] ← Row * Col
        NEXT Col
    NEXT Row
    FOR Row ← 1 TO 2
        FOR Col ← 1 TO 3
            OUTPUT "Grid[", Row, ",", Col, "] = ", Grid[Row, Col]
        NEXT Col
    NEXT Row
    

    ⚠️ يُغلق NEXT الداخلي العداد الداخلي. أما NEXT Row قبل NEXT Col فيقطع المسار عبر الحلقات ويصبح غير منطقي — marker يكتشفه فورًا.

    أخطاء شائعة

    • تبديل الصف والعمود. Grid[2,3] هو الصف 2، العمود 3.
    • Grid[Row][Col]. كامبريدج يكتب زوجًا واحدًا من الأقواس بفاصلة بداخلها.
    • عبور خطوط NEXT فوق بعضها، كما في الأعلى.
  • 9 Procedures and functions · ⁨الإجراءات والدوال⁩
    9.1

    PROCEDURE و CALL

    English

    A procedure 过程 is a named block of statements. Writing one once and calling it from several places is decomposition 分解 — the idea the whole of paper 2 rests on.

    A procedure is called by name, with the keyword CALL:

    • The definition 定义 does nothing on its own. Only CALL runs it.
    • Control returns to the line after the CALL when the procedure ends.
    • A procedure does not give a value back. If you need one, you want a function.

    Common mistakes

    • Writing DefaultLine on its own to run it. 0478 requires CALL.
    • Leaving out ENDPROCEDURE.
    • Expecting the procedure's own variables to exist outside it.
    العربية

    الإجراء هو كتلة مسماة من الجمل. كتابته مرة واحدة واستدعائه من عدة أماكن هو التجزئة — الفكرة التي يرتكز عليها ورقة 2 بأكملها.

    PROCEDURE <identifier>
        <statements>
    ENDPROCEDURE
    

    يتم استدعاء الإجراء باسمه، بكلمة CALL:

    PROCEDURE DefaultLine
        OUTPUT "------------------------------"
    ENDPROCEDURE
    
    CALL DefaultLine
    OUTPUT "Report"
    CALL DefaultLine
    
    • التعريف لا يفعل شيئًا بمفرده. فقط CALL يشغله.
    • يعود التحكم إلى السطر بعد CALL عند انتهاء الإجراء.
    • الإجراء لا يعيد قيمة. إذا كنت بحاجة إليها، فأنت تريد دالة.

    أخطاء شائعة

    • كتابة DefaultLine بمفرده لتشغيله. يتطلب 0478 CALL.
    • نسيان ENDPROCEDURE.
    • توقع وجود متغيرات الإجراء الخاصة به خارجه.
    9.2

    FUNCTION و RETURN

    English

    A function 函数 is a procedure that hands a value back. It is written where that value is needed — inside an OUTPUT, on the right of an assignment, inside a condition.

    • RETURNS <data type> on the header says what type comes back. It is not optional.
    • RETURN ends the function immediately — nothing after it runs.
    • A function is never called with CALL; it is used wherever its value belongs.

    A function inside a condition

    Common mistakes

    • CALL SumSquare(10, 20) — that throws the answer away.
    • A function with no RETURN on some path. Every route out must return a value.
    • Leaving RETURNS INTEGER off the header.
    العربية

    الدالة هي إجراء يعيد قيمة. تُكتب حيث هذه القيمة مطلوبة — داخل OUTPUT، على يمين عملية إسناد، داخل شرط.

    FUNCTION <identifier>(<parameters>) RETURNS <data type>
        <statements>
        RETURN <value>
    ENDFUNCTION
    
    FUNCTION SumSquare(Number1 : INTEGER, Number2 : INTEGER) RETURNS INTEGER
        RETURN Number1 * Number1 + Number2 * Number2
    ENDFUNCTION
    
    OUTPUT "Sum of squares = ", SumSquare(10, 20)
    
    • RETURNS <data type> في التروية يقول ما النوع العائد. ليس اختياريًا.
    • RETURN ينهي الدالة فورًا — لا شيء بعدها يعمل.
    • لا تُستدعي الدالة أبدًا بـ CALL؛ تُستخدم أينما تنتمي قيمتها.

    دالة داخل شرط

    FUNCTION IsEven(Number : INTEGER) RETURNS BOOLEAN
        RETURN MOD(Number, 2) = 0
    ENDFUNCTION
    
    DECLARE Index : INTEGER
    FOR Index ← 1 TO 6
        IF IsEven(Index)
          THEN
            OUTPUT Index, " is even"
        ENDIF
    NEXT Index
    

    أخطاء شائعة

    • CALL SumSquare(10, 20) — ذلك يرمي الإجابة.
    • دالة بدون RETURN في بعض المسارات. يجب أن ترجع كل طريق خروج قيمة.
    • نسيان RETURNS INTEGER في التروية.
    9.3

    المعاملات

    English

    A parameter 参数 is a value a procedure or function is given when it is called. Each one carries its own type.

    Several parameters are separated by commas, and the order at the call must match the order in the definition:

    ⚠️ In 0478 every parameter is passed by value 传值: the procedure works on a copy, so changing it inside changes nothing outside. To get a value back, use a FUNCTION and RETURN it. (A-Level 9618 adds BYREF for the other behaviour — topic 11.)

    Common mistakes

    • PROCEDURE Line(Size) with no type.
    • Calling with the arguments in the wrong order — Greet(2, "Mei") is a type error.
    • Expecting a procedure to change the variable you passed in. In 0478 it cannot.
    العربية

    المعامل هو قيمة يتم إعطاؤها لإجراء أو دالة عند استدعائها. كل واحد يحمل نوعه الخاص.

    PROCEDURE Line(Size : INTEGER)
        DECLARE Index : INTEGER
        FOR Index ← 1 TO Size
            OUTPUT "-"
        NEXT Index
    ENDPROCEDURE
    
    CALL Line(5)
    CALL Line(20)
    

    تُفصل عدة معاملات بفواصل، ويجب أن يتطابق الترتيب عند الاستدعاء مع الترتيب في التعريف:

    PROCEDURE Greet(Name : STRING, Times : INTEGER)
        DECLARE Index : INTEGER
        FOR Index ← 1 TO Times
            OUTPUT "Hello ", Name
        NEXT Index
    ENDPROCEDURE
    
    CALL Greet("Mei", 2)
    CALL Greet("Sam", 1)
    

    ⚠️ في 0478 كل معامل يُمرر بالقيمة: يعمل الإجراء على نسخة، لذا تغييره داخليًا لا يغير شيئًا خارجيًا. للحصول على قيمة، استخدم FUNCTION و RETURN . (أ-Level 9618 يضيف BYREF للسلوك الآخر — الموضوع 11.)

    FUNCTION Doubled(Number : INTEGER) RETURNS INTEGER
        RETURN Number * 2
    ENDFUNCTION
    
    DECLARE Value : INTEGER
    Value ← 7
    Value ← Doubled(Value)
    OUTPUT Value
    

    أخطاء شائعة

    • PROCEDURE Line(Size) بدون نوع.
    • استدعاء الدالة بالمتغيرات في ترتيب خاطئ — يُعد Greet(2, "Mei") خطأً من نوع البيانات.
    • توقع أن تقوم الإجراء بتغيير المتغير الذي مررته. في 0478 لا يمكنه ذلك.
  • 10 File handling · ⁨معالجة الملفات⁩
    10.1

    Writing to a file

    English

    A file 文件 keeps data after the program ends. 0478 uses four commands, and every one names the file it works on.

    Three file modes 文件模式:

    Mode What it does
    WRITE start a new file — anything already there is lost
    APPEND add to the end of what is there 追加
    READ read from the start
    • One WRITEFILE writes one line.
    • CLOSEFILE is not optional. An unclosed file can lose the data still waiting to be written, and that is a stock exam answer.

    Common mistakes

    • FOR WRITE when you meant FOR APPEND, which silently destroys the old contents.
    • Forgetting CLOSEFILE.
    • Opening a file that is already open.
    العربية

    A file 文件 keeps data after the program ends. 0478 uses four commands, and every one names the file it works on.

    OPENFILE <file identifier> FOR WRITE
    WRITEFILE <file identifier>, <data>
    CLOSEFILE <file identifier>
    
    OPENFILE "names.txt" FOR WRITE
    WRITEFILE "names.txt", "Mei"
    WRITEFILE "names.txt", "Sam"
    CLOSEFILE "names.txt"
    OUTPUT "Saved"
    

    Three file modes 文件模式:

    Mode What it does
    WRITE start a new file — anything already there is lost
    APPEND add to the end of what is there 追加
    READ read from the start
    OPENFILE "log.txt" FOR WRITE
    WRITEFILE "log.txt", "first"
    CLOSEFILE "log.txt"
    OPENFILE "log.txt" FOR APPEND
    WRITEFILE "log.txt", "second"
    CLOSEFILE "log.txt"
    OUTPUT "Both lines saved"
    
    • One WRITEFILE writes one line.
    • CLOSEFILE is not optional. An unclosed file can lose the data still waiting to be written, and that is a stock exam answer.

    Common mistakes

    • FOR WRITE when you meant FOR APPEND, which silently destroys the old contents.
    • Forgetting CLOSEFILE.
    • Opening a file that is already open.
    10.2

    Reading a file to the end

    READFILE takes one line into a variable. The variable must be declared first.

    OPENFILE <file identifier> FOR READ
    READFILE <file identifier>, <variable>
    CLOSEFILE <file identifier>
    

    Normally you do not know how many lines there are, so you read until the end of the file — which is what the EOF function reports.

    OPENFILE "names.txt" FOR WRITE
    WRITEFILE "names.txt", "Mei"
    WRITEFILE "names.txt", "Sam"
    WRITEFILE "names.txt", "Ana"
    CLOSEFILE "names.txt"
    
    DECLARE Line : STRING
    OPENFILE "names.txt" FOR READ
    WHILE NOT EOF("names.txt") DO
        READFILE "names.txt", Line
        OUTPUT Line
    ENDWHILE
    CLOSEFILE "names.txt"
    

    EOF("names.txt") is TRUE once every line has been read, so WHILE NOT EOF(...) means while there is still something to read.

    Counting while reading

    OPENFILE "marks.txt" FOR WRITE
    WRITEFILE "marks.txt", 40
    WRITEFILE "marks.txt", 65
    WRITEFILE "marks.txt", 88
    CLOSEFILE "marks.txt"
    
    DECLARE Mark, Count, Total : INTEGER
    Count ← 0
    Total ← 0
    OPENFILE "marks.txt" FOR READ
    WHILE NOT EOF("marks.txt") DO
        READFILE "marks.txt", Mark
        Count ← Count + 1
        Total ← Total + Mark
    ENDWHILE
    CLOSEFILE "marks.txt"
    OUTPUT Count, " marks, mean ", Total / Count
    

    Common mistakes

    • A WHILE EOF(...) loop — that runs only when there is nothing left. You want NOT.
    • Reading past the end because the loop has no EOF guard.
    • Opening FOR READ a file that was never written.
  • 11 A-Level 9618: what changes · ⁨A-Level 9618: ما التغييرات⁩
    11.1

    Layout and operators

    English

    Cambridge publishes two pseudocode specifications, and they disagree. Everything in topics 1-10 is IGCSE 0478. A-Level 9618 changes the details below — and a student who studies both loses marks by writing one in the other's paper.

    IGCSE 0478 A-Level 9618
    THEN on its own line, indented 2 on the IF line
    constants CONSTANT Pi ← 3.142 CONSTANT Pi = 3.142
    DIV / MOD functions: DIV(10, 3) operators: 10 DIV 3
    joining strings commas in OUTPUT the & operator
    identifiers must start with a capital mixed case allowed 混合大小写
    NEXT must name its counter good practice
    ROUND, RANDOM() both published neither exists

    This is the 0478 form, and it runs here:

    The 9618 form of the same algorithm is written like this — note THEN on the IF line, = in the CONSTANT, and MOD between its two values:

    ⚠️ Which one is right depends only on which paper you are sitting. Neither is a mistake; each is a mistake in the other's exam. The playground on this page runs the 0478 rules, so a 9618 construct is refused with a message naming the syllabus it belongs to — which is a quick way to check your own habits.

    Common mistakes

    • Writing THEN on the IF line in an 0478 answer, because that is what a textbook or a website showed. It is the single commonest cross-syllabus slip.
    • 10 MOD 3 in 0478. There it is MOD(10, 3).
    • ROUND(3.14159, 2) in a 9618 answer. 9618 has no ROUND at all.
    العربية

    Cambridge publishes two pseudocode specifications, and they disagree. Everything in topics 1-10 is IGCSE 0478. A-Level 9618 changes the details below — and a student who studies both loses marks by writing one in the other's paper.

    IGCSE 0478 A-Level 9618
    THEN on its own line, indented 2 on the IF line
    constants CONSTANT Pi ← 3.142 CONSTANT Pi = 3.142
    DIV / MOD functions: DIV(10, 3) operators: 10 DIV 3
    joining strings commas in OUTPUT the & operator
    identifiers must start with a capital mixed case allowed 混合大小写
    NEXT must name its counter good practice
    ROUND, RANDOM() both published neither exists

    This is the 0478 form, and it runs here:

    DECLARE Total : REAL
    CONSTANT Rate ← 0.5
    Total ← 10
    IF MOD(7, 2) = 1
      THEN
        OUTPUT "Odd, half rate ", Total * Rate
    ENDIF
    

    The 9618 form of the same algorithm is written like this — note THEN on the IF line, = in the CONSTANT, and MOD between its two values:

    DECLARE Total : REAL
    CONSTANT Rate = 0.5
    Total ← 10
    IF 7 MOD 2 = 1 THEN
        OUTPUT "Odd, half rate " & STR(Total * Rate)
    ENDIF
    

    ⚠️ Which one is right depends only on which paper you are sitting. Neither is a mistake; each is a mistake in the other's exam. The playground on this page runs the 0478 rules, so a 9618 construct is refused with a message naming the syllabus it belongs to — which is a quick way to check your own habits.

    Common mistakes

    • Writing THEN on the IF line in an 0478 answer, because that is what a textbook or a website showed. It is the single commonest cross-syllabus slip.
    • 10 MOD 3 in 0478. There it is MOD(10, 3).
    • ROUND(3.14159, 2) in a 9618 answer. 9618 has no ROUND at all.
    11.2

    Parameters: BYVAL and BYREF

    English

    0478 passes every parameter by value 传值 (topic 9). 9618 lets you choose, and says so in the header.

    • BYVAL — the procedure gets a copy. Changing it changes nothing outside. This is the default when neither word is written.
    • BYREF — the procedure works on the caller's own variable 引用, so a change is visible after the call.

    This is 9618 only. It does not run here, and it is not accepted in an 0478 answer:

    The 0478 way to get a value back

    Use a FUNCTION and assign what it returns. This is the whole of the 0478 answer, and it runs:

    Common mistakes

    • Writing BYREF in an 0478 answer. The keyword is not in that syllabus.
    • Expecting a plain 9618 parameter to behave like BYREF. Without the word it is BYVAL.
    العربية

    0478 passes every parameter by value 传值 (topic 9). 9618 lets you choose, and says so in the header.

    • BYVAL — the procedure gets a copy. Changing it changes nothing outside. This is the default when neither word is written.
    • BYREF — the procedure works on the caller's own variable 引用, so a change is visible after the call.

    This is 9618 only. It does not run here, and it is not accepted in an 0478 answer:

    PROCEDURE Increase(BYREF Value : INTEGER)
        Value ← Value + 1
    ENDPROCEDURE
    
    DECLARE Count : INTEGER
    Count ← 5
    CALL Increase(Count)
    OUTPUT Count      // prints 6
    

    The 0478 way to get a value back

    Use a FUNCTION and assign what it returns. This is the whole of the 0478 answer, and it runs:

    FUNCTION Increased(Value : INTEGER) RETURNS INTEGER
        RETURN Value + 1
    ENDFUNCTION
    
    DECLARE Count : INTEGER
    Count ← 5
    Count ← Increased(Count)
    OUTPUT Count
    

    Common mistakes

    • Writing BYREF in an 0478 answer. The keyword is not in that syllabus.
    • Expecting a plain 9618 parameter to behave like BYREF. Without the word it is BYVAL.
    11.3

    Records and other types

    English

    9618 has data structures 数据结构 that 0478 does not. You will meet them only at A-Level, and none of them runs under the 0478 rules of this page.

    A record 记录 groups fields of different types under one name (9618 section 4):

    An enumerated type 枚举类型 lists the only values a variable may take:

    9618 also adds a DATE data type, random-access files (OPENFILE … FOR RANDOM), pointers, and classes with CLASS … ENDCLASS for its object-oriented paper.

    ⚠️ 0478 has five data types and arrays, and nothing else (topic 2). A 0478 answer that declares a record is answering a different syllabus.

    Common mistakes

    • Using a record in an 0478 answer. Use parallel arrays instead — one array per field, sharing an index.
    • Thinking TYPE means the same as DECLARE. TYPE defines a new type; DECLARE creates a variable of an existing one.
    العربية

    9618 has data structures 数据结构 that 0478 does not. You will meet them only at A-Level, and none of them runs under the 0478 rules of this page.

    A record 记录 groups fields of different types under one name (9618 section 4):

    TYPE Student
        DECLARE Name : STRING
        DECLARE Mark : INTEGER
    ENDTYPE
    
    DECLARE Candidate : Student
    Candidate.Name ← "Mei"
    Candidate.Mark ← 91
    OUTPUT Candidate.Name, " scored ", Candidate.Mark
    

    An enumerated type 枚举类型 lists the only values a variable may take:

    TYPE Vehicle = (Car, Bus, Taxi)
    DECLARE MyRide : Vehicle
    MyRide ← Taxi
    

    9618 also adds a DATE data type, random-access files (OPENFILE … FOR RANDOM), pointers, and classes with CLASS … ENDCLASS for its object-oriented paper.

    ⚠️ 0478 has five data types and arrays, and nothing else (topic 2). A 0478 answer that declares a record is answering a different syllabus.

    Common mistakes

    • Using a record in an 0478 answer. Use parallel arrays instead — one array per field, sharing an index.
    • Thinking TYPE means the same as DECLARE. TYPE defines a new type; DECLARE creates a variable of an existing one.

Log in or create account · ⁨تسجيل الدخول أو إنشاء حساب⁩

IGCSE, A-Level & AP