Grade 10 · Decisions · Lesson and coding task · about 14 minutes
Open this task in the Delphi workspace →
When one Integer (or Char) value chooses between many options, a CASE statement beats a long IF ladder:
case iMark div 10 of
8..10 : sLevel := 'Level 7';
7 : sLevel := 'Level 6';
6 : sLevel := 'Level 5';
else sLevel := 'Level 1';
end;
Note the trick: iMark div 10 turns 0–100 into 0–10, so each band becomes one label. Ranges like 8..10 and lists like 1, 3, 5 are allowed. CASE only works on ordinal types (Integer, Char) — never on Strings.
Your task: NSC achievement levels
Report marks use these levels — build the full table with one CASE:
| Mark | Level |
|---|---|
| 80–100 | Level 7 (Outstanding) |
| 70–79 | Level 6 (Meritorious) |
| 60–69 | Level 5 (Substantial) |
| 50–59 | Level 4 (Adequate) |
| 40–49 | Level 3 (Moderate) |
| 30–39 | Level 2 (Elementary) |
| 0–29 | Level 1 (Not achieved) |
What you will do
- Read the mark from edtMark
- Use CASE on iMark div 10 to pick the level
- Show the level on lblLevel, e.g. Level 6 (Meritorious)
Hints
- 84 div 10 = 8, so 8..10 covers 80–100 (and the mark 100 itself gives 10).
- Each line is value : statement; — for example 7 : sLevel := 'Level 6 (Meritorious)';
- Marks 0–29 give 0, 1 or 2 — let the else catch them.
Model solution
procedure TfrmLevels.btnLevelClick(Sender: TObject);
var
iMark : Integer;
sLevel : String;
begin
iMark := StrToInt(edtMark.Text);
case iMark div 10 of
8..10 : sLevel := 'Level 7 (Outstanding)';
7 : sLevel := 'Level 6 (Meritorious)';
6 : sLevel := 'Level 5 (Substantial)';
5 : sLevel := 'Level 4 (Adequate)';
4 : sLevel := 'Level 3 (Moderate)';
3 : sLevel := 'Level 2 (Elementary)';
else sLevel := 'Level 1 (Not achieved)';
end;
lblLevel.Caption := sLevel;
end;