1.2 Official ETS Pseudocode Notation and Tracing Strategy
Key Takeaways
- ETS pseudocode uses ← for assignment and == for equality; the relational symbols are ≤, ≥, and ≠, and the logical operators are the lowercase words and, or, and not.
- The ETS notation table lists + - / * ^ % as arithmetic operators and says / means floating-point division unless a question states otherwise.
- ETS loops are written for ( initialization; condition; increment ) … end for, while ( condition ) … end while, do … while ( condition ), and repeat … until ( condition ).
- Indentation and end statements are significant in ETS pseudocode; they, not braces, show which statements belong to an if, loop, or procedure.
- A repeat … until loop runs at least once and stops when its condition becomes true, while a do … while loop runs at least once and stops when its condition becomes false.
Why the notation matters
About 55% of Praxis 5652 comes from Programming and Algorithms, and many of those questions show a code segment. ETS does not use Python, Java, or C++ syntax. It uses a pseudocode notation that is published on pages 21–23 of the free Study Companion (5652). If you learned to code in Python, several symbols will look unfamiliar. If you learned Java, the typed declarations will feel familiar, but the arrows, the end keywords, and the word operators will not.
Learn the notation first. Every minute you spend decoding a symbol on test day is a minute you are not spending on the logic.
The official notation, element by element
| Purpose | ETS notation | Notes for test day |
|---|---|---|
| Assignment | ← | total ← total + 5 evaluates the right side, then stores the result |
| Arithmetic | + - / * ^ % | % is the remainder (modulus); ^ also appears in ETS's list of arithmetic operators |
| Division | / | ETS: / is floating-point division unless stated otherwise |
| Relational | == < > ≤ ≥ ≠ | == tests equality; ← never does |
| Logical | and or not | Lowercase words, not &&, ` |
| String concatenation | + | "Score: " + 95 |
| Boolean values | true false | Lowercase |
| Empty reference | null | |
| Comment | // this is a single-line comment | Comments often explain what a helper call returns |
| Missing code | /* missing code */, /* missing condition */ | Marks the blank you must fill |
| Output | print arg | A comment says whether a space or line feed follows the output |
| Data types | boolean, char, double, float, int, int[ ], int[ ][ ], short, String | Declarations look like int count ← 0 |
| Arrays | int[ ] a ← {1, 2, 3}, int b[0..2] ← {1, 2, 3}, int[ ][ ] c, a[0] | The b[0..2] form states the index range; stems often say "the first element is at index 0" |
Control structures
if ( condition )
block of statements
else
another block of statements
end if
for ( initialization; condition; increment )
block of statements
end for
while ( condition )
block of statements
end while
do
block of statements
while ( condition )
repeat
block of statements
until ( condition )
ETS states that indentation and end statements are significant. There are no curly braces. An else belongs to the if it lines up with, and a loop body is everything indented under the header until end for or end while.
Procedures and classes
int procedureName ( int arg1, int arg2 )
block of statements
return value
end procedureName
void procedureName ( int arg1, int arg2 )
block of statements
end procedureName
class className
variable declarations
procedures
end class className
The return type in the header is the type of the value the procedure returns, or void when it returns nothing. The object-oriented keywords listed are extends, new, public, and private. Method calls use dot notation, for example value.substring ( 0, 1 ), and a stem that uses a class usually supplies a table explaining each method.
Division: the one symbol to watch
The ETS notation table says / means floating-point division unless stated otherwise. However, ETS's own sample explanations treat / between two int values as integer division. One sample procedure tests ( c / 2 ) ≠ 0 for an int c, and the explanation calls / the "integer division operator" and says the fix is to use %. Use this rule:
- Read the declared types and any note in the stem first.
- When both operands are declared
intand the stem gives no other instruction, check the answer choices for integer results. That is how ETS's sample explanations behave. - When a
doubleorfloatis involved, expect a fractional result such as 3.5. %always gives the remainder:17 % 5is2, andn % 2 == 1tests for an odd positiven.
Reading loops correctly
A for header runs its initialization once. It then checks the condition before every iteration and runs the increment after every iteration. So for ( int i ← 0; i < 6; i ← i + 1 ) runs 6 times, for i = 0 through 5. When the loop ends, the condition has just become false (i is 6).
The two post-test loops are opposites:
| Loop | Minimum runs | Keeps looping while… | Stops when… |
|---|---|---|---|
while ( c ) … end while | 0 | c is true | c is false (checked first) |
do … while ( c ) | 1 | c is true | c is false (checked after the body) |
repeat … until ( c ) | 1 | c is false | c becomes true (checked after the body) |
A worked trace in ETS notation
int total ← 0
for ( int k ← 1; k ≤ 5; k ← k + 1 )
if ( k % 2 == 1 )
total ← total + k * 2
else
total ← total + k / 2
end if
end for
print total
Here k is an int, and the even values of k divide exactly by 2, so no division question arises.
| k | k % 2 == 1? | Update | total |
|---|---|---|---|
| — | — | start | 0 |
| 1 | true | 0 + 1 * 2 | 2 |
| 2 | false | 2 + 2 / 2 | 3 |
| 3 | true | 3 + 3 * 2 | 9 |
| 4 | false | 9 + 4 / 2 | 11 |
| 5 | true | 11 + 5 * 2 | 21 |
| 6 | loop test 6 ≤ 5 is false | exit | 21 |
The segment prints 21. Notice that the table records the loop variable, the branch decision, and the running value. That is the minimum you need to avoid mental-arithmetic slips.
A two-pass pacing plan
With 100 questions in 180 minutes you average 108 seconds per question. Definition and scenario questions (much of Categories I, IV, and V) usually take well under a minute. Long traces can take three minutes. A workable plan:
- First pass: Answer everything you can resolve quickly. On a long trace, pick your best answer, flag the question, and move on. Never leave a question blank, because there is no deduction for a wrong answer.
- Second pass: Return to flagged questions and build full trace tables on your scratch materials.
- Final check: Confirm that no question is unanswered and that every select-all-that-apply item reflects your judgment of each option.
As a rough checkpoint, aim to have reached about question 35 after 60 minutes and question 70 after 120 minutes. That pace leaves time for flagged traces.
Habits that prevent lost points
- Parenthesize mentally. ETS usually writes full parentheses, as in
( ( a == 6 ) or ( b == 6 ) ). When it doesn't, apply precedence:not, thenand, thenor. - Check index conventions. Stems normally say "the first element of arr is at index 0." An array of length
nthen has valid indexes 0 through n − 1. - Read the method table. For example, a
substring ( begin, end )table may say it returns characters frombeginthroughend − 1. Use exactly the behavior the table gives. - Watch the print comment. "Print a space after the number" tells you how the output is formatted.
- Separate
←from==. An assignment changes state; a comparison producestrueorfalse.
Consider the following ETS pseudocode segment.
What is printed?int n ← 1
repeat
n ← n * 3
until ( n > 20 )
print n
In ETS pseudocode, int m ← 3 is followed by a loop that increases count (initially 0) by 1 and then subtracts 4 from m, repeating as long as m > 5. How many times does the body run if the loop is written as do … while ( m > 5 ), and how many times if it is written as while ( m > 5 ) … end while?
Which statement correctly describes the ETS pseudocode notation used on Praxis 5652?