Obliczanie ocen

Załóżmy, że dysponujemy plikiem tekstowym z wynikami egzaminów, który wygląda następująco:
		Maciek 25
		Bartek 76
		Kaśka 49
		Tomek 66
		Krzysiek 92
		Dorota 42
		Karolina 25
		Bartek 12
		Kaśka 0
		Tomek 66
		...
		
Poniższy skrypt czyta oceny z pliku, wyszukuje wszystkie wyniki dla każdego studenta, oblicza jego średnią i wyświetla listę wyników w kolejności alfabetycznej. Program zakłada naiwnie, że w grupie nie ma, na przykład, dwóch Tomków, tzn. gdy znajdzie drugi wpis z imieniem Tomek, to założy, że jest to wynik drugiego egzaminu pierwszego napotkanego Tomka.

#!/usr/bin/perl

open(GRADES, "grades") or die "Can't open grades: $!\n";
while ($line = <GRADES>) {
    ($student, $grade) = split(/ /, $line);
    $grades{$student} .= $grade . " ";
}

foreach $student (sort keys %grades) {
    $scores = 0;
    $total = 0;
    @grades = split(/ /, $grades{$student});
    foreach $grade (@grades) {
        $total += $grade;
        $scores++;
    }
    $average = $total / $scores;
    print "$student: $grades{$student}\tAverage: $average\n";
}

Zwróć uwagę na funkcję

keys
, która tworzy listę złożoną z kluczy hasza (w tym przypadku jest to lista imion studentów).
Last modified: poniedziałek, 10 sierpnia 2015, 10:49