RobsonLittle Red Book ▸ Mean mark #2

Chapter 3 - Question 3

Design a program to compute the mean mark from input data giving the number of students in a class followed by a list of their marks.

Solution 1

<?    // * DATA CREATION        // a random number of students    $students = mt_rand(5, 15);        // for each student, generate a random mark    for ($n = 0; $n < $students; $n++)        $marks .= ' ' . mt_rand(0, 10);            // join everything together    // so this is like [total] [mark1] [mark2] ...        $data = $students . $marks;        // * PROCESSING        // first, split everything up    $data = explode(' ', $data);        // the total number of students is the first item of data    // the rest of the array is the marks    // divide the total by the students to get the average    $prc_average = array_sum(array_slice($data, 1, count($data)-1)) / $data[0];        // * OUTPUT        echo 'Data: ' . implode(' ', $data) . '<br/>' .         'Students: ' . $data[0] . '<br/>' .         'Average mark: ' . round($prc_average, 4);     ?>

Which produces:

Data: 13 8 2 6 7 7 8 9 3 9 2 0 9 7
Students: 13
Average mark: 5.9231

Solution 2

There's no need for anyone to enter the number of students. That can easily be worked out from the number of marks given. Here's a simpler version that outputs the same thing but uses a lot less code.

<?    // * DATA CREATION        // generate a random mark for a random number of students    for ($n = 0; $n < mt_rand(5, 15); $n++)        $scores[] = mt_rand(0, 10);            // * OUTPUT & PROCESSING        echo 'Data: ' . count($scores) . ' ' . implode(' ', $scores) . '<br/>' .         'Students: ' . count($scores) . '<br/>' .         'Average mark: ' . round(array_sum($scores) / count($scores), 4);     ?>

Which produces:

Data: 6 3 0 2 0 3 8
Students: 6
Average mark: 2.6667

Log

© 2004-20 robson | cc unless stated