[caracas-pm] Ejercicio del mes

Francisco J. Obispo S. (CNTI-REACCIUN) fobispo at nic.ve
Sat Mar 26 11:11:23 PST 2005


Hola,

Encontré un pequeño error en la linea 51, donde originalmente habia escrito
una función genérica que devolviera segun el argumento, el valor requerido
(promedio, mayor, menor), pero luego preferí hacer un solo calculo para las 3
variables.


les anexo el codigo definitivo... disculpenme esa.. saludos

#!/usr/bin/perl


#
# Arreglo para guardar los registros procesados
our @data;

#Procesa el STDIN y lo ordena en un arreglo "@data"

while(<STDIN>){
    chomp();
    next if  m/^\s*$/;
    next unless m/reboot/;
    my @reg=split(/\s+/);
    my $uptime=pop(@reg);
    push @reg,s2h($uptime);
    push @data,\@reg;
}


my ($mayor,$menor,$promedio)=calcular();

printf("%-30s%s\n","#Reinicios del sistema",scalar(@data));
printf("%-30s%sh\n","Máximo tiempo encendido",$mayor);
printf("%-30s%sh\n","Mínimo tiempo encendido",$menor);
printf("%-30s%sh\n","Tiempo promedio de servicio",$promedio);


# Calcula mayor,menor y promedio del arreglo @data
sub calcular{
    my $mayor= my $menor=my $sum = $data[0]->[8];
    for( my $i=1; $i<scalar @data; $i++ ){
	$mayor = $data[$i]->[8] > $mayor ? $data[$i]->[8] : $mayor ;
	$menor = $data[$i]->[8] < $menor ? $data[$i]->[8] : $menor ;   
	$sum+=$data[$i]->[8];
    }
    return $mayor,$menor,sprintf("%.2f",$sum/scalar(@data));
}

# Convierte el string del uptime en numero de horas
sub s2h{
    my ($time)=@_;
    $time=~ m/^\((\d+\+)*(\d+):(\d+)\)$/;
    return sprintf("%.2f",$1*24 + $2 + $3/60);
}







On Sat, 26 Mar 2005 13:14:30 -0400, Francisco J. Obispo S. (CNTI-REACCIUN) wrote
> Hola *
> 
> He estado un poco desconectado de ustedes, pero vamos a ver si puedo 
> sacar un poco de tiempo para colaborar un poco :-)
> 
> Por ahora, les mando una solucion.
> 
> saludos
> 
> On Sat, 26 Mar 2005 11:46:47 -0400, Ernesto Hernández-Novich wrote
> > El comando last permite ver el historial de conexiones de usuarios al
> > sistema. En particular, si uno utiliza el pseudousuario 'reboot' 
> > puede saber las veces en que se reinició el sistema.
> > 
> > reboot   system boot  2.6.11   Fri Mar 11 17:13         (14+18:29)
> > reboot   system boot  2.6.11   Thu Mar  3 11:11         (8+06:00)
> > reboot   system boot  2.6.11   Wed Mar  2 13:18         (9+03:53)
> > 
> > La última columna representa el número de días, horas y minutos que 
> > el sistema estuvo encendido hasta el siguiente reboot (y para el 
> > caso del más reciente, cuánto tiempo tiene encendido).
> > 
> > Escriban un programa que reciba como entrada el listado producido 
> > por el comando 'last reboot' y produzca un breve reporte (formato 
> > libre) que indique la cantidad de reinicios, máximo tiempo en 
> > servicio, mínimo tiempo en servicio y tiempo promedio en servicio.
> > -- 
> > Ernesto Hernández-Novich - On Linux 2.6.11 i686 - Unix: Live free or 
> > die! Geek by nature, Linux by choice, Debian of course. If you can't 
> > apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 
> > 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3
> > 
> > _______________________________________________
> > caracas-pm mailing list
> > caracas-pm at pm.org
> > http://mail.pm.org/mailman/listinfo/caracas-pm
> 
> ccTLD
>    ___      ___   ________
>    \  \    /  /  /  ___  /
>     \  \  /  /  /  /__/ /
>      \  \/  /  /  _____/
>       \    /  /  /____
>     [] \__/   \______/  
>  ________________________
> /__ http://www.nic.ve __/
> 
>      Francisco J. Obispo
> Internet Services Administrator
>         fobispo at nic.ve
>         CNTI--REACCIUN
> 
> Thought of the day:
> 
> A writer is congenitally unable to tell the truth and that is why we 
> call what he writes fiction. 		-- William Faulkner


ccTLD
   ___      ___   ________
   \  \    /  /  /  ___  /
    \  \  /  /  /  /__/ /
     \  \/  /  /  _____/
      \    /  /  /____
    [] \__/   \______/  
 ________________________
/__ http://www.nic.ve __/

     Francisco J. Obispo
Internet Services Administrator
        fobispo at nic.ve
        CNTI--REACCIUN

Thought of the day:

A writer is congenitally unable to tell the truth and that is why we call
what he writes fiction.
		-- William Faulkner



More information about the caracas-pm mailing list