#!/usr/bin/perl
use strict;
use warnings;
use List::Util;
# wyniki maksymalne z kolokwiow
my @maxy = (5,6,5,5);
# tabela z danymi nt. osiagniec studentow
# kazdy element hasza %dane, to referencja do tablicy anonimowej
# zawierajacej po prostu liczby punktow otrzymane z poszczegolnych
# kolokwiow
my %dane = (
"Agnieszka L." => [5,5,5,2,],
"Anna S." => [5,5,5,3,],
"Damian K." => [5,0,5,1,],
"Dariusz G." => [5,4,5,2,],
"Dawid K." => [5,3,5,3,],
"Grzegorz T." => [5,2,5,3,],
"Karol R." => [5,2,4,0,],
"Lukasz K." => [2,4,5,2,],
"Lukasz L." => [4,5,5,3,],
"Marek K." => [5,3,3,3,],
"Piotr J." => [5,4,4,3,],
"Piotr T." => [5,5,3,0,],
"Przemyslaw S." => [5,3,4,1,],
"Radoslaw G." => [5,4,4,0,],
"Rafal D." => [5,4,4,2,],
"Slawomir P." => [5,4,5,0,],
"Tomasz D." => [5,2,3,2,],
"Tomasz M." => [3,3,4,0,],
);
# obliczenie calkowitej maksymalnej liczby punktow mozliwej
# do uzyskania ze wszystkich kolokwiow:
my $max = List::Util::sum @maxy;
# teraz przetwarzanie danych, czyli wypisywanie kazdego
# imienia i nazwiska oraz za nim jego osiagniec srednich
foreach my $student ( keys %dane ){
# lecimy po wszystkich kluczach w haszu %dane
# kazdy taki klucz to po prostu napis zawierajacy imie i nazwisko
# studenta. Uzywamy tego do uzyskania dostepu do danych odpowiedniej
# osoby, a dane te to tablica anonimowa
# wypisujemy nazwisko
printf "%13s: ",$student;
# sumujemy elementy w tablicy danej przez @{$dane{$student}}, dzielimy przez
# wartosc $max (obliczona powyzej) i mnozymy przez 100 zeby wyszlo
# jak nalezy w procentach, a potem wypisujemy
printf "%1.2f%%\n", 100 * List::Util::sum(@$dane{$student}) / $max;
}
# i to wszystko.
+-- 73 wierszy: __END__---------------------------------------------------------