• Publicidad

Problema en un programa de ordenación

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

Problema en un programa de ordenación

Notapor perliña » 2013-04-09 05:40 @277

Tengo que hacer un programa que me ordene unos números, pero ocurre que el búcle solo lo realiza una vez. Es decir, introduzco los números 3, 2 y 1 y me los ordena como 2, 1, 3.

No encuentro el fallo. A ver si alguien puede ayudarme a verlo.

Esta es la parte del código que creo que falla:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $b = 1;
  2. $c = 0;
  3. while ( $b < $n ) {
  4.         while ( $c < ( $n - $b ) ) {
  5.                 if ( $num[$c] > $num[ $c + 1 ] ) {
  6.                 $t = $num[$c];
  7.                 $num[$c] = $num[ $c + 1 ];
  8.                 $num[ $c + 1 ] = $t;
  9.                 }
  10.  
  11.                 $c++;
  12.         }
  13.         $b++;
  14. }
  15.  
  16. print "Los numeros, en orden creciente, son: @num\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
perliña
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2013-04-09 05:18 @262

Publicidad

Re: Problema en un programa de ordenación

Notapor explorer » 2013-04-09 05:45 @281

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

¿Cuál es el valor de $n? En el while() lo usas, pero no ha sido definido antes.
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: Problema en un programa de ordenación

Notapor perliña » 2013-04-09 06:02 @293

Sí había sido definido. $n es la cantidad de números que quieres ordenar, que lo tenía definido antes. :?
El código entero del programa es el siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "Introduzca la cantidad de numeros que quiera ordenar: ";
  2. $n = <STDIN>;
  3. chomp($n);
  4. while ( $n <= 0 ) {
  5.         print "Introduce un numero mayor de 0:";
  6.         $n = <STDIN>;
  7.         chomp($n);
  8.         }
  9.  
  10. if ( $n > 0 ) {
  11. $i=0;
  12.         while ( $i < $n ) {
  13.         print "Introduce los numeros: ";
  14.         $a = <STDIN>;
  15.         chomp($a);
  16.         push @num, $a;
  17.         $i++;   }
  18. $b = 1;
  19. $c = 0;
  20. }
  21.  
  22. while ( $b < $n ) {
  23.         while ( $c < ( $n - $b ) ) {
  24.                 if ( $num[$c] > $num[ $c + 1 ] ) {
  25.                 $t = $num[$c];
  26.                 $num[$c] = $num[ $c + 1 ];
  27.                 $num[ $c + 1 ] = $t;
  28.                 }
  29.  
  30.                 $c++;
  31.         }
  32.         $b++;
  33. }
  34.  
  35. print "Los numeros, en orden creciente, son: @num\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
perliña
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2013-04-09 05:18 @262

Re: Problema en un programa de ordenación

Notapor explorer » 2013-04-09 06:30 @312

Falta reinicializar el valor de $c antes del bucle de la línea 23. Al no hacerlo, solo se ejecuta una vez.
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: Problema en un programa de ordenación

Notapor perliña » 2013-04-09 06:44 @322

Muchísimas gracias. Ya he conseguido solucionar el problema
perliña
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2013-04-09 05:18 @262

Re: Problema en un programa de ordenación

Notapor explorer » 2013-04-09 08:01 @376

Esta es mi versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. print "Introduzca la cantidad de números a ordenar: ";
  4. my $n = <STDIN>;
  5. chomp $n;
  6.  
  7. if ( $n > 0 ) {
  8.     my @numeros;
  9.  
  10.     for (1 .. $n) {
  11.         print "Introduce un número mayor de 0: ";
  12.         $a = <STDIN>;
  13.         chomp $a;
  14.         push @numeros, $a;
  15.     }
  16.  
  17.     for my $b ( 1 .. $n - 1 ) {
  18.         for my $c ( 0 .. ( $n - $b - 1) ) {
  19.             if ( $numeros[$c] > $numeros[$c+1] ) {
  20.                 ($numeros[$c],  $numeros[$c+1]) = ($numeros[$c+1], $numeros[$c]);
  21.             }
  22.         }
  23.     }
  24.    
  25.     print "Los números, en orden creciente, son: @numeros\n";
  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


Volver a Básico

¿Quién está conectado?

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