lunes, 19 de diciembre de 2011

Encuentra divisores


Buenas noches, para poder ayudar a terminar los deberes a un niño , puse a programar esto que enlista los divisores (enteros )de un numero N. (que no sea muy grande, por la salud de su microprocesador)


#!/usr/bin/perl
# este programa lee un numero N
# y calcula todos sus divisores
# autor: Juan Manuel Ovejero
print"*************\n";
print"* DIVISORES *\n";
print"*************\n";
print"ingrese el numero :";
chop($num=<STDIN>);
print "\n";
for($i=1;$i<=$num;$i++){
$res=$num%$i; # calcula el resto de la division del numero con el indice 
if($res==0){
$con++; # si el resto, es decir si el indice es divisor del numero, suma uno a al cantidad de divisores
print "$i \n";
}


print "listo! \n";

sábado, 17 de diciembre de 2011

Algoritmo numero primo

Hola a todos!!

Esta mañana me desperté con una inquietud programeral.  Y es otro procedimiento sencillo : ¿cuando un numero es primo?

segun la wikipedia.

Un número primo es un número natural mayor que 1 que tiene únicamente dos divisores distintos: él mismo y el 1. Se contraponen así a los números compuestos, que son aquellos que tienen algún divisor natural aparte de sí mismos y del 1. El número 1, por convenio, no se considera ni primo ni compuesto. Los números primos menores que cien son los siguientes: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89 y 97
entonces me puse a pensar (poco a decir verdad) como responder a la pregunta ¿es el 3.651.497 un numero primo? con esto en mente y conociendo la deficion me puse a programar un poco en PERL y encontré esta solución:

  1. #!/usr/bin/perl
  2. # este programa lee un numero N
  3. # y avisa si es un numero primo
  4. print"*******************************\n";
  5. print"* AVISO DE PRIMO              *\n";
  6. print"* ----- -- ------             *\n";
  7. print"*******************************\n";
  8. print"ingrese el numero :";
  9. chop($num=<STDIN>);
  10. print "\n";
  11. $con=0; # contador de divisores
  12. for($i=1;$i<=$num;$i++){
  13. $res=$num%$i; # calcula el resto de la division del numero con el indice 
  14. if($res==0){
  15. $con++; # si el resto, es decir si el indice es divisor del numero, suma uno a al cantidad de divisores
  16. }
  17. if ($con>2){ 
  18. last; # si tiene mas de dos divisores y aun no llego al final, sale de la repeticion.
  19. }
  20. if ($con<=2){
  21. print "el numero $num ES primo \n";
  22. }
  23. else{
  24. print "el numero $num NO es primo! \n";
  25. }
  26. print "listo! \n";
corriendolo me queda asi

con lo que resulta que 3.651.497 es un numero primo!

espero que este algoritmo le sirva a algún estudiante , colega, etc. obviamente se puede mejorar, pero ya se me hace tarde para almozar! lo hare otro dia.

Hasta la proxima lectores!

saludos!

viernes, 16 de diciembre de 2011

Sumar impares

Hola! por esas cosas de la vida, tuve que volver a mi viejo amor, a programar, fabricar herramientas informaticas a partir que otras, que sirvan para solucionar problemas en el tratamiento y presentacion de datos.!! 

Una grata sorpresa es saber que existe un lenguaje de programacion como PERL. 

Este es mi primer código fuente. Es una programa para la consola de linux que suma los N primeros números impares. Es simple como procedimiento, lo encuadro en un nivel de dificultad "ni media neurona". 

Helo aqui

#!/usr/bin/perl
# este programa calcula la suma de los N (es el limite) primeros numeros 
# utiliza un bucle for. 
print"*************************************\n";
print"* SUMA DE IMPARES 0.1               *\n";
print"* ---- -- ------- ---               *\n";
print"*************************************\n";
print"cuantos impares desea sumar :";
chop($limite=<STDIN>);
print "\n";
# iniciar las variables que voy a usar en los calculos
# $suma llevara los totales de las sumas sucesivas
$suma=1;
for ($i=1;$i<$limite;$i++){
$suma=$suma+(($i*2)+1);
}
print "la suma de los $limite es : $suma \n";

Seguramente en un proximo encuentro subire mas.