domingo, 2 de junio de 2013

Programando en Perl no. 4

Continuamos con esta serie de ejercicios de programación en Perl.

En esta ocasión veremos:

  1. Determinar el elemento menor de un arreglo o vector. 
  2. Determinar el elemento mayor y menor de un arreglo o vector y su suma. 
  3. Cómo recorrer un hash.   
  4. Una entrevista con Larry Wall, creador de Perl.
1. Llenar un vector, y determinar el elemento menor
$argumentos = $#ARGV;
$cont= 0;
my @vector;
for($i=0;$i<=$argumentos;$i++){
 print $ARGV[$i],"\n";
 $vector[$i]=$ARGV[$i];
 $cont++;
}
print "\nno. de parametros: ",$cont;
my $menor=$vector[0];
my $mayor=$vector[0];
my $suma=0;
foreach $v (@vector) {
   if($v<$menor){
    $menor=$v;
   }
   if($v>$mayor){
    $mayor=$v;
   }
   $suma=$suma+$v;
}

print "\nmenor: ",$menor;
print "\nmayor: ",$mayor;
print "\nsumatoria: ",$suma;

2. Llenar un vector, determinal el elemento mayor y menor, y la suma de todos los elementos (usando una función):
$argumentos = $#ARGV;
$cont= 0;
my @vector;
for($i=0;$i<=$argumentos;$i++){
 print $ARGV[$i],"\n";
 $vector[$i]=$ARGV[$i];
 $cont++;
}
print "no. de parametros: ",$cont,"\n";
print metodo(@vector);

sub metodo{
  my @vector=@_;
  my $resultado="";
  my $menor=$vector[0];
  my $mayor=$vector[0];
  my $suma=0;
  foreach $v (@vector) {
    if($v<$menor){
      $menor=$v;
    }
    if($v>$mayor){
      $mayor=$v;
    }
    $suma=$suma+$v;
  }

  $resultado="el menor es: $menor ,el mayor es: $mayor ,la suma es $suma\n";
  return $resultado;
}
3. Recorrer un hash
my %mapa=('Pedro',32,'Maria',31,'Horacio',65);
print "Recorrer con while\n";
while (($key, $value) = each(%mapa)){
     print $key.", ".$value."\n";
}

print "Recorrer con foreach\n";
foreach $key (%mapa)
{
 print $key.",".$mapa."\n";
}


¿Por qué Perl es como un lenguaje humano?
Aquí una entrevista(en inglés) al creador de Perl,  Larry Wall.


Links
http://bigthink.com/videos/hobbits-would-make-great-programmers
https://github.com/book/perlsecret

sábado, 25 de mayo de 2013

La leyes (no escritas) de la programación no. 2


  • NADIE VA AYUDARTE, repitelo varias veces hasta que lo entiendas. 
  • No importa que tan bueno seas no siempre van a salir las cosas tal y como las planeaste.
  • El café no es lo único que te mantendrá despierto para seguir escribiendo código es necesario realizar otras actividades.
Cuando tenemos un problema muy serio no siempre tendremos ayuda alguna. Es mejor pensar así, nadie va a venir a solucionarnos el problema. Pedir ayuda es válido, pero no esperemos que mágicamente aparezca alguien a salvarnos.

También cometemos el error de NO PEDIR AYUDA cuando realmente la necesitamos, creemos que podemos darle solución sin "molestar a los demás".

Superar la frustración
Es muy difícil hacerlo, esperamos que las cosas siempre salgan como pensamos. Escribir unas cuantas líneas de código y esperar a que mágicamente funcionen. 

Horas y horas de no dormir a la basura.  Eso va llevarnos un buen tiempo lograrlo.

Relajarnos
¿Por qué no?, ir de vez en cuando con los amigos a jugar futbol, ir  al cine, o a tomar una "bebida refrescante" (jeje).


lunes, 13 de mayo de 2013

Programando en Ceylon no.1

1. ¿Cómo compilar?
ceylon compile source\programa.ceylon

2. ¿Cómo ejecutar?
ceylon run default



3. ¿Cómo introducir datos?
doc "Introducir datos"
by "autor"
void run(){
  print("Introduce tu nombre");
  String nombre=process.readLine();
   print("Hola ``nombre``");
}

3. Si se quiere convertir de Integer? y Float? a Integer y Float se puede hacer los siguiente:
void run(){
print("Edad:");
String edadStr=process.readLine();
print("Peso:");
String pesoStr=process.readLine();

Integer? _edad=parseInteger(edadStr);
Float? _peso=parseFloat(pesoStr);

if(exists _edad){
  Integer edad=_edad;
  if(existe _peso){
   Float peso=_peso;
   print("edad:  ``edad``  peso: ``peso``");
  }
}

}
4. ¿Cómo recorrer un vector?
void run(){
String[] nombres=["Juan","Miguel","Antonio","Maria"];

for(n in nombres){
  print("Hola ``n``");
}


for(v in 0..12){
  print("hola no. ``v``");
  }


}

