• Publicidad

Ejercicio que recoja datos y los ordene

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

Re: Ejercicio que recoja datos y los ordene

Notapor explorer » 2012-04-12 10:11 @466

Las únicas condiciones de parada de los bucles deben ser la que marcan sus contadores, que recorren los elementos de la lista. No hay más condiciones que comprobar si el contador ha llegado al último elemento de la lista. No hay que poner otra condición, salvo que uses la variante del centinela.

Enséñanos cómo va tu código...
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

Publicidad

Re: Ejercicio que recoja datos y los ordene

Notapor alexclipse » 2012-04-12 10:23 @474

No he avanzado respecto al último código que puse pues estuve haciendo el ejercicio del tema de bioinformática. Bueno, sí que he hecho un cambio: He borrado el penúltimo print() pues no sirve para nada.

print "Introduzca la cantidad de números a ordenar: ";
$a = <STDIN>;
chomp($a);
while ( $a <= 0 ) {
print "Introduzca un número mayor de 0:";
$a = <STDIN>;
chomp($a);
}
if ( $a > 0 ) {
$n = 0;
while ( $n < $a ) {
print "Introduzca los números: ";
$b = <STDIN>;
chomp($b);
push @numeros, $b;
$n++;
}
}
$c = 0;
$d = $c + 1;
while ( $c < $a ) {
while ( $numeros[$c] > $numeros[$d] ) {
$temp = $numeros[$c];
$numeros[$c] = $numeros[$d];
$numeros[$d] = $temp;
}
$c++;
}
print "Los números ordenados son: @numeros\n";

Estoy muy atascado y no sé cómo seguir :S

Veo el error del segundo bucle como me indicaste pero no la solución ¡je,je!
alexclipse
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2012-03-27 11:17 @511

Re: Ejercicio que recoja datos y los ordene

Notapor explorer » 2012-04-12 15:55 @705

Tan sencillo como copiar y adaptar el código que aparece en la página de la Wikipedia... :)

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. procedimiento DeLaBurbuja (a₀, a₁, a₂, ...aₙ₋₁)
  2.     para i ← 1 hasta n, hacer
  3.         para j ← 0 hasta n - i, hacer
  4.             si a(j) > a(j+1), entonces
  5.                 temp ← a(j)
  6.                 a(j) ← a(j+1)
  7.                 a(j+1) ← temp
  8.             fin si
  9.         fin para
  10.     fin para
  11. fin procedimiento
Coloreado en 0.000 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: Ejercicio que recoja datos y los ordene

Notapor alexclipse » 2012-04-13 08:48 @408

He intentado adaptarlo y tengo esto:

print "Introduzca la cantidad de números a ordenar: ";
$a = <STDIN>;
chomp ($a);
while ($a<=0) {print "Introduzca un número mayor de 0:";
$a = <STDIN>;
chomp ($a);
}
if ($a>0) {
$n = 0;
while ($n<$a) {print "Introduzca los números: ";
$b = <STDIN>;
chomp ($b);
push @numeros, $b;
$n ++; }
}
$c = 1;
$d = 0;
while ($c<$a) {
while ($d<($a-$c)) {
if ($numeros[$d]>$numeros[$d+1]) {
$temp=$numeros[$d];
$numeros[$d]=$numeros[$d+1];
$numeros[$d+1]=$temp;}
$d++;}}
print "Los números ordenados son: @numeros\n";

Lo extraño es que así al ejecutarlo no me devuelve los números, el programa no me muestra nada, pero si, por ejemplo, pongo uno de los últimos dos corchetes detrás del print() me devuelve los números ordenados infinitas veces. Es normal pues está dentro del bucle pero el caso es que están ordenados, aunque si no coloco el corchete ahí no me devuelve nada. Creo que casi lo tengo pero sigue fallando algo.
alexclipse
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2012-03-27 11:17 @511

Re: Ejercicio que recoja datos y los ordene

Notapor alexclipse » 2012-04-13 10:05 @462

He hecho una pequeña corrección que mejora el programa pero ahora me doy cuenta de que me ordena a medias. El programa es este:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "Introduzca la cantidad de numeros a ordenar: ";
  2. $a = <STDIN>;
  3. chomp($a);
  4. while ( $a <= 0 ) {
  5.     print "Introduzca un numero mayor de 0:";
  6.     $a = <STDIN>;
  7.     chomp($a);
  8. }
  9. if ( $a > 0 ) {
  10.     $n = 0;
  11.     while ( $n < $a ) {
  12.         print "Introduzca los numeros: ";
  13.         $b = <STDIN>;
  14.         chomp($b);
  15.         push @numeros, $b;
  16.         $n++;
  17.     }
  18. }
  19. $c = 1;
  20. $d = 0;
  21. while ( $c < $a ) {
  22.     while ( $d < ( $a - $c ) ) {
  23.         if ( $numeros[$d] > $numeros[ $d + 1 ] ) {
  24.             $temp              = $numeros[$d];
  25.             $numeros[$d]       = $numeros[ $d + 1 ];
  26.             $numeros[ $d + 1 ] = $temp;
  27.         }
  28.         $d++;
  29.     }
  30.     $c++;
  31. }
  32. print "Los numeros ordenados son: @numeros\n";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El fallo es que al intercambiar dos números, sigue donde lo dejo y no vuelve a empezar. ¿Qué tengo que cambiar o añadir para que lo haga?
alexclipse
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2012-03-27 11:17 @511

Re: Ejercicio que recoja datos y los ordene

Notapor explorer » 2012-04-13 10:19 @471

Tienes que meter

$d = 0;

dentro del primer bucle, no fuera.
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: Ejercicio que recoja datos y los ordene

Notapor alexclipse » 2012-04-13 10:33 @481

¡¡¡Infinitas gracias!!! ¡¡¡Por fin!!! Tema resuelto. ¡ja,ja! Pero volveré, seguro...
alexclipse
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2012-03-27 11:17 @511

Anterior

Volver a Básico

¿Quién está conectado?

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