• Publicidad

Mayor que un múltiplo de tres

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

Re: Mayor que un múltiplo de tres

Notapor colorado » 2011-04-19 13:56 @622

Conseguí hacerlo funcionar, con la opción que me diste anteriormente.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open (NUMEROS, 'numeros.txt');
  2. my @NUMEROS = <NUMEROS>;
  3. chomp @NUMEROS;
  4. close(NUMEROS);
  5.  
  6. for my $i (0 .. 200) {
  7.     push @secuencia, $NUMEROS[$i], $NUMEROS[$i+1], $NUMEROS[$i+2];
  8. }
  9.  
  10. for my $i ( 0 .. 9 ) {
  11.  
  12.  
  13.     print "$secuencia[$i] ";
  14.  
  15. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Lo de utilizar shift(), creo entenderlo, pero no sé cómo aplicarlo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open (NUMEROS, 'numeros.txt');
  2. my @NUMEROS = <NUMEROS>;
  3. chomp @NUMEROS;
  4. close(NUMEROS);
  5.  
  6.  
  7.  
  8. for my $i ( 0 .. 9 ) {
  9.  
  10. $p = shift(@NUMEROS);
  11.  
  12. print "$NUMEROS[$p] ";
  13.  
  14. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Es lo que tu dices, extrae el primer elemento.

Pero no sé cómo puedo utilizarlo para que la salida final sea, 1 2 3 2 3 4 3 4 5...
colorado
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2010-01-31 14:48 @658

Publicidad

Re: Mayor que un múltiplo de tres

Notapor explorer » 2011-04-19 16:04 @711

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open NUMEROS, 'numeros.txt';
  2. chomp(my @NUMEROS = <NUMEROS>);
  3. close NUMEROS ;
  4.      
  5. for my $i ( 0 .. 9 ) {
  6.      
  7.     $p = shift @NUMEROS;
  8.      
  9.     print "$p ";
  10. }
Coloreado en 0.001 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: Mayor que un múltiplo de tres

Notapor colorado » 2011-04-19 16:48 @742

Contenido de numeros.txt:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1
2
3
4
5
6
7
8
9
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


salida de tu script:

1 2 3 4 5 6 7 8 9

en algo me pierdo o algo está mal.
colorado
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2010-01-31 14:48 @658

Re: Mayor que un múltiplo de tres

Notapor explorer » 2011-04-19 16:54 @746

En numeros.txt debes guardar la secuencia de números que vas a usar.
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: Mayor que un múltiplo de tres

Notapor colorado » 2011-04-19 17:33 @772

pero... lo que necesito es que el script genere la secuencia a partir del archivo numeros.txt y que la salida sea 1 2 3 2 3 4 3 4 5 siendo numeros.txt:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1
2
3
4
5
6
7
8
9
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
colorado
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2010-01-31 14:48 @658

Re: Mayor que un múltiplo de tres

Notapor explorer » 2011-04-19 18:07 @796

No tiene sentido tener un fichero de texto con una serie de números que son consecutivos: su contenido puede ser generado por un simple bucle for().

Lo que es interesante es guardar tu secuencia de números, ya que no es obvia su generación.

Por eso, primero creamos un fichero numeros.txt en donde guardamos la secuencia:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open my $SEC, q[>], 'numeros.txt';
  2.  
  3. for my $i (0 .. 200) {
  4.     print SEC $i,   "\n";
  5.     print SEC $i+1, "\n";
  6.     print SEC $i+2, "\n";
  7. }
  8.  
  9. close SEC;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y ya podemos entrar en el bucle principal:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open my $SEC, q[<], 'numeros.txt';
  2.  
  3. for my $i (0 .. 9) {
  4.     chomp(my $p = <SEC>);
  5.  
  6.     print "$p ";
  7. }
  8.  
  9. close SEC;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Incluso sería mejor no guardar la secuencia en un fichero. Con guardarlo en un array, nos vale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @SECUENCIA;
  2. for my $i (0 .. 200) {
  3.     push @SECUENCIA, $i, $i+1, $i+2;
  4. }
  5.  
  6. ...;
  7.  
  8. for my $i (0 .. 9) {
  9.     my $p = shift @SECUENCIA;
  10.  
  11.     print "$p ";
  12. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Aquí accedemos mediante shift(), para obtener un valor cada vez, pero se podría hacer también de forma indexada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     my $p = $SECUENCIA[$i];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
La diferencia es que con esta segunda manera, @SECUENCIA no es modificado, como sí ocurre con shift().
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: Mayor que un múltiplo de tres

Notapor Hector Gutierrez » 2011-04-19 21:39 @944

otra forma de resolver la creación de la secuencia es con:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $j = 1;
  2. for my $i ( 1 .. 200 ) {
  3.     print " ", ($i - $j), " ";
  4.     if ( 0 == $i % 3 ) {
  5.         $j = $j + 2;
  6.     }
  7. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Hector Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2011-04-15 14:49 @659

Re: Mayor que un múltiplo de tres

Notapor explorer » 2011-04-20 02:47 @158

¡Genial! Has descubierto la fórmula matemática que genera la secuencia.

Es la mejor solución, desde luego.
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: Mayor que un múltiplo de tres

Notapor colorado » 2011-04-21 08:56 @414

Perdón por no haber respondido antes, acabo de llegar de viaje.

Sois unos máquinas. Hector, muy bueno, has realizado exactamente lo que pedía, genial :wink: :wink: .

No tiene sentido tener un fichero de texto con una serie de números que son consecutivos: su contenido puede ser generado por un simple bucle for().


Bueno, sí tiene sentido, me explico:

Lo que quiero es leer un archivo, en este caso fue numeros.txt, en el que hay una serie de numeros consecutivos, pero en mi código final en ese archivo, puede haber cualquier otra cosa, letras, palabras, nombres y para eso necesito leer del archivo numeros.txt, que podría llamarse palabras.txt (con una serie de palabras) y después manejarlo a mi antojo:

palabra1 palabra2 palabra3 palabra2 palabra3 palabra4 palabra3 palabra4...


Lo que es interesante es guardar tu secuencia de números, ya que no es obvia su generación.

Por eso, primero creamos un fichero numeros.txt en donde guardamos la secuencia


Ahora te entiendo perfectamente, si leo mi archivo orinal y después genero la secuencia que quiero, guardándola en otro archivo o en un array, consigo el mismo resultado.

Por lo tanto, es una alternativa buenísima que me abre nuevas alternativas para mi código final.

Cierro el tema, muy agradecido a los dos, fantásticas soluciones.
colorado
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2010-01-31 14:48 @658

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 33 invitados