# Robson ▸ Little 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;` `    ` `    // * OUTPUT` `    ` `    echo 'Data: ' . implode(' ', \$data) . '<br/>' .` `         'Students: ' . \$data . '<br/>' .` `         'Average mark: ' . round(\$prc_average, 4);    ` `?>`

Which produces:

Data: 6 0 10 7 7 2 0
Students: 6
Average mark: 4.3333

### 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: 10 9 4 5 3 8 3 5 4 0 5
Students: 10
Average mark: 4.6

## Log

• May 2, 2005 - Added solution 1 and 2.
© 2004-20 robson | cc unless stated