• Publicidad

Cálculos estadísticos a partir de un número

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

Cálculos estadísticos a partir de un número

Notapor gonzalo gallardo » 2009-06-24 20:40 @902

Hola, soy nuevo en el foro y en el tema de la programación.

Tengo un problema respecto a un programa que debo programar para un trabajo, el cual debe reconocer un número ingresado como palíndromo, y a partir de este número, debe encontrar la moda, ordenar de mayor a menor y dar el máximo y el mínimo de los elementos del palíndromo que se ingrese.

He logrado avanzar algo en él, sin embargo hay algo que está fallando y no sé qué es.

Si me pudieran ayudar, estaría muy agradecido.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

$numeros[1]= @ARGV[0];
$max=0;
$min=99;

if (&verifica_palindromo($numeros[1]) == 1)
{
        print "Es Palindromo\n";
}
else
{
        print "No es Palindromo\n";
}

&max_y_min($numeros[1]);
&calcular_moda($numeros[1]);
&ordenar($numeros[1]);



#verifica si el numero ingresado es un palindromo
sub verifica_palindromo()
{

    my $num = $_[0];
    my $longitud=length($num);
    my $reversa = $longitud-1;
    my $resultado = 1;
        for ($contador=0; $contador < $longitud/2;$contador++)
        {
                $valor1=substr($num,$contador,1);
                $valor2=substr($num,$reversa,1);

                $reversa--;
                if ($valor1 != $valor2)
                {
                        $resultado=0;
                }

        }

    return $resultado;
}

#da el maximo y el minimo

sub max_y_min()
{

     my $numero=$_[0];
     my $valor=0;
     for($i=0;$i<length($numero);$i++)
     {
        $valor=substr($numero,$i,1);
        if ($max<$valor)
        {
                $max=$valor;
        }
        if ($min>$valor)
        {
                $min=$valor;
        }
     }

     printf("El Maximo numero dentro de la lista es: %d",$max);
     printf("\nEl Minimo numero dentro de la lista es: %d\n",$min);
     return;
}

# se calcula la moda
sub calcular_moda()
{
     my $numero = $_[0];
     my $moda = 99;
     my $cantidad = 0;
     my $tcantidad = 0;
     my $valor=0;

     for($i=0;$i<length($numero);$i++)
     {
        $tvalor=substr($numero,$i,1);
        $tcantidad=0;
        for($j=0;$j<length($numero);$j++)
             {
                $valor=substr($numero,$j,1);
                if ($tvalor == $valor)
                {
                        $tcantidad++;
                }

        }

        if ($moda == 99)
        {
                $moda=$tvalor;
                $cantidad = $tcantidad;
        }
        else
        {
                if ($tcantidad > $cantidad)
                {
                        $moda=$tvalor;
                        $cantidad = $tcantidad;
                }
        }
     }
     print "La moda es : $moda\n";
     return;
}

# se calcula la moda
sub ordenar()
{
     my $numero = $_[0];
     my @ordenar;

     for($i=0;$i<length($numero);$i++)
     {
        $tvalor=substr($numero,$i,1);
        $ordenar[$i]=$tvalor;
     }
     @ordenado = sort { $b <=> $a } (@ordenar);
     print "Numeros ordenados\n";
     for($i=0;$i<length($numero);$i++)
     {
        print "$ordenado[$i]\n";
     }


     return;
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
gonzalo gallardo
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2009-06-24 20:32 @897

Publicidad

Notapor explorer » 2009-06-24 20:52 @911

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

¿Qué es lo que te falla? ¿Qué cálculo no te sale bien?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor gonzalo gallardo » 2009-06-24 20:58 @915

Hola explorer.
El problema está ahí, el programa no me está realizando los cálculos del palíndromo que ingreso. En realidad, no me deja ingresar datos. :? y me arroja como máximo 0, mínimo 99 y moda 99.
gonzalo gallardo
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2009-06-24 20:32 @897

Notapor netsoul » 2009-06-24 21:31 @938

Si no te deja ingresar números, es porque no le estás diciendo para que te pida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "Ingrese los numeros: ";
chomp($numeros[1]=<STDIN>);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Que también podría ser pasados como argumentos (sin modificar tu código):
Código: Seleccionar todo
~$perl palindromo.pl 12345


Al final de cuentas, nada está mal.
With Perl
Imagination is more important than knowledge. Albert Einstein.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091

Notapor gonzalo gallardo » 2009-06-24 21:50 @951

Hola, netsoul.

Buen punto, yo ya me había fijado en esa parte del ingresa datos :lol: , sin embargo mi problema sigue sin resolver, pues al ingresar un palíndromo, el programa aún no me calcula lo que necesito que me calcule :cry:
gonzalo gallardo
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2009-06-24 20:32 @897

Notapor explorer » 2009-06-25 07:21 @348

Un par de cosillas...

* La línea donde poner @ARGV[0], es mejor ponerlo como $ARGV[0] (si pusieras el use warnings; al principio del programa, el propio Perl te avisaría)

* He comprobado que la detección de si es palíndromo o no, funciona. Lo mismo para el cálculo de máximo y mínimo, y la salida de los valores ordenados. Bueno, no he hecho muchas pruebas pero sí sale lo correcto.

* En donde tengo dudas es en lo del cálculo de la moda: la moda no tiene por qué ser un único valor. En el módulo Statistics::Basic::Mode se indica precisamente eso.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor explorer » 2009-06-26 05:43 @280

Se me olvidó indicar algo interesante...

Perl tiene la función reverse(), por lo que comprobar si una cadena es polindroma, es muy fácil:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$x = "12321";
if ($x eq reverse $x) {
    print "Es palíndromo\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: 14486
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: No hay usuarios registrados visitando el Foro y 1 invitado

cron