• Publicidad

Cómo generar "n" arrays

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Cómo generar "n" arrays

Notapor pedrolopez » 2013-04-26 18:51 @827

Quiero que el programa me pida un número (por ejemplo, 3) y luego me pida ese número de valores para ese número de arrays (3 arrays de 3 elementos cada uno). He intentado hacerlo con un contador ($n) y llamando al array @($n) pero me da error.

Muchas gracias
pedrolopez
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2013-04-26 18:47 @824

Publicidad

Re: Cómo generar "n" arrays

Notapor explorer » 2013-04-26 19:41 @861

Bienvenido a los foros de Perl en Español, pedrolopez.

Parece que quieres crear una matriz o vector bidimensional. En esos casos, te vale con usar una notación sencilla de acceso a los elementos. Por ejemplo:

$n[$i][$j] = $valor;

Si publicas el código, veremos dónde puede estar el error.

Más información en tu propio ordenador en perldoc perllol, y en la Web (traducido al español).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo generar "n" arrays

Notapor pedrolopez » 2013-05-01 06:03 @294

Sí, en principio quería desarrollar un programa para matrices, pero he cambiado de idea y voy a trabajar con rectas, puntos y planos. Me gustaría saber si existe alguna forma de introducir puntos, A (3,4,5), para luego trabajar con ellos o hay que hacerlo introduciendo coordenada por coordenada (Ax=3; Ay=4,...)
Gracias
pedrolopez
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2013-04-26 18:47 @824

Re: Cómo generar "n" arrays

Notapor explorer » 2013-05-01 09:30 @438

Puedes permitirle al usuario que meta la información de una cierta manera, que le sea cómoda. Pero cuanto más cómoda sea esa manera, más tendrás que trabajar, como programador, para traducir la información que mete el usuario a las estructuras que manejará el programa.

Un ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #use utf8::all;                  # Turn on UTF-8. All of it.
  3.  
  4. print "Número de puntos: ";
  5.  
  6. my $n_puntos = 0+ readline;
  7. my %puntos;
  8.  
  9. print "Introduzca los puntos. Ejemplo: A(2,3,1)\n";
  10.  
  11. for my $i (1 .. $n_puntos) {
  12.  
  13.     print "Introduzca nombre y coordenadas del punto $i: ";
  14.     my $entrada = readline;                     # leemos la entrada
  15.  
  16.     (my $nombre) = $entrada =~ m/^\s*(\w+)/;    # el nombre del punto es cualquier palabra al principio de la entrada
  17.  
  18.     my @coordenadas = $entrada =~ m/\((.+?),(.+?),(.+?)\)/;     # las coordenadas son tres cosas entre paréntesis
  19.  
  20.     redo if @coordenadas != 3;                  # hubo un error, repetimos
  21.     redo if $puntos{ $nombre };                 # ese punto ya se metió, repetimos
  22.  
  23.     $puntos{ $nombre } = \@coordenadas;         # lo guardamos en una estructura
  24. }
  25.  
  26. use Data::Dumper;
  27. print Dumper \%puntos;                          # Vemos su forma
  28.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Número de puntos: 3
Introduzca los puntos. Ejemplo: A(2,3,1)
Introduzca nombre y coordenadas del punto 1:
Introduzca nombre y coordenadas del punto 1: A(3,8,
Introduzca nombre y coordenadas del punto 1: A(3,8,4)
Introduzca nombre y coordenadas del punto 2: A(2,3,1)
Introduzca nombre y coordenadas del punto 2: A(2,3,1)
Introduzca nombre y coordenadas del punto 2: B(2,32,1
Introduzca nombre y coordenadas del punto 2: B(2,32,1)
Introduzca nombre y coordenadas del punto 3: C(5,2,0)
$VAR1 = {
          'A' => [
                 '3',
                 '8',
                 '4'
               ],
          'C' => [
                 '5',
                 '2',
                 '0'
               ],
          'B' => [
                 '2',
                 '32',
                 '1'
               ]
        };
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo generar "n" arrays

Notapor pedrolopez » 2013-05-09 05:26 @268

El tema de introducir los puntos ya lo he solucionado, ahora quería saber si es posible introducir dos arrays en una subrutina para que opere con ellos.

Gracias, un saludo.
pedrolopez
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2013-04-26 18:47 @824

Re: Cómo generar "n" arrays

Notapor explorer » 2013-05-09 05:45 @281

Puedes pasar los dos arrays por "referencia":

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. procesa(\@array1, \@array2);
  2.  
  3. sub procesa {
  4.     my($array1_ref, $array2_ref) = @_;
  5.  
  6.     print "El array1 tiene ", scalar(@$array1_ref), " elementos.\n";
  7.  
  8.     print "El segundo elemento de array2 es ", $array2_ref->[1], "\n";
  9.  
  10. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Más información en la sección Pass by Reference en perlsub.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 21 invitados