5. Obtener IMC

void run(){
  Persona persona=Persona("Mario",35,66.0,1.75);
  persona.ver();
}

shared class Persona(String nombre,Integer edad,Float peso,Float talla){
   shared Float imc(){
     return peso/(talla*talla);
  }

   shared void ver(){
    print("Hola ``nombre`` tienes ``edad`` , pesas ``peso`` y mides ``talla``");
    print("Tu IMC es de: ``imc()`` tu clasificacion: ``clasificacion()``");
  }

  shared String clasificacion(){
  variable String cad="";
  if(imc()<16.00){
  cad="Infrapeso: Delgadez Severa";
  }else if(imc()<=16.00 || imc()<=16.99){
  cad="Infrapeso: Delgadez moderada";
  }else if(imc()<=17.00 ||imc()<=18.49){
     cad="Infrapeso: Delgadez aceptable";
  }else if(imc()<=18.50 || imc()<=24.99){
    cad="Peso Normal";
  }else if(imc()<=25.00 || imc()<=29.99){
    cad="Sobrepeso";
  }else if(imc()<=30.00 || imc()<=34.99){
    cad="Obeso: Tipo I";
  }else if(imc()<=35.00 || imc()<=40.00){
    cad="Obeso: Tipo II";
  }else if(imc()>=40.00){
    cad="Obeso: Tipo III";
  }else{
      cad="no existe clasificacion";
  }
   return cad;
}
}

"Imposible,significa que no has hallado la solución"
Henry Ford

viernes, 10 de mayo de 2013

Un vistazo a ... Ruby

Update:

Ruby es: Un lenguaje de programación dinámico y de código abierto centrado en la simplicidad y la productividad. Tiene una sintaxis elegante que es natural de leer y fácil de escribir.

Instalamos:

sudo apt-get install ruby-full

Una vez instalado abrimos una terminal y tecleamos:

ruby -v 
¿Cómo guardo un programa en Ruby?
nombrePrograma.rb

¿Cómo ejecuto un programa (desde terminal)?
ruby nombrePrograma.rb

Si usas Windows puedes descargar e instalar http://rubyinstaller.org/


1. Introducir datos desde teclado

introduceDatos.rb
puts "Teclea un nombre: "
STDOUT.flush
nombre=gets.chomp
puts "Hola #{nombre}"

2. Tabla de multiplicar del 1 al 10

tabla.rb
for n in 1..9
   puts "tabla de multiplicar del no. #{n}\n"
   for n2 in 1..10
        puts "#{n} x #{n2} = #{n*n2}\n"
   end
end

3.  Crear una clase
Persona.rb

class Persona
  
  def initialize(nombre,edad)
    @nombre=nombre
    @edad=edad
  end

  def verDatos()
    puts "Hola #{@nombre} tienes #{@edad} años"
  end

end

persona=Persona.new("Horacio",35)
persona.verDatos()


4. Ejecutar un bat o un sh
ejecuta.rb
=begin
comentariops 
multilínea en 
Ruby
=end
#si es Linux
system("sh archivo.sh")
#si es Windows
system("archivo.bat")


comprehensiones.rb
arreglo=[1,4,5,3,2,9,54,33,90,210,0,21]
puts arreglo.map {|x| x!= 0 ? x * 3 : nil}.compact



REPL Ruby
 http://tryruby.org/levels/3/challenges/2 este sitio  es para probar e iniciar en Ruby.



sábado, 4 de mayo de 2013

Estados de un programador Java


 
Inicias un nuevo proyecto. Todo parece perfecto, nada puede ocurrir mal.
Comienza la revisión de requerimientos. Descubres cosas que no habías pensado. Creo debiste preguntar más. Cero documentación, cero ayuda.
Las cosas no van según lo planeado. Todavía no empiezas a codificar y ya surgieron nuevos problemas. 
Lograste terminar casi justo a tiempo. Los problemas se resolvieron, tal vez no de la mejor manera, pero al menos ya no te preocupa tanto. Ir con los amigos a relajarte y tomar una "bebida refrescante".
Periodo de mucha felicidad, las cosas pueden mejorar. Tanta preocupación para nada.
Comienzan los problemas. 

Tu código requiere revisión, tantas horas de angustia y preocupación a la basura. Debes de comenzar de nuevo, quieres matar al usuario.

domingo, 28 de abril de 2013

Las leyes (no escritas) de la programación


  • No importa que pienses que tu código esta bien hecho, siempre va ocurrir algún error.
  • La documentación siempre es importante, siempre y cuando no te toque leerla, es siempre mejor tener tu propio gurú que te ayude y resuelva tus dudas (jeje).
  • El usuario no siempre tiene la culpa, depende del punto de vista.
  • El trabajo es divertido, programar es divertido.


"Si no te apasiona lo que haces es mejor buscar otras opciones"

