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.
<?
// * 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: 9 7 1 1 4 9 5 6 3 3
Students: 9
Average mark: 4.3333
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: 7 0 10 6 8 10 10 8
Students: 7
Average mark: 7.4286