• Publicidad

Ordenar datos con while

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

Ordenar datos con while

Notapor perlanegra » 2012-04-13 13:20 @597

Buenas, soy nueva en Perl y tengo que crear un programa que me ordene números en un array utilizando while() e if(). He llegado a un punto y no sé qué es lo que tengo mal... Me gustaría que me ayudarais. Esto es lo que tengo, pero no me ordena los números:

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


¡Muchas gracias!
Última edición por explorer el 2012-04-13 18:44 @822, editado 1 vez en total
Razón: Formateado de código con Perltidy y poner marcas Perl
perlanegra
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2012-04-13 13:05 @587

Publicidad

Re: Ordenar datos con while

Notapor explorer » 2012-04-13 18:51 @827

Bienvenida a los foros de Perl en Español, perlanegra.

El método de ordenación que usas parece que es el de la burbuja, pero veo bastantes errores... Por ejemplo, el bucle más interno funciona mientras la comparación entre elementos se cumpla, pero puede darse el caso de que existan elementos desordenados que no cumplan la condición, por lo que no podrá terminar de ordenar los elementos que estén hacia el final de la lista. Poner $c a 1 en la línea 21, no afecta a ninguna otra línea del programa... Vamos, que no hace nada.

Hoy mismo hemos terminado un hilo con ese mismo problema. Como siempre, la solución está hacia el final (de la segunda página).
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: Ordenar datos con while

Notapor perlanegra » 2012-04-13 20:49 @909

No me gustaría copiar y pegar el trabajo de otra persona... Me gustaría que me dijeses los errores y lo que tengo que cambiar, lo que tengo que poner para que funcione... Me estoy fijando en el organigrama que nos pasó el profesor para crear el código así que prefiero no utilizar comandos que no aparezcan en él y más o menos es como lo tengo pero me dices que hay errores que me gustaría que me dijeras y cómo lo mejoro.

Por cierto, ¿me podrías recomendar algún documento de texto plano que no sea libreoffice? Muchas gracias.
perlanegra
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2012-04-13 13:05 @587

Re: Ordenar datos con while

Notapor explorer » 2012-04-13 21:10 @924

Hay varios problemas... pero el primero es de concepto.

Primero, el ejercicio consiste en elegir (o diseñar) un algoritmo de ordenación, y luego, implementarlo en Perl.

Como es normal, la gente que empieza en programación suele elegir los métodos más sencillos sobre los complicados, así que es mucho más frecuente que elijan el método de ordenación de la burbuja a, por ejemplo, el quicksort.

Y aquí viene el primer problema: la implementación del algoritmo de burbuja es tan simple que todas las soluciones son prácticamente iguales.

Eso quiere decir que, aunque yo te dijese todos los errores de tu programa, y tú los corrigieses, el resultado, al final, sería EL MISMO que el que hay publicado al final del hilo enlazado antes.

Entonces... para llegar a LA MISMA conclusión... ¿por qué dar tantas vueltas? Vete directamente al código publicado, y lo copias y, lo más importante, trata de entenderlo.

Si quieres tener la conciencia tranquila, te doy el mismo consejo que le di a él: entra en la página de Wikipedia donde se describe el algoritmo de la burbuja, y trata de transcribir el pseudocódigo a Perl.

El resultado será el mismo, pero lo habrás hecho tu misma, partiendo del entendimiento de cómo funciona el algoritmo.

En cuanto a los errores de tu código, ya te he contado los dos más importantes. Sobre todo el de la comparación de valores como condición del segundo bucle. Si hubieras leído el hilo que te he indicado, te hubieras dado cuenta de que, al principio de la segunda página, el usuario alexclipse hace lo mismo que tu (esa condición), y yo le respondo lo mismo que te respondo a ti.

Comprenderás, entonces, que yo no me sienta muy animado a repetir lo mismo por segunda vez.

Por favor, lee el hilo, al menos la segunda página. Comprende el algoritmo de la burbuja en la Wikipedia (aunque también está copiado en esa segunda página), y verás que tienes que hacer muy pocos cambios en tu código para que funcione.

No entiendo lo que pides de texto plano y libreoffice... Lo primero es un formato y lo segundo es una aplicación de software libre.
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: Ordenar datos con while

Notapor perlanegra » 2012-04-13 22:08 @964

Es similar al mío pero no igual... Utiliza más variables que yo y prefiero guiarme de mi código... ¿Me podías explicar en mi código qué es lo que me falta o lo que sobra? Porque solo me ordena los dos primeros números... ¡Es urgente, por favor!

Con respecto al documento de texto plano me refiero a lo que escribiste en el tema de bioinformática de abrir un archivo RTF y mostrar otro de pruebafin.txt eliminando \basura\ del comienzo de las líneas... ¿Me podrías decir dónde tengo que guardar el archivo TEXTO.rtf? Porque cuando ejecuto el programa me pone que no existe tal archivo en el programa que he creado. ¡Gracias de nuevo! :?
perlanegra
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2012-04-13 13:05 @587

