#!/usr/bin/perl -wT # # min-max.pl # # Ricerca del minimo e del massimo con O(2/3 N) confronti # &main(); #-------------------------------------------------------------------------- sub main { # Programma principale my @datiDisordinati = ; # contiene la lista di dati letti, all'inizio disordinata chop @datiDisordinati; # tolgo gli spazi e \n che seguono # filtro l'input in modo che sia corretto, tengo solo i numeri (interi) @datiDisordinati = grep { (defined && /^[+-]?[0-9]+$/) } @datiDisordinati; my $min = shift @datiDisordinati; # inizio assumendo che il primo sia il minimo ... my $max = $min; # ... ed anche il massimo my ($x, $y); while (@datiDisordinati) { # ripeto finchè ci sono dati $x = shift @datiDisordinati; # estraggo i prossimi due valori $y = shift @datiDisordinati; # $y potrebbe non esistere ... dopo controllo ($x,$y) = ($y,$x) if ($y && $x > $y); # scambio x e y se $y esiste e x>y $min = $x if ($x < $min); # aggiorno il minimo se necessario $max = $y if ($y && $y > $max); # aggiorno il massimo se necessario } # alla fine stampo i risultati print "Il minimo è $min ed il massimo $max\n"; } #--------------------------------------------------------------------------