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 < cutoffs[i]) { 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! Please make sure the code meets all requirements above!
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 < cutoffs[i])
{
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!
Please make sure the code meets all requirements above!
Trending now
This is a popular solution!
Step by step
Solved in 4 steps with 3 images