Re: Ordenar datos con while

Notapor explorer » 2012-04-13 23:29 @020

perlanegra escribiste:Utiliza más variables que yo y prefiero guiarme de mi código... ¿Me podías explicar en mi código qué es lo que me falta o lo que sobra? Porque solo me ordena los dos primeros números... ¡Es urgente, por favor!
Tú utilizas seis variables, y él utiliza siete: No es mucha diferencia. Hace el mismo bucle para leer los números desordenados que tú. Hace el mismo bucle inicial para recorrer todos los valores que tú. Hace la misma comparación de ordenación que tú. Hace la misma operación de intercambio de valores que tú...

Lo siento, pero el algoritmo de la burbuja es ESE. Si yo me inventase algún paso más o menos, no sería el algoritmo de la burbuja y, muy posiblemente, no ordenaría los números.

Si no quieres copiar ese algoritmo, entonces escoge otro. Por ejemplo, el algoritmo de la burbuja con centinela (explicado en la misma página de la Wikipedia).

Lo siento, pero los algoritmos son, o no son.

Y ya te he dicho antes qué está mal y qué te sobra. Y lo que te falta está también en ese hilo.

Si solo te ordena los dos primeros números es porque, casi seguro, no se cumple la condición del bucle while() más interno (aquel que te digo que está mal, que NO debería ser un while()).

perlanegra escribiste:Con respecto al documento de texto plano me refiero a lo que escribiste en el tema de bioinformática de abrir un archivo RTF y mostrar otro de pruebafin.txt eliminando \basura\ del comienzo de las líneas... ¿Me podrías decir dónde tengo que guardar el archivo TEXTO.rtf? Porque cuando ejecuto el programa me pone que no existe tal archivo en el programa que he creado. ¡Gracias de nuevo! :?
En ese comentario, quedó claro que el programa NO tenía que procesar el archivo en formato RTF original, sino la versión texto de ese archivo. Por lo tanto, lo que hay que hacer es "traducir" de un formato a otro (de .rtf a .txt). Para ello, puedes usar el LibreOffice (de distribución gratuita) o alguno de los muchos programas que entienden el formato RTF. Dentro del programa, cargas el archivo RTF y luego le pides que lo grabe como texto. Y ese es el archivo que tienes que leer y procesar.

Los archivos debes dejarlos en los lugares donde esperan los programas que estén esos archivos.
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: Ordenar datos con while

Notapor perlanegra » 2012-04-14 09:43 @447

Comparando... Tengo algunos cambios pero me sigue ordenando los dos primeros números, ¿qué tengo que hacer?

print "Introduzca la cantidad de numeros a ordenar: ";
$n = <STDIN>;
chomp ($n);
$i = 0;
$c = 1;
while ($i < $n)
{
print "Introduzca un numero:";
my $b = <STDIN>;
chomp ($b);
push @a, $b;
$i++;
}
$i = 0;
$c = 1;
if ($c != 0)
{
while ($i != $n-1)
{
if ($a[$b] > $a[$b+1])
{
$temp=$a[$b];
$a[$b]=$a[$b+1];
$a[$b+1]=$temp;
}
$i++;
}
$i++;
}
print "@a\n";

¿NO me podrías recomendar otro programa que entienda RTF que no sea Libreoffice? Es que tarda mucho en descargarse... Y lo de guardar el archivo... Yo creo los códigos en un Bloc de notas dentro de una carpeta y cuando los ejecuto tengo que ir a esa carpeta y a ese bloc... pero no sé dónde tengo que poner el RTF porque dice que no existe en el bloc de notas y ahí no debería ponerse... Gracias.
perlanegra
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2012-04-13 13:05 @587

Re: Ordenar datos con while

Notapor explorer » 2012-04-14 10:25 @476

Solo cambian los dos primeros números porque el índice $b no cambia.

En cuanto a editores RTF, seguro que en tu ordenador hay más de uno. Si estás en Windows, el Wordpad creo que es capaz de leerlo. Si estás en Linux, puedes usar el ted o el antiword.

Debes poner el archivo a procesar en un directorio que pueda localizar y entrar el programa. Lo más sencillo es que sea el propio directorio del programa.
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: Ordenar datos con while

Notapor perlanegra » 2012-04-14 10:39 @485

¿Y qué tengo que hacer para que cambie $b? Lo siento, pero es que soy nueva en esto y mi profesor no nos enseña nada... Gracias.
perlanegra
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2012-04-13 13:05 @587

Re: Ordenar datos con while

Notapor explorer » 2012-04-14 10:59 @499

Hacer lo mismo que haces con la variable $i: reiniciarla, incrementarla...
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

Siguiente

Volver a Básico

¿Quién está conectado?

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