Grading students

Klecianny Melo - Mar 14 - - Dev Community

Prepare your favorite cup of coffee, because we are about to enter the fantastic world of Grading students.

What is a grading students?

A university has the following grading policy:

Each student receives a grade from 0 to 100.
Any grade below 40 is considered failed.

The teacher rounds each student's grade according to these rules:

  • If the difference between the grade and the next multiple of 5 is less than 3, round the grade to the next multiple of 5.
  • If the grade value is less than 38, no rounding will occur, as the result will still be a failed grade.

Image description

Examples

  • grade = 84 rounded to 85 (85 - 84 is less than 3)
  • grade = 29 do not round (the result is less than 40)
  • grade = 57 do not round (60 - 57 is equal to 3)

Given the initial grade value for each of the n students, write code to automate the rounding process.

// Input example
[73, 67, 38, 33]

// Output example
[75, 67, 40, 33]
Enter fullscreen mode Exit fullscreen mode

Step by step

The first step is to create the function that will be responsible for rounding the grades. It will be called gradingStudents. Next we will initialize an empty array to store the notes after rounding, roundedNotes:

// Function to round notes
function gradingStudents(grades) {
    // Starting an empty array to store the rounded notes
    const roundedNotes = [];
}
Enter fullscreen mode Exit fullscreen mode

Next we must iterate over the original notes array, the grades:

// Iterates over each note
grades.forEach((grade) => {});
Enter fullscreen mode Exit fullscreen mode

Now let's determine the next multiple of 5 for each number in grids. In this operation we will divide the grade by 5 and then apply the Math.ceil method to round up to the next integer.

The *5 guarantees that the resulting number is the next number that is a multiple of 5:

// Calculates the next number that is a multiple of 5
const nextMultipleOfFive = Math.ceil(grade / 5) * 5;
Enter fullscreen mode Exit fullscreen mode

Let's compare the difference between nextMultipleOfFive and grade to see if the difference is less than 3 and greater than or equal to 38:

// If the difference between the next multiple of 5 and the number is less than 3 and the score is greater than or equal to 38
if (nextMultipleOfFive - grade < 3 && grade >= 38) {}
Enter fullscreen mode Exit fullscreen mode

If the grade satisfies the above conditions, we will collect the nextMultipleOfFive in the roundedNotes array:

// Consider the next multiple of 5
roundedNotes.push(nextMultipleOfFive);
Enter fullscreen mode Exit fullscreen mode

Otherwise, the original note will be stored in the roundedNotes array:

else {
    // Otherwise, the original note will be stored in the `roundedNotes` array
    roundedNotes.push(grade);
}
Enter fullscreen mode Exit fullscreen mode

After iterating over each note and applying the rounding rules, we have the roundedNotes array with the notes properly rounded. So, we just return roundedNotes:

// Returns the array with rounded notes
return roundedNotes;
Enter fullscreen mode Exit fullscreen mode

Image description

Final resolution

After following the steps step by step, we have our final resolution:

const grades = [73, 67, 38, 33];

// Function to round notes
function gradingStudents(grades) {
    // Starting an empty array to store the rounded notes
    const roundedNotes = [];

    // Iterates over each note
    grades.forEach((grade) => {
        // Calculates the next number that is a multiple of 5
        const nextMultipleOfFive = Math.ceil(grade / 5) * 5;
        // If the difference between the next multiple of 5 and the number is less than 3 and the score is greater than or equal to 38
        if (nextMultipleOfFive - grade < 3 && grade >= 38) {
            // Consider the next multiple of 5
            roundedNotes.push(nextMultipleOfFive);
        } else {
            // Otherwise, the original note will be stored in the `roundedNotes` array
            roundedNotes.push(grade);
        }
    });

    // Returns the array with rounded notes
    return roundedNotes;
}

console.log(gradingStudents(grades)); // [75, 67, 40, 33]
Enter fullscreen mode Exit fullscreen mode

Share the code, spread knowledge and build the future! 😉

Images generated by DALL·E 3

. . . . . . . . . . . . . . . . . . . . . . . .