-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 

Assegnazione palline in un tennis club di Michele Beltrame

Versione stampabile.

1. Introduzione 2. Codice Sorgente (parte 1) 3. Discussione (parte 1) 4. Codice sorgente (parte 2: subroutine) 5. Discussione sulle subroutine 6. Estensioni 

Codice sorgente (parte 2: subroutine)

 # ### Subroutine ###

 # Policy 1: assegna al giocatore le palline richieste, se disponibili
 sub policy1 {
     my ($pallineric) = @_;
     ($palline >= $pallineric) ? return $pallineric : return 0;
 }

 # Policy 2: se c'e` ancora almeno il 20% delle palline disponibili, assegna
 # quelle richieste; se ce ne sono meno, ne assegna al massimo il 2.5%
 # ogni volta
 sub policy2 {
     my ($pallineric) = @_;
     if ($palline < int($pallinetot/5)) {
         if ($pallineric > int($pallinetot/40)) {
             ($palline >= int($pallinetot/40)) ? return int($pallinetot/40) : return 0;
         } else {
             ($palline >= $pallineric) ? return $pallineric : return 0;
         }
     } else {
         ($palline >= $pallineric) ? return $pallineric : return 0;
     }
 }

 # Richiesta palline
 sub chiedi_palline {
     my ($nome, $pallineric) = @_;

     # Ora $palline E<egrave> tutta nostra
     lock ($palline);

     # Assegna le palline secondo la policy desiderata
     my $pallineass = &policy2($pallineric);

     if ($pallineass > 0) {
         $palline -= $pallineass;
         print "$pallineass palline (su $pallineric richieste) concesse a $nome (totale $palline)\n";
         return $pallineass;
     } else {
         print "$pallineric palline rifiutate a $nome (totale $palline)\n";
         return 0;
     }
 }

 # Restituzione palline
 sub restituisci_palline {
     my ($nome, $pallineric) = @_;

     lock ($palline);
     $palline += $pallineric;
     print "$pallineric palline restituite da $nome (totale $palline)\n";
 }

 # Giocatore
 sub giocatore {
     my ($nome) = @_;

     # Il giocatore gioca e rigioca di continuo
     while (1) {

         # Richiedi un numero di palline tra 1 e $pallinemaxe
         my $pallineric = int(rand($pallinemaxe))+1;

         my $pallineass;

         # Chiedi le palline
         while (($pallineass = &chiedi_palline($nome, $pallineric)) == 0)  {
             sleep $tempobar;
         }
         sleep int(rand($tempomax))+1;
         &restituisci_palline($nome, $pallineass);
         sleep $tempoidl;

     }
 }

‹‹ Discussione (parte 1)

Discussione sulle subroutine ››

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google