• Publicidad

Forma de hacer un programa

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

Forma de hacer un programa

Notapor L0rd5had0w » 2008-09-07 15:38 @693

Bueno como perlero nuevo en este extraordinario lenguaje he realizado distintos ejercicios propuestos en diversos post del foro y ejercicios de libros de otros lenguajes, por ejemplo uno de C/C++ donde proponían realizar un dibujo sencillo con "*". Bueno, el resultado de mi código lo coloco abajo; lo único que quería saber es una forma más sencilla de hacerlo mśs legible y qué métodos utilizarían. Salu2...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
my $num = 0;
my $i = 11;
sub Cubo_Up
{
    while($num <=10)
    {
       print " " x ($i),"*" x ($num),"*" x($num - 1),"\n";
       $num++;
       $i--;
    }
}
sub Cubo_Down
{
        $num = 10;
        $i = 0;
        while($num >= 0)
        {
                print " " x ($i),"*" x ($num),"*" x($num + 1),"\n";
                $num--;
                $i++;
        }
}
&Cubo_Up;
&Cubo_Down;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


y el resultado debe ser similar al siguiente...

Código: Seleccionar todo
 
          *
         ***
        *****
       *******
      *********
     ***********
    *************
   ***************
  *****************
 *******************
*********************
 *******************
  *****************
   ***************
    *************
     ***********
      *********
       *******
        *****
         ***
          *
Avatar de Usuario
L0rd5had0w
Perlero nuevo
Perlero nuevo
 
Mensajes: 39
Registrado: 2008-08-09 11:02 @501
Ubicación: Guatemala, Guatemala

Publicidad

Notapor explorer » 2008-09-07 16:11 @716

Hay muchas formas, claro...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
my $t = 10;

sub pinta {
    print ' ' x ($t-$_), '*' x ($_*2+1), ' ' x ($t-$_), "\n";
}

pinta for         0..$t;
pinta for reverse 0..$t-1;
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

Notapor L0rd5had0w » 2008-09-07 16:31 @730

Qué interesante. Qué sencillo lo hizo explorer. Además me gusta la flexibilidad de Perl y cómo llama a la subrutina y lo utiliza con el for, es una forma muy sencilla e interesante de hacerlo...

Me pregunto, explorer, si podría hacer algo como otro perlero lo hizo de que me pudiera indicar algunos ejercicios para poder practicar. Se los agradecería mucho...
Avatar de Usuario
L0rd5had0w
Perlero nuevo
Perlero nuevo
 
Mensajes: 39
Registrado: 2008-08-09 11:02 @501
Ubicación: Guatemala, Guatemala

Notapor explorer » 2008-09-07 16:45 @740

Se me ha ocurrido otra forma: crear primero la parte de arriba y luego crear la parte de abajo, tomando la parte invertida de la primera.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
my $t = 10;
my @al_derecho = map { ' ' x ($t-$_) . '*' x ($_*2+1) . ' ' x ($t-$_) . "\n" } 0..$t;
my @al_reves   = reverse @al_derecho[0 .. $#al_derecho-1];

print join '', @al_derecho, @al_reves, "\n";
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

Notapor explorer » 2008-09-07 16:57 @748

L0rd5had0w escribiste:Me pregunto, explorer, si podría hacer algo como otro perlero lo hizo de que me pudiera indicar algunos ejercicios para poder practicar. Se los agradecería mucho...

Pues el caso es que es algo complicado. Diseñar prácticas requiere una cierta habilidad...

En el foro de Concursos de Perl hay algunos de ellos, pero son de habilidades muy distintas.

Otra forma sería entrar en el foro Básico, mirar la pregunta, e intentar resolverla sin mirar la solución.
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

Notapor Jenda » 2008-09-07 17:27 @769

Podemos simplificarlo un poquito:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $t = 10;
my @al_reves   = reverse( my @al_derecho = map { ' ' x ($t-$_) . '*' x ($_*2+1)} 0 .. ($t-1));

print join "\n", @al_derecho, '*' x ($t*2+1), @al_reves;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Otra posibilidad es aprovechar los regex:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $t = 10;
$_ = (' ' x ($t-1)) . "*\n";
print;
print while (s/ \*/**/ and s/\*$/**/);
print while (s/\*\*/ */ and s/\*$//);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y actualmente basta esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $t = 10;
$_ = (' ' x ($t-1)) . "*\n";
print;
print while (s/ \*/***/);
print while (s/\*\*/ /);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
-------------------------------------------------------
- Estoy aquí para practicar español. Si te ayudó mi respuesta ayudame con un mensaje privado sobre mis faltas por favor. Seguramente habrá muchas :-)
Jenda
Perlero nuevo
Perlero nuevo
 
Mensajes: 132
Registrado: 2007-10-29 06:31 @313
Ubicación: Praga, Republica Checa

Notapor L0rd5had0w » 2008-09-07 17:32 @772

Excelente respuestas; gracias por su apoyo y sería interesante hacer las prácticas de concurso pero si lo difícil es que es de habilidades distintas... pero bueno, voy a probar hacerlas y gracias por sus respuestas. Es muy sencillo al lado del testamento que yo hice para sacarlo. Gracias, jejeje...

mmm, me podrían explicar que hace map
Avatar de Usuario
L0rd5had0w
Perlero nuevo
Perlero nuevo
 
Mensajes: 39
Registrado: 2008-08-09 11:02 @501
Ubicación: Guatemala, Guatemala


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado