In C++, you've been thinking about some cascading if/switch structures (aside from those bad dreams, I mean). You wonder if maybe you could make them more re-usable by changing them into loops looking through an array. Let's give it a shot:
Given the if structure:
if (score >= 90)
{
grade = 'A';
}
else if (score >= 80)
{
grade = 'B';
}
else if (score >= 70)
{
grade = 'C';
}
else if (score >= 60)
{
grade = 'D';
}
else
{
grade = 'F';
}
You see that there are numbers being translated into letters. You envision a set of parallel arrays:
cutoffs grades
+----+ +---+
| 90 | | A |
+----+ +---+
| 80 | | B |
+----+ +---+
| 70 | | C |
+----+ +---+
| 60 | | D |
+----+ +---+
| 0 | | F |
+----+ +---+
MAX_cutoff = 5
Now you write a simple loop:
i = 0;
while (i < max_cutoff="" &&="" score=""><>
{
i++;
}
grade = grades[i];
A little testing shows that this seems to work for normal cases, but fails when the data is over 100% or below 0% (whether by accident or on purpose). You decide to write the input functions to avoid such non-sense as negative scores, but think maybe the over 100% wouldn't be bad if it were your score. So you alter your arrays a bit:
cutoffs grades
+-----+ +---+
| 100 | | + |
+-----+ +---+
| 90 | | A |
+-----+ +---+
| 80 | | B |
+-----+ +---+
| 70 | | C |
+-----+ +---+
| 60 | | D |
+-----+ +---+
| 0 | | F |
+-----+ +---+
MAX_cutoff = 6
Checking again, everything is working except the negatives. Just in case someone by-passes your input routines, you decide to make it safe and change:
grade = (i >= MAX_cutoff) ? ('U') : (grades[i]);
Now everything is working fine!
Note how no changes are needed to the loop! Just the array needed to be changed to adjust it!
Could this possibly be made into a nice generic function that could be applied to many problems -- simply getting the arrays and overflow error value as arguments? Wow!