You're missing the subscript on the case
elseif rounding(i) >= 1 && rounding(i) <3
gradesRounded = Exam_Grades(3);
for the assignment and thus the array becomes the one value Exam_Grades(3) or 2.
Unless the assignment called for using such logic, "the Matlab way" would be to use interp1 to interpolate (aka "table lookup") the desired output or even hist to bin the values. Could be just a couple of lines of code total and redefining the Exam_Grades array and breakpoints could then be accomodated with nothing more than a change in data arrays, not have to rewrite the code. As is, you've got all those breakpoints as "magic numbers" buried in the code and changing anything entails a lot of edits with the attendant likelihood of missing something like the above or ending up with overlapping or missing regions, etc.
ADDENDUM Probably shouldn't since it almost certainly is classwork but the histc solution is just two code lines in addition to the two defining data arrays--
>> type roundGrades2
function gradesRounded = roundGrade2(grades)
Exam_Grades=[-3, 0, 2, 4, 7,10,12];
BreakPoints=[-3,-1, 1, 3, 5, 8,11];
[~,ix]=histc(grades,BreakPoints);
gradesRounded=Exam_Grades(ix);
end
>> roundGrades2([-2,6,9,-1,11])
ans =
-3 7 10 0 12
>> roundGrades2([-2,7,11,-1,1.4])
ans =
-3 7 12 0 2
>>
Will leave as "exercise for the student" the use of interp1 as a lookup function.
Best Answer