miércoles, 30 de abril de 2008

Ejercicio 5

En la siguiente imagen tenemos las tablas de semejanzas y también las características (diferencias) para cada una de las técnicas bio-inspiradas.

lunes, 28 de abril de 2008

Ejercicio 4

En el siguiente ejercicio tenemos que hacer un ranking con las 50 palabras en minúscula que más se utilicen en el texto.
El código correspondiente sería:


use strict;
use warnings;

use File::Slurp;

@ARGV || die "Uso: $0 <fichero de entrada>\n";

my %indice;
my $text = read_file( $ARGV[0] ) ;

my @palabras=split(" ", $text);
my $contador = 0;

for (@palabras){
if (/[a-záéíóúñ]+/){
$indice{$_} = 0;

}
}

for (@palabras) {
if (/[a-záéíóúñ]+/) {

$indice{$_} =$indice{$_}+1;
}
}

#for (sort {length($indice{$b}) cmp
length($indice{$a})} keys %indice ) {
for (sort {$indice{$b} <=> $indice{$a}}
keys %indice){

$contador++;
if($contador<=50){
print $_, " = ", $indice{$_},"\n";

}

}


En cuanto a la línea comentada, la primera no funciona y la explicación parece estar en el siguiente trozo de la documentación de perldoc:


Equality Operators

Binary "<=>" returns -1, 0, or 1 depending on whether the left argument is numerically less than, equal to, or greater than the right argument.

Binary "cmp" returns -1, 0, or 1 depending on whether the left argument is stringwise less than, equal to, or greater than the right argument.


<=> compara numéricamente, por tanto, como nuestros valores lo son, es el correcto. Usando cmp y la longitud no nos sirve, puesto que entiende que 8 es menor que 2 pero mayor que 12. A continuación tenemos las salidas para cada caso:

Usando sort {length($indice{$a})cmp length($indice{$b})}:


Usando sort {$indice{$a} <=> $indice{$b}}:

miércoles, 23 de abril de 2008

Ejercicio 3

Por finnnnn!!!!

#!/usr/bin/perl

use strict;
use warnings;

use File::Slurp;

@ARGV || die "Uso: $0 <fichero a partir por trancos>\n";

my $text = read_file( $ARGV[0] ) ;
my @trancos=split("TRANCO", $text);


# $#vector te da el último elemento indexable del array


for (@trancos[1..$#trancos]){
# -x40 multiplica el - por cuarenta, como cadena,
# por tanto, cuarenta - (----- ... --)

print substr($_,0,40), "\n", "-"x40, "\n";

my @parrafo = split("\n\n", $_);

for my $c(@parrafo){
print "<p>", $c, "</p>\n\n";

}
}



La imagen siguiente es la salida

Ejercicio 2

El siguiente ejercicio, cuenta el número de líneas que no están en blanco en un fichero de texto y las calcula para luego guardar ese valor en un fichero de nombre igual al de entrada al programa, pero con la extensión .lc

Así, el programa podría ser:


my $leyendo = "diablocojuelo.txt";
if ( ! -r $leyendo ) {

die "El fichero $leyendo no es legible\n";
}

open my $fh, "<", $leyendo

or die "No puedo abrir el fichero $leyendo por $!\n";

open my $fh_out, ">", "$leyendo.lc";

$contador=0;

while (<$fh>) {
chop; chop;

$contador++ if $_;
}

print $fh_out $contador;
close $fh;

close $fh_out;

De hecho, la lectura del fichero de entrada podría hacerse desde la línea de comandos, poniendo el nombre como argumento, y así no tener que abrir ningún fichero de entrada, pero entonces, ¿cómo acceder al nombre de ese fichero? supongo que una de las variables $algo.

miércoles, 16 de abril de 2008


Este es el primer ejercicio. Estoy depurando con perl -d.

n --> linea siguente

R --> ejecutar

b --> para poner un punto de ruptura en la linea

Sólo se ve una captura de la depuración y se ven distintos pasos

y un error que estoy arreglando

Mi primera entrada

Buenas!!!
Esta es la primera ventana abierta al mundo, de información de la ETSIIT en español!!!
(Aparte de servir para el master).