#!/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 tablicy @dane, to skalar zawierajacy referencje do tablicy
# anonimowej, ktora zawiera napis a potem ciag liczb
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 ( @dane ){
# lecimy po wszystkich podtablicach w tablicy @dane
# kazda taka podtablica trzymana jest w tymczasowej zmiennej
# skalarnej '$student' jako referencja
# wypisujemy nazwisko z jednoczesnym usunieciem z tablicy danej
# przez @$student (pelen zapis to @{$student})
printf "%13s: ",shift @$student;
# sumujemy elementy w tablicy danej przez @$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(@$student) / $max;
}
# i to wszystko.
__END__
+--- 72 wierszy: =pod-----------------------------------------------------------------------------