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...


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!

Jun 06, 2022
SOLUTION.PDF

Get Answer To This Question

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here