• 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.

Ejercicio que recoja datos y los ordene

Notapor alexclipse » 2012-03-27 11:24 @516

Hola foreros de Perl :D Es mi primer tema creado y llevo muy poco tiempo con Perl así que soy un novato de primero.

Tengo que hacer un ejercicio y no sé cómo :S Es el siguiente:

«Desarrollar un programa que nos permita introducir una sucesión de números en un "array", para posteriormente ordenarlos de menor a mayor y visualizarlos en la pantalla. Utilizar exclusivamente estructuras de control y no funciones predefinidas como sort.»

Por si acaso no queda claro, si ejecuto el programa debe preguntarme la cantidad de números a introducir, por ejemplo: 5. Cuando le he dicho 5, me preguntará cuales son los números, por ejemplo: 2, -174, 35, 28 y 9. Finalmente el programa los introducirá en un array y sin usar funciones predefinidas como sort() devolverá dichos números ordenados.

¡Muchas gracias por vuestra ayuda!
alexclipse
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2012-03-27 11:17 @511

Publicidad

Re: Ejercicio que recoja datos y los ordene

Notapor explorer » 2012-03-27 11:38 @526

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

Por aquí te echaremos una mano cuando te atasques.

De momento, puedes publicar el código que tienes hecho hasta ahora, y te diremos qué mejoras o qué le falta.

Para la primera parte, la de leer el número de parámetros, es muy fácil. Para la segunda es más complicada, ya que tienes que implementar un algoritmo de ordenación.
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-03-27 12:03 @544

Pues de momento solo tengo la primera parte :S

print "Introduzca la cantidad de numeros a ordenar: ";
$a = <STDIN>;
chomp ($a);
while ($a<=0) {print "Introduzca un numero mayor de 0:";
$a = <STDIN>;
chomp ($a);
}
No sé si es el mejor planteamiento pero es lo que se me ha ocurrido. Para cuando se introduzca la cantidad de números se me ha ocurrido hacer un contador que empiece en 0 y que me pida números en un bucle hasta que el contador llegue al valor de $a pero no me ha funcionado bien.

He probado para seguir con esto, pero no me funciona :S
$n = 0;
while ($a>0) {
print "Introduzca un numero: ";
$b = <STDIN>;
chomp ($b);
$n++;
until ($n=$a);
}
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-03-27 12:46 @573

Sí, sí que tienes que hacer un bucle, pero fíjate que has mezclado while() con until(). Debes elegir uno de los dos. Lo normal es elegir while() (mientras ... hacer ...).

Así, sería
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
contador = 0;
mientras (contador  menor_que  cantidad de números a leer) {
    leemos el número
    lo guardamos en el array
    incrementamos contador
}
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-03-28 11:02 @501

Muchas gracias por la ayuda. Voy progresando, además no me lo dais hecho y me hacéis pensar un poco y eso está bien porque mi profesor no es muy bueno :S

Por el momento tengo esto, aunque no sé cómo introducir unos números procedentes del STDIN en el array. He usado push() pero por lo que veo solo me introduce el último valor que toma $b. Si no os importa otra pequeña ayudita ¡je,je! Muchísimas gracias, de verdad.

print "Introduzca la cantidad de numeros a ordenar: ";
$a = <STDIN>;
chomp ($a);
while ($a<=0) {print "Introduzca un numero mayor de 0:";
$a = <STDIN>;
chomp ($a);
}
if ($a>0) {
$n = 0;
while ($n<$a) {print "Introduzca los numeros: ";
$b = <STDIN>;
@numeros = ();
push (@numeros, $b);
$n ++; }
}
print "Los numeros son: @numeros";
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-03-28 11:24 @517

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ($contador < $limite) {
  2.     print "Introduzca un número: ";
  3.     my $numero = <>;
  4.     chomp $numero;                  # le quitamos el carácter de fin de línea
  5.     push @numeros, $numero;
  6.     $contador++;
  7. }
  8.  
  9. print "Numeros introducidos: @numeros\n";
Coloreado en 0.002 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-03-28 15:29 @687

Eso es lo que tengo a excepción del chomp, pero bueno este no es fundamental para el desarrollo del programa. Con esto solo introduzco el último número del STDIN en el array, no todos los números introducidos anteriormente, no sé si me explico.
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-03-28 15:48 @700

Fíjate bien, no es lo mismo... Tienes otra instrucción que te sobra :D
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-03-29 07:34 @357

Cierto xD ¡Cómo puedo ser tan ciego, ja,ja!

Según me has ido diciendo las cosas me he dicho ¿cómo no he podido hacerlo sin ayuda? ¡ja,ja!

Hasta aquí lo fácil, ahora viene lo difícil :S

He estado investigando cómo ordenar sin sort() y he encontrado la ordenación por burbuja, pero la verdad que no me entero de nada. Lo poco que he entendido es que hay que ir comparando los números uno a uno y como introduzca 50 va a ser larguísimo. Aquí sí que no tengo ni idea. ¿Me podríais explicar en lenguaje para tontos cómo hacerlo?
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-03-29 09:47 @449

En la página de la Wikipedia sobre Ordenamiento de burbuja está muy bien explicado.

Resumen: hay que comparar todos los elementos consigo mismos. Y si cada par de elementos que comparamos están desordenados, los intercambiamos.

No necesitas hacer 50 comparaciones. Como verás en esa página, se trata de meter una sola comparación dentro de un bucle doble.
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 9 invitados