[caracas-pm] Sugerencias sobre uso de arrays y hashes

Christian Sánchez cass_ba at cantv.net
Thu May 26 07:12:00 PDT 2005


Buenas tardes
En la universidad nos estan dando clases de java y lo que es
programación orientada a objetos, el Prof. conoce poco o casi nada de
Perl, y la verdad Java no me ha gustado mucho, es por eso que me
gustaria llevarle al Prof. algunos ejemplos de como usar Perl para
resolver algunos ejercicios de una manera más rápida y sencilla, sé que
Perl tambien puede usar la metodología orientada a objetos, pero el
ejemplo que pongo a continuación es muy sencillo, ya lo resolvi usando
java (son muchas lineas de código ...) y trate de hacerlo usando Perl.
El ejercicio era el siguiente: 
Se tiene que indicar un valor inicial y un valor final, luego examinar
los números que sean múltiplos de cada uno de los números que estan en
el rango comprendido entre el valor inicial y el final, sumar cada uno
de los múltiplos y luego hacer la suma total de todos los múltiplos que
se consiguieron. Además se ha de conseguir cual de los resultados de la
suma de los múltiplos de cada número tiene el mayor valor, y obtener el
promedio de la suma total de los múltiplos.
Yo lo resolvi usando un array y un hash, estoy seguro que hay mas
maneras de hacerlo, les envio lo que escribi para ver que cosas sugieren
que se le puede cambiar, no estoy muy ducho en Perl, asi que cualquier
sugerencia sera bien recibida.
Otra cosa, seria mucho pedir algún ejemplo de como se resolvería esto
haciendo uso de la POO con Perl?, eso si seria interesante.

Saludos.
----------------------------- Este es el script ------
#!/usr/bin/perl

print "Introduzca el el valor inicial: \n";
$a = <STDIN>;
print "Introduzca el valor final: \n";
$b = <STDIN>;
#se determina cuantos numeros va a tener el vector
$elmvec = $b - $a ;
#se llena el vector
 for($i=0;$i<=$elmvec;$i++)
 {
  push (@vector,$a++)
 }
#se calculan los multiplos de cada numero que esta en el vector
#y se crea un hash con el numer y la suma de sus multiplos
foreach $num (@vector)
{
 $j = 0;
 for($i=1;$i<=$num;$i++)
 {
   if($num % $i == 0)
    {
     print "El numero $i es multiplo de $num\n";
     $j= $j + $i;
    }
 }
 $hash{$num}=$j;
}
#se muestran los resultados
foreach $valor (sort(keys (%hash))) {
print "La suma de multiplos para $valor es  $hash{$valor}. \n";
#se suman los totales de los multiplos
$summul = $summul + $hash{$valor};
#se calcula el maximo de las sumas de los multiplos
$max = $hash{$valor} if $max < $hash{$valor};
}
#se calcula el promedio
$numelm = keys(%hash);
$prom = $summul/$numelm;
print"La suma total de los multiplos es $summul\n";
print "El maximo es $max\n";
print "El promedio es: $prom\n";

---------------------------------

-- 
Christian Sánchez
Usuario GNU/Linux 234800
Maracay - Venezuela
ID Jabber: g013m at bulmalug.net
www.unplug.org.ve


More information about the caracas-pm mailing list