• Publicidad

Algoritmos y funciones

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

Algoritmos y funciones

Notapor Aceitunas » 2013-12-10 07:28 @353

Creo que un tema donde podamos poner algoritmos y funciones estaría bastante bien, ya que no hay ninguno. Dejo una función para comenzar :)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. # Pasa una cadena en mayusculas a morse.
  3. # Aceitunas
  4.  
  5. use strict;
  6.  
  7. print "Introduce una cadena: ";
  8. my $datos = <STDIN>;
  9.  
  10. my @letras = <DATA>;
  11.  
  12. my $len = length($datos);
  13. my $i = 0;
  14.  
  15. while($i < ($len-1))
  16. {
  17.     my $char = $letras[ord(substr($datos,$i,1))-65];
  18.        
  19.         chomp($char);
  20.         $char =~ s/ //g;
  21.        
  22.         print $char . " ";
  23.        
  24.         $i++;
  25. }
  26.  
  27. print "\n";
  28. exit(0);
  29.  
  30. __DATA__
  31. .-      
  32. -...
  33. -.-.
  34. -..
  35. .
  36. ..-.
  37. --.
  38. ....
  39. ..
  40. .---
  41. -.-
  42. .-..
  43. --
  44. -.
  45. ---
  46. .--.
  47. --.-
  48. .-.
  49. ...
  50. -
  51. ..-
  52. ...-
  53. .--
  54. -..-
  55. -.--
  56. --.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Publicidad

Re: Algoritmos y funciones

Notapor Aceitunas » 2013-12-10 10:41 @487

Ordenamiento burbuja

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. # Ordenamiento burbuja
  3. # Aceitunas
  4.  
  5. use strict;
  6.  
  7. my @datos = (1,5,9,5,7,6,3,2,7,4);    
  8. my $CantidadDatos = 10;
  9.  
  10. for (my $i = 0; $i < $CantidadDatos; $i++)
  11. {
  12.     for (my $a = $i; $a < $CantidadDatos ; $a++)
  13.         {
  14.                 if ($datos[$i] > $datos[$a])
  15.                 {
  16.                         my $temp = $datos[$a];
  17.                
  18.                         $datos[$a] = $datos[$i];
  19.                         $datos[$i] = $temp;
  20.                 }
  21.         }
  22. }
  23.  
  24. foreach my $e (@datos)
  25. {
  26.     print $e . "\n";
  27. }
  28.  
  29. exit(0);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: Algoritmos y funciones

Notapor explorer » 2013-12-10 13:27 @602

Recordar que existe la web RosettaCode.org, donde se pueden encontrar ejemplos de implementación.

Por otra parte, está bien intentar hacer por uno mismo esos algoritmos, y ver las distintas formas que Perl nos permite implementarlos.

Esta es mi versión de la ordenación de burbuja:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. # Ordenamiento de burbuja
  3. # Joaquín Ferrero
  4. use v5.16;
  5.  
  6. my @datos = qw(1 5 9 5 7 6 3 2 7 4);    
  7.  
  8. my @datos_ordenados = burbuja(@datos);
  9.  
  10. say "@datos_ordenados";
  11.  
  12.  
  13. sub burbuja {
  14.     my @datos = @_;
  15.  
  16.     my $CantidadDatos = @datos;
  17.  
  18.     for (my $i = 0;  $i < $CantidadDatos; $i++) {
  19.     for (my $j = $i; $j < $CantidadDatos; $j++) {
  20.  
  21.         @datos[$j, $i] = @datos[$i, $j]
  22.             if $datos[$i] > $datos[$j];
  23.     }}
  24.  
  25.     return @datos;
  26. }
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: Algoritmos y funciones

Notapor Aceitunas » 2013-12-11 04:41 @237

Sí, explorer, ¡je,je! Está bastante bien comparar los algoritmos que hace uno con los que hace otro para así poder aprender. Además, se ahorran muchas preguntas tipo "cómo sería este ejercicio en Perl", etc.

Otro sencillito pero bastante preguntado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. # Obtener el número mas grande que contiene un array.
  3. # Aceitunas
  4.  
  5. use strict;
  6.  
  7. my @numeros = (1,85,64,23,78,54,69,25,1,2);
  8.  
  9. my $NumMayor = 0;
  10.  
  11. foreach my $num (@numeros)
  12. {
  13.     $NumMayor = $num if ($num > $NumMayor);
  14. }
  15.  
  16. print "El numero mayor es: " . $NumMayor . "\n";
  17.  
  18. exit(0);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: Algoritmos y funciones

Notapor Aceitunas » 2013-12-11 07:27 @352

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. # Obtener e imprimir las cadenas que están entre números
  3. # Aceitunas
  4.  
  5. use strict;
  6. use v5.16;
  7.  
  8. my $cadena = "223hola 1que 78tal??0";
  9. my @frase;
  10.  
  11. while($cadena =~ /[0-9]*(.+?)[0-9]/g)
  12. {
  13.     push(@frase,$1);
  14. }
  15.  
  16. say "@frase";
  17.  
  18. exit(0);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Le voy pillando el truco a la expresiones regulares :lol:

Dejo otro ejercicio puesto mientras que lo hago:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. Hacer un programa con el que, a partir de un fichero del siguiente tipo: 
  2.  
  3.    12345:Lopez,Juan:JL 
  4.    58694:Martinez,Luis:LM 
  5.    36495:Abad,Ramon:RA 
  6.    93764:Garcia,Jose:JG 
  7.  
  8. obtengamos una salida del siguiente tipo: 
  9.  
  10.    ID   Iniciales  Nombre 
  11.   12345    JL   Juan Lopez 
  12.   58694    LM   Luis Martinez 
  13.   36495    RA   Ramon Abad 
  14.   93764    JG   Jose Garcia 


EDITO: pongo mi solución al ejercicio que he puesto antes.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. # Aceitunas
  3.  
  4. use strict;
  5.  
  6. open(FILE,"datos.txt");
  7.  
  8. print "ID      Iniciales    Nombre\n";
  9.  
  10. while(<FILE>)
  11. {
  12.     $_ =~ /^([0-9]*)\:(.+?),(.+?)\:(.+?)\s+$/;
  13.        
  14.         print "$1     $4         $3  $2  \n";  
  15. }
  16.  
  17. close (FILE);
  18.  
  19. exit(0);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: Algoritmos y funciones

Notapor explorer » 2013-12-11 08:25 @392

Mi versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.16;                                     # a partir de v5.14 se activa el modo estricto
  3. use autodie;                                   # el programa se muere en caso de problemas con los archivos
  4.  
  5. say join "\t", qw(ID Iniciales Nombre);
  6.  
  7. open my $FILE,'<', 'datos.txt';
  8. while (<$FILE>) {
  9.     if (/(\d+):(.+),(.+):(\S+)/) {             # estamos usando $_. Por eso es la variable "por defecto"
  10.         say join "\t", $1, $4, "$3 $2";
  11.     }
  12. }
  13. close   $FILE;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Observa que no hace falta "escapar" el carácter ':'.
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: Algoritmos y funciones

Notapor Aceitunas » 2013-12-11 10:31 @480

explorer escribiste:Observa que no hace falta "escapar" el carácter ':'.


¡Cierto!, anímate y pon tu ahora algún ejercicio.
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 36 invitados

cron