Blame
|
1 | > **DRAFT** — under teacher review. |
||||||
| 2 | ||||||||
| 3 | # VCAA Pseudocode — Write Structured English, Not Python |
|||||||
| 4 | ||||||||
| 5 | The Hamilton and Alexandra College · Year 12 · 2026 |
|||||||
| 6 | ||||||||
| 7 | If you can already code in Python, pseudocode feels like a step backwards — why write `count ← 5` when `count = 5` is right there? The answer: VCAA assessors are checking whether you can express an algorithm clearly and independently of any language. Python-flavoured pseudocode loses marks. This page maps every construct you need. |
|||||||
| 8 | ||||||||
| 9 | --- |
|||||||
| 10 | ||||||||
| 11 | ## 🎬 Watch |
|||||||
| 12 | ||||||||
| 13 | > [!NOTE] |
|||||||
| 14 | > Video coming soon. |
|||||||
| 15 | ||||||||
| 16 | **🎯 Watch for:** how to translate a working Python method into clean VCAA pseudocode, keeping the logic identical while swapping Python syntax for language-independent Structured English. |
|||||||
| 17 | ||||||||
| 18 | --- |
|||||||
| 19 | ||||||||
| 20 | ## The two rules that actually matter |
|||||||
| 21 | ||||||||
| 22 | Before the big table, pin these two rules — they matter more than any single symbol: |
|||||||
| 23 | ||||||||
| 24 | 1. **Be consistent.** If you open a block with `BEGIN`, close it with `END` throughout. If you use `WHILE … ENDWHILE`, don't switch to `WHILE … END_WHILE` two lines later. |
|||||||
| 25 | ||||||||
| 26 | 2. **Write at a clear high level.** You do not need to encode every trivial detail. "Load `data.csv` into an array of records" is perfectly acceptable pseudocode when it is self-explanatory. |
|||||||
| 27 | ||||||||
| 28 | --- |
|||||||
| 29 | ||||||||
| 30 | ## Pseudocode ↔ Python comparison |
|||||||
| 31 | ||||||||
| 32 | ### Program structure and basics |
|||||||
| 33 | ||||||||
| 34 | | Pseudocode | Python | Notes | |
|||||||
| 35 | |---|---|---| |
|||||||
| 36 | | `START` … `STOP` or `BEGIN` … `END` | *(not required)* | Brackets a whole program or subprogram. Pick one style and stick to it. | |
|||||||
| 37 | | `count ← 5` | `count = 5` | Assignment uses a **left-arrow `←`**, not `=` or `:=`. | |
|||||||
| 38 | | `// comment` or `# comment` | `# comment` | Comments work in pseudocode too — use them. | |
|||||||
| 39 | ||||||||
| 40 | ### Selection |
|||||||
| 41 | ||||||||
| 42 | | Pseudocode | Python | Notes | |
|||||||
| 43 | |---|---|---| |
|||||||
| 44 | | `IF condition THEN`<br> `action_1`<br>`ELSE`<br> `action_2`<br>`ENDIF` | `if condition:`<br> `action_1`<br>`else:`<br> `action_2` | Must close with `ENDIF`. Chained: use `ELSE IF … THEN`. | |
|||||||
| 45 | | `CASE OF variable`<br> `value1: action_1`<br> `value2 TO value3: action_2`<br> `OTHERWISE action_3`<br>`ENDCASE` | `if variable == value1:`<br> `action_1`<br>`elif value2 <= variable <= value3:`<br> `action_2`<br>`else:`<br> `action_3` | CASE has no direct Python equivalent; use it when there are many branches. | |
|||||||
| 46 | ||||||||
| 47 | ### Iteration |
|||||||
| 48 | ||||||||
| 49 | | Pseudocode | Python | Notes | |
|||||||
| 50 | |---|---|---| |
|||||||
| 51 | | `WHILE condition DO`<br> `action_1`<br>`ENDWHILE` | `while condition:`<br> `action_1` | Pre-test loop. Must close with `ENDWHILE`. | |
|||||||
| 52 | | `REPEAT`<br> `action_1`<br>`UNTIL condition` | `while True:`<br> `action_1`<br> `if condition: break` | Post-test loop — body always runs at least once. | |
|||||||
| 53 | | `FOR count ← a TO b STEP 1`<br> `action_1`<br>`ENDFOR` | `for count in range(a, b+1, 1):`<br> `action_1` | Count-controlled. Must close with `ENDFOR`. | |
|||||||
| 54 | | `FOREACH item IN seq`<br> `action_1`<br>`NEXT item` | `for item in seq:`<br> `action_1` | Iterates over a sequence. Close with `NEXT item`. | |
|||||||
| 55 | ||||||||
| 56 | ### Operators |
|||||||
| 57 | ||||||||
| 58 | | Pseudocode | Python | Notes | |
|||||||
| 59 | |---|---|---| |
|||||||
| 60 | | `=` | `==` | **Equality test** in pseudocode is `=`, not `==`. | |
|||||||
| 61 | | `<>` | `!=` | **Not-equals** in pseudocode is `<>`. Never use `!=` in pseudocode. | |
|||||||
| 62 | | `>, <, <=, >=` | `>, <, <=, >=` | Same symbols in both. | |
|||||||
| 63 | | `AND, OR, NOT` | `and, or, not` | Uppercase in pseudocode. | |
|||||||
| 64 | | `+, -, *, /, ^` | `+, -, *, /, **` | Pseudocode uses `^` for exponentiation; Python uses `**`. | |
|||||||
| 65 | | `MOD` or `%` | `%` | Integer remainder. | |
|||||||
| 66 | | `DIV` | `//` | Integer division. | |
|||||||
| 67 | ||||||||
| 68 | ### Subprograms (methods / functions / procedures) |
|||||||
| 69 | ||||||||
| 70 | | Pseudocode | Python | Notes | |
|||||||
| 71 | |---|---|---| |
|||||||
| 72 | | `BEGIN fun(arg1, arg2)`<br> `action_1`<br> `RETURN expression`<br>`END` | `def fun(arg1, arg2):`<br> `action_1`<br> `return expression` | `BEGIN`/`END` bracket the subprogram. `RETURN` ends a function; omit it for a procedure. | |
|||||||
| 73 | ||||||||
| 74 | --- |
|||||||
| 75 | ||||||||
| 76 | ## Worked example — a method inside a class |
|||||||
| 77 | ||||||||
| 78 | This is the Level-9 OOP pseudocode skill. You are writing a method, not a standalone program, so you use `BEGIN`/`END` rather than `START`/`STOP`. |
|||||||
| 79 | ||||||||
| 80 | **Scenario:** a `ScoreTracker` class has a method `is_passing` that returns whether a student's average score meets a threshold. |
|||||||
| 81 | ||||||||
| 82 | ``` |
|||||||
| 83 | BEGIN is_passing(scores, threshold) |
|||||||
| 84 | total ← 0 |
|||||||
| 85 | FOREACH score IN scores |
|||||||
| 86 | total ← total + score |
|||||||
| 87 | NEXT score |
|||||||
| 88 | average ← total / length(scores) |
|||||||
| 89 | IF average >= threshold THEN |
|||||||
| 90 | RETURN True |
|||||||
| 91 | ELSE |
|||||||
| 92 | RETURN False |
|||||||
| 93 | ENDIF |
|||||||
| 94 | END |
|||||||
| 95 | ``` |
|||||||
| 96 | ||||||||
| 97 | Notice: |
|||||||
| 98 | - Assignment is `←` throughout — never `=` or `==`. |
|||||||
| 99 | - Not-equals would be `<>` if needed (e.g. `IF count <> 0 THEN`). |
|||||||
| 100 | - `FOREACH … NEXT item` closes the loop. |
|||||||
| 101 | - `IF … THEN … ELSE … ENDIF` closes the selection. |
|||||||
| 102 | - Indentation is consistent. |
|||||||
| 103 | ||||||||
| 104 | > [!TIP] |
|||||||
| 105 | > You do not need to write out every getter and setter in full. If a step is clear — "retrieve the current user record from the database" — that single line is enough. Save detailed pseudocode for the logic that actually matters in your design. |
|||||||
| 106 | ||||||||
| 107 | --- |
|||||||
| 108 | ||||||||
| 109 | ## Common mistakes |
|||||||
| 110 | ||||||||
| 111 | ### Mistake 1 — Using `=` or `==` for assignment |
|||||||
| 112 | ||||||||
| 113 | > ~~`count = 5`~~ or ~~`count == 5`~~ |
|||||||
| 114 | ||||||||
| 115 | Correct: `count ← 5`. The left-arrow shows data flowing *into* the variable. Using `=` is Python; using `==` is a comparison, not assignment. |
|||||||
| 116 | ||||||||
| 117 | ### Mistake 2 — Using `!=` for not-equals |
|||||||
| 118 | ||||||||
| 119 | > ~~`IF count != 0 THEN`~~ |
|||||||
| 120 | ||||||||
| 121 | Correct: `IF count <> 0 THEN`. The `!=` operator belongs only in Python code. |
|||||||
| 122 | ||||||||
| 123 | ### Mistake 3 — Python-only constructs leaking in |
|||||||
| 124 | ||||||||
| 125 | > ~~`for item in list:`~~ or ~~`elif`~~ or ~~`print(x)`~~ |
|||||||
| 126 | ||||||||
| 127 | Use `FOREACH item IN list … NEXT item`, `ELSE IF … THEN`, and `OUTPUT x` instead. |
|||||||
| 128 | ||||||||
| 129 | ### Mistake 4 — Forgetting closing keywords |
|||||||
| 130 | ||||||||
| 131 | Every block that opens must close. Missing `ENDIF`, `ENDWHILE`, `ENDFOR`, or `ENDCASE` is a consistency error. Markers notice immediately. |
|||||||
| 132 | ||||||||
| 133 | ### Mistake 5 — Inconsistent block keywords |
|||||||
| 134 | ||||||||
| 135 | > ~~Opening with `BEGIN` but closing with `STOP`~~ |
|||||||
| 136 | ||||||||
| 137 | Pick `BEGIN`/`END` or `START`/`STOP` and use it everywhere in the same document. |
|||||||
| 138 | ||||||||
| 139 | --- |
|||||||
| 140 | ||||||||
| 141 | ## Check Your Understanding |
|||||||
| 142 | ||||||||
| 143 | 1. Rewrite this Python line as valid VCAA pseudocode: `score = score + 1` |
|||||||
| 144 | ||||||||
| 145 | >| **Answer:** `score ← score + 1` — assignment uses `←`, not `=`. |
|||||||
| 146 | ||||||||
| 147 | 2. A classmate writes `IF x != 0 THEN … ENDIF`. Name the mistake and write the corrected line. |
|||||||
| 148 | ||||||||
| 149 | >| **Answer:** `!=` is Python syntax, not pseudocode. Correct: `IF x <> 0 THEN … ENDIF`. The not-equals operator in VCAA pseudocode is always `<>`. |
|||||||
| 150 | ||||||||
| 151 | 3. You have a `WHILE` loop and an `IF` statement nested inside it. List the two closing keywords you need and the order they must appear. |
|||||||
| 152 | ||||||||
| 153 | >| **Answer:** `ENDIF` closes the inner `IF` first, then `ENDWHILE` closes the outer loop. Inner blocks always close before outer blocks. |
|||||||
| 154 | ||||||||
| 155 | --- |
|||||||
| 156 | ||||||||
| 157 | ## See also |
|||||||
| 158 | ||||||||
| 159 | - [IPO Charts — Process Means Steps](/sd/C05/IPO%20Charts%20-%20Process%20Means%20Steps) |
|||||||
| 160 | - [Connect the Dots](/sd/C05/Connect%20the%20Dots) |
|||||||
| 161 | - [C05 Resources](/sd/Resources/C05-Resources) |
|||||||
| 162 | ||||||||
| 163 | --- |
|||||||
| 164 | ||||||||
| 165 | ← Back to [C05 Home](/sd/C05/C05-home) · [VCE Software Development Hub](/sd/VCE%20Software%20Development%20Hub) |
|||||||