A veces es bueno probar cosas nuevas, podemos cambiar de parecer. Seguir con el mismo lenguaje de programación sin darnos la oportunidad de elegir otra opción

Algunos lenguajes pueden parecernos aburridos, tan solo ver unas cuantas líneas de código nos provoca un desagrado. Sin embargo, muchas veces nos guste o no debemos actualizarnos y aprender cosas nuevas.

No todo es Java
Existen muchos lenguajes de programación que facilitan nuestras tareas.  Un ejemplo puede ser cuando tenemos la necesidad de ejecutar algún proceso/programa externo.

En Ruby:
ejecutaScript.rb
puts "Ejecutando proceso..."
system("sh procesoShell")

En Perl:
ejecutaScript.pl
print "Ejecutando proceso...";
system("sh procesoShell");

En Python:
ejecutaProceso.py
import os
print "Ejecutando proceso..."
os.system("sh procesoShell")

En Groovy:
ejecutaProceso.groovy
println "Ejecutando proceso..." 
println "sh procesoShell".execute().text

En Scala:
ejecutaProceso.scala
import scala.sys.process._
object Scalar extends App{
 println("Ejecutando proceso...")
  "sh procesoShell"!
}
Evidentemente escribimos menos código que en un programa en Java.

Pruebas y más pruebas
No basta hacer unas cuantas pruebas, también es importante hacer anotaciones, documentar todo lo que se pueda. Algún día alguien nos lo agradecerá.

=COMMENT
  "Aguas con esta parte, puede provocar dolores de cabeza o hasta divorcios"
=CUT 

Comunicación
La parte más importante. No basta tener el email o teléfono de tus compañeros o de tus jefes, lo importante es hablar directamente con ellos.

Serviría de mucho tener una bitácora de lo que se debe o NO debe hacerse. Cuando alguien nuevo se integra a tu equipo de trabajo es importante que sepa como se trabaja.


UPDATE:
Sería bueno leer:

y




sábado, 20 de abril de 2013

Programando en Perl no. 3

Continuamos con esta serie de ejemplos con el lenguaje de programación Perl.

Ejemplo 1. Horoscopo chino en Perl

my %horoscopoChino(0,"mono",1,"gallo",2,"perro",3,"cerdo",4,"rata",5,"buey",6,"tigre",7,"conejo",8,"dragon",9,"serpiente",10,"caballo",11,"cabra");
$resto=0;
print "Anyo de nacimiento: ";
$anyo= <STDIN>;
print "Anyo de nacimiento: ",$anyo;
$anyo=chomp($anyo);
$resto=int($anyo)%12;
print "Te corresponde el signo del:  ". $horoscopoChino{$resto}." \n";

Ejemplo. si el año en el que naciste es 1981, te corresponderá el signo del gallo.

Ejemplo 2.  Calcular días trabajados de un empleado.

my $dia_inicio=0;
my $dia_fin=0;
my $mes_inicio="";
my $mes_fin="";
my $anyo_inicio=0;
my $anyo_fin=0;

my %mesesAnyo=("enero",0,"febrero",1,"marzo",2,"abril",3,"mayo",4,"junio",5,"julio",6,"agosto",7,"septiembre",8,"octubre",9,"noviembre",10,"diciembre",11);

print "Introduce fecha de inicio: \n";
print "Dia: ";
$dia_inicio=<STDIN>;
print "Mes: ";
$mes_inicio=<STDIN>;
chomp($mes_inicio);
print "Anyo: ";
$anyo_inicio=<STDIN>;
print "\nIntroduce fecha de inicio: \n";
print "Dia: ";
$dia_fin=<STDIN>;
print "Mes: ";
$mes_fin=<STDIN>;
chomp($mes_fin);
print "Anyo: ";
$anyo_fin=<STDIN>;

$mesInicio=$mesesAnyo{$mes_inicio};
$mesFin=$mesesAnyo{$mes_fin};


#para los días, se le presta 30
if($dia_inicio > $dia_fin){
  $dia_fin=$dia_fin+30;
}

#para los meses, se le presta 12
if($mesInicio > $mesFin){
  $mesFin=$mesFin+12;
}

$restaDia=$dia_fin - $dia_inicio;
$restaMes=$mesFin - $mesInicio;
$restaAnyo=($anyo_fin-1) - $anyo_inicio;

print "Resultado: ";
print $restaAnyo," anyos ";
print $restaMes," meses ";
print $restaDia," dias";

Ejemplo. Fecha de inicio 2 de agosto de 2003 , fecha final 10 de enero de 2005 nos daría 1 año 5 meses 8 días

Enlaces:

https://codemonkeyjunior.blogspot.com/2013/03/programando-en-perl-no-2.html
https://codemonkeyjunior.blogspot.com/2013/02/un-vistazo-perl.html

Pattern Matching en sencillas palabras (o no tanto)

El pattern matching es una técnica para comparar estructuras de datos contra un patrón y, si coincide, extraer valores o ejecutar lóg...

Etiquetas

Archivo del blog