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: 7 5 6 9 10 4 2 0
Students: 7
Average mark: 5.1429
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 1 0 6 5 10 5 1
Students: 7
Average mark: 4