Codificación aprenderaprogramar.com: CU00262A
VARIANTE PARA ORDENAR UNA SERIE DE NÚMEROS. EJERCICIO.
Crear un programa que ordene una serie de números conforme a este planteamiento:
1. Objetivo: “Ordenar una serie de números de mayor a menor”.
2. Condicionantes: Cantidad de números a ordenar indeterminada. Necesario conservar la serie inicial de números.
3. Datos de partida: Una serie de n números.
4. Método: Se basará en la siguiente idea. Se buscará el número más grande de la lista que pasará a una nueva lista. Con los elementos restantes repetimos el proceso para obtener el segundo número de la lista nueva. El proceso se repite hasta que no quedan números por extraer.
5. Resultados a obtener: Lista ordenada del tipo orden(1) = ..., orden(2) = ..., orden(3) = ..., ..., orden(n) = ...
Planteamiento esquemático a emplear para el procedimiento de resolución:
Comentarios: Indicador funciona como previsto eliminar, mientras que marcaeliminado indica si un valor ha sido extraído, con lo cual no se tiene en cuenta.
Se supondrá que los datos se leen desde un archivo que contiene n valores dados como dato(1), dato(2), ..., dato(n).
La cantidad de números de la serie, n, también consideraremos que se encuentra en el archivo.
SOLUCIÓN
Como si estuviéramos trabajando delante del ordenador, podemos construir este programa aprovechando módulos del anterior. En concreto vamos a conservar “tal cual” el algoritmo principal y el módulo Extraer del ejercicio anterior (PROGRAMA ORDEN01). La única salvedad es que en la línea 2.4 llamaremos al módulo Ordenar2.
PROGRAMA ORDEN02 [Pseudocódigo aprenderaprogramar.com]
Variables Enteras: E, n Reales: dato()
1. Inicio 2. Mientras E <> 3 Hacer 2.1 Mostrar “1. Ver datos desordenados. 2. Ordenar. 3. Salir.” 2.2 Pedir E 2.3 Si E = 1 Entonces Llamar Extraer FinSi 2.4 Si E = 2 Entonces Si n <> 0 Entonces Llamar Ordenar2(dato) SiNo Mostrar “No hay datos que ordenar” FinSi FinSi Repetir 3. Fin
Módulo Extraer Variables Enteras: i 1. Leer n 2. Redimensionar dato(n) 3. Desde i = 1 hasta n Hacer Leer dato(i) Mostrar “dato(”, i, “)=”, dato(i) Siguiente i FinMódulo
Módulo Ordenar2(v(): Reales) Variables Enteras: indicador, k, m Reales: o() Booleanas: marcaeliminado() 1. Redimensionar o(n) : Redimensionar marcaeliminado(n) 2. Desde k = 1 hasta n Hacer 2.1 Desde m = 1 hasta n Hacer Si marcaeliminado(m) = Falso y v(m) > o(k) Entonces o(k) = v(m) indicador = m FinSi Siguiente m 2.2 marcaeliminado(indicador) = Verdadero Siguiente k 3. Mostrar “Valores ordenados” 4. Desde k = 1 hasta n Hacer Mostrar o(k) Siguiente FinMódulo |
No vamos a repetir aquí los diagramas de flujo del algoritmo principal y del módulo Extraer. Se pueden consultar en el ejercicio anterior. Veremos tan solo el diagrama de flujo del nuevo módulo Ordenar2.
Comentarios: El razonamiento para crear el algoritmo no lo vamos a exponer. Puedes encontrarlo en el Curso Bases de la programación nivel I de aprenderaprogramar.com Únicamente le hemos dado forma a un razonamiento previo. Conviene prestar atención a valores iniciales de las variables y valores al entrar a módulos. Por ejemplo, todos los elementos de marcaeliminado contendrán Falso al comenzar el módulo Ordenar2 pues por ser una variable local se inicializa con el módulo. De hecho, ni siquiera podríamos usarla si no la redimensionáramos cada vez que arranca el módulo.
Una forma interesante de “jugar” con estos programas consiste en hacerlos funcionar con una generación de n valores aleatorios que se extraen de forma automática cuantas veces queramos. De esta manera obtendremos múltiples visualizaciones de series desordenadas y series ordenadas. Lo veremos más adelante.
Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link: Ver curso completo.
Para hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.