CASE statement in PLC Programming - Time & Space Complexity
We want to understand how the time to run a CASE statement changes as the number of choices grows.
Specifically, how does checking many conditions affect execution time?
Analyze the time complexity of the following code snippet.
CASE input_value OF
1: output := 'One';
2: output := 'Two';
3: output := 'Three';
ELSE
output := 'Other';
END_CASE;
This code checks the input value against several cases and sets output accordingly.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Direct jump to the matching case via jump table or computed goto.
- How many times: Constant time (1 operation), independent of case count.
As the number of cases increases, execution time remains constant due to compiler optimizations like jump tables.
| Input Size (number of cases) | Approx. Operations (checks) |
|---|---|
| 10 | ~1 operation |
| 100 | ~1 operation |
| 1000 | ~1 operation |
Pattern observation: Constant operations regardless of cases.
Time Complexity: O(1)
This means the time to run the CASE statement is constant, regardless of the number of cases.
[X] Wrong: "The CASE statement checks conditions sequentially like if-else, so O(n)."
[OK] Correct: Compilers use jump tables or binary search for CASE/switch, enabling O(1) lookup.
Explaining jump table optimizations shows deep understanding of low-level compiler behavior and performance.
"What if cases are non-consecutive or strings? Might it degrade to O(n) or O(log n)?"
Practice
CASE statement in PLC programming?Solution
Step 1: Understand the role of CASE statement
The CASE statement evaluates a variable and chooses one matching action from multiple options.Step 2: Compare with other options
Repeating instructions is done by loops, declaring variables is separate, and stopping execution is a different command.Final Answer:
To select one action from many based on a variable's value -> Option CQuick Check:
CASE statement = Select action by value [OK]
- Confusing CASE with loops
- Thinking CASE declares variables
- Assuming CASE stops program
Solution
Step 1: Recall PLC structured text CASE syntax
The correct syntax to start a CASE statement isCASE variable OF.Step 2: Eliminate other options
SWITCH(variable) { is JavaScript style, C is IF statement, D is invalid syntax.Final Answer:
CASE variable OF -> Option AQuick Check:
PLC CASE starts with 'CASE variable OF' [OK]
- Using SWITCH instead of CASE
- Confusing IF with CASE
- Writing SELECT instead of CASE
output after execution?CASE input OF 1: output := 'One'; 2: output := 'Two'; 3: output := 'Three'; ELSE output := 'Other'; END_CASE;
If
input is 2?Solution
Step 1: Match input value with CASE options
The input is 2, so the CASE matches the line2: output := 'Two';.Step 2: Determine output value
Since input is 2, output is assigned the string 'Two'.Final Answer:
'Two' -> Option BQuick Check:
Input 2 matches case 2, output = 'Two' [OK]
- Choosing ELSE output for matching case
- Confusing input 2 with 1 or 3
- Ignoring ELSE clause
CASE status OF 0: action := 'Stop'; 1: action := 'Start'; 2 action := 'Pause'; ELSE action := 'Unknown'; END_CASE;
Solution
Step 1: Check syntax of each CASE line
The third case line is missing a colon after 2; it should be2: action := 'Pause';.Step 2: Verify other parts
ELSE clause is valid, END_CASE is correct syntax, and variable declaration is not shown but not an error here.Final Answer:
Missing colon after 2 in third case -> Option AQuick Check:
Each case label needs a colon ':' [OK]
- Omitting colon after case value
- Thinking ELSE is invalid
- Confusing END_CASE syntax
Solution
Step 1: Check the required mapping
Values 0 to 3 have specific motor speeds; any other value should set 'Error'.Step 2: Analyze each option
CASE speed OF 0: motor_speed := 'Stop'; 1: motor_speed := 'Slow'; 2: motor_speed := 'Medium'; 3: motor_speed := 'Fast'; ELSE motor_speed := 'Error'; END_CASE; uses ELSE for all other values, correctly handling unexpected inputs. CASE speed OF 0: motor_speed := 'Stop'; 1: motor_speed := 'Slow'; 2: motor_speed := 'Medium'; 3: motor_speed := 'Fast'; 4: motor_speed := 'Error'; END_CASE; treats 4 as 'Error' but misses ELSE for other values. CASE speed OF 0: motor_speed := 'Stop'; 1: motor_speed := 'Slow'; 2: motor_speed := 'Medium'; 3: motor_speed := 'Fast'; 4: motor_speed := 'Error'; ELSE motor_speed := 'Error'; END_CASE; incorrectly uses a colon after ELSE ('ELSE:'), which is invalid syntax. CASE speed OF 0: motor_speed := 'Stop'; 1: motor_speed := 'Slow'; 2: motor_speed := 'Medium'; 3: motor_speed := 'Fast'; END_CASE; lacks handling for values outside 0-3.Final Answer:
CASE speed OF 0: motor_speed := 'Stop'; 1: motor_speed := 'Slow'; 2: motor_speed := 'Medium'; 3: motor_speed := 'Fast'; ELSE motor_speed := 'Error'; END_CASE -> Option DQuick Check:
Use ELSE for unexpected values in CASE [OK]
- Not using ELSE for unexpected values
- Assigning error to a specific case instead of ELSE
- Missing cases for valid inputs
Ready to prove it?
Pass the test and this pattern moves unknown
