#!/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__---------------------------------------------------------