[Programación] Re: [Programación] Seguirmos con el
perl,,,,
Nicolás Aimetti
programacion@lugro.org.ar
Fri, 09 Dec 2005 14:55:16 +0000
Hola...
> Una última dudilla,,, como hago para crear el arreglo
> de registros y que la dimensión se me actualice
> dinámicamente...
Bien no entendí la pregunta, o por ahí si... usted dirá...
Acá incluyo un ejemplo que juega bastante con el tema de arreglos y
matrices... calculo que en alguno de los puntos debe estar respondida la
pregunta, esperemos que haya suerte.
#!/usr/bin/perl -w
use strict;
# tenemos la siguiente matriz por ejemplo:
# | 0 1 2 |
# | 8 9 4 |
# M = | 4 5 7 |
# | 3 4 6 |
# En perl la representamos mediante un arreglo que contiene cuantro
referencias a otros
# arreglos de tres elementos (o sea, el arreglo principal contiene los
renglones)
# (tambien podría ser un arreglo que contengo 3 referencias a otros
arreglos de 4 elementos,
# depende lo que vaya a hacerce combiene una u otra)
my @M = (
[ 0, 1, 2 ],
[ 8, 9, 4 ],
[ 4, 5, 7 ],
[ 3, 4, 6 ],
);
#perl no permite anidar estructuras complejas, o sea, a difencia los
leguajes
#funcionales que permiterian escribir la estructura anterior de la forma
más intuitiva:
# M = (
# (0,1,2) ,
# (8,9,4 )
# etc...
# )
#
# en perl los ARRAYS y los HASH deben contener datos escalares, y las
referencias lo son.
# En este sentido es más parecido a C.
#A los corchetes [ ] que contienen a los valores 0, 1, 2 se los puede
pensar como un constructor
#que devulven referencias a arrays anonimos.
#si uno no usase arrays anonimos debería hacer algo de está forma:
#
my @renglon1 = (0,1,2);
my @renglon2 = (8,9,2);
my @M1 = (
\@renglon1,
\@renglon2,
#etc...
);
#varias formas de agregar un renglon a M1
push @M1, [ 4, 5, 7 ];
$M1[3] = [ 3, 4, 6 ];
#ahora M y M1 son iguales...
print "A = (\n";
print "\t",join(',',@$_),$/ for @M ;
print ")\n";
print "A = (\n";
print "\t",join(',',@$_),$/ for @M1 ;
print ")\n";
#modificamos el elemento 2,1 (contando de cero, los renglones primero,
# como las matrices en matematica), era un 5 ahora lo hacemos 7
$M[2]->[1] = 7;
#modificamos el elemento 2,0, pero usando otra syntaxis:
${$M[2]}[0] = 7;
print "A = (\n";
print "\t",join(',',@$_),$/ for @M ;
print ")\n";
# a gregamos una columna seteada a 1 a la matriz..
foreach my $row( @M ){
# $row es una referecia a un array... la desrefereciamos con el
@ adelante
push @$row, 1;
#push @{$row}, 1; tambien se puede escribir as'i
}
print "A = (\n";
print "\t",join(',',@$_),$/ for @M ;
print ")\n";
#ahora agregamos un columna con 2 y modificamos la primer columna para
que sea
#igual al indice del renglon
#uso otra syntaxis...
my $largo_de_M = scalar @{$M[0]};
for(my $i=0 ;$i < @M; $i++){
$M[$i]->[0] = $i;
$M[$i]->[$largo_de_M] = 2;
}
print "M = (\n";
print "\t",join(',',@$_),$/ for @M ;
print ")\n";
#M luego de las modificaciones...
#M = (
# 0,1,2,1,2
# 1,9,4,1,2
# 2,7,7,1,2
# 3,4,6,1,2
_END_
Saludos,
Nicolás.