• Publicidad

Contar números de una variable y mostrar su total

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

Contar números de una variable y mostrar su total

Notapor preiddy » 2007-07-13 10:09 @465

Hola, después de una larga pausa regreso a la programación y con Perl, claro.
Estoy haciendo ejercicios de memoria para recordar lo poco que sé y no sé por qué me dio por hacer una función que sume los valores de una variable. He probado varios métodos y buscado en la web pero no encuentro una solución.

Por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub contar
{
my $x = shift;
my $y = "";
for ( $i = 0; $i < length($x); $i++ )
 {
  $y = $y + $i;
 }
return($y);
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Luego lo llamo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$salida="123";
$final=peso($salida);
print $final;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero no suma nada, no me da el total que debería ser 6
¿Alguna idea?
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Publicidad

Notapor kidd » 2007-07-13 14:40 @652

Hola:

Estás usando la función length() incorrectamente, pues ésta regresa la cantidad de caracteres de una cadena, no la separa. Lo que necesitas es separar cada número de la cadena para luego sumarlo.

Para esto usamos la función split, que si la usas sin cadena de separador, separa cada carácter de la cadena:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print sumar_cadena("1a23");


sub sumar_cadena{

    my $cadena = shift;

    my $total = 0;

    for my $num( split '', $cadena){

        #Checamos si el caracter es un número y lo sumamos
        if( $num =~ /[0-9]/ ){
             $total += $num;
        }

    }

    return $total;

}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



O si quieres hacerlo aún más corto puedes hacerlo en una línea:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$total += $_ for split '', $cadena;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2007-07-13 16:54 @746

Yo creo que casi lo tenías
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub contar {
    my $x = shift;
    my $y = 0;
    for ( $i = 0; $i < length($x); $i++ ) {
        $y = $y + substr($x,$i,1);
    }
    return($y);
}
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: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor preiddy » 2007-07-16 13:42 @612

Casi, jajaja
Muchas gracias por sus respuestas.
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España


Volver a Básico

¿Quién está conectado?

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