Resumen: Entrega nº61 del curso Bases de la programación Nivel II.
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:

 

Anagrama aprenderaprogramar.com

 

 

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:

pseudocodigo ordenar numeros

 

 

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.

diagrama de flujo a partir de pseudocodigo

 

 

 

 

 

 

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.

Descargar archivo: