Verificación y eficiencia de algoritmos. Ejercicio ejemplo con pseudocódigo y diagramas de flujo. (CU00240A)

Resumen: Entrega nº39 del curso Bases de la programación Nivel II.
Codificación aprenderaprogramar.com: CU00240A

 

 

EJERCICIO

Se nos plantea el siguiente problema: un fabricante de maquinaria envía un archivo a un almacén donde se encuentran los números de serie (5 dígitos) de una partida de maquinaria enviada, organizados en Dato(1), Dato(2), ..., Dato(n). Informa de lo siguiente: el archivo empieza con palas cargadoras siendo la correspondiente al número de serie 78345 la última, sigue con retroexcavadoras siendo el número de serie 33287 el último, y termina con dumpers siendo el número de serie 63287 el último.

Anagrama aprenderaprogramar.com

 

 

Se quiere desarrollar un programa que muestre el tipo de máquina y todos los números de serie correspondientes.

Lo hemos resuelto con el pseudocódigo expuesto a continuación. Se pide, en primer lugar, desarrollar el diagrama de flujo correspondiente a este pseudocódigo.

1. Inicio [Pseudocódigo aprenderaprogramar.com]

2. i = 1

3. Leer Dato(i)

4. Mostrar “Número de serie de palas cargadoras”

5. Mientras Dato(i) <> 78345 Hacer

Mostrar Dato(i)

i = i + 1

Leer Dato(i)

Repetir

6. Mostrar Dato(i) : i = i + 1 : Leer Dato(i)

7. Mostrar “Números de serie de retroexcavadoras”

8. Mientras Dato(i) <> 33287 Hacer

Mostrar Dato(i)

i = i + 1

Leer Dato(i)

Repetir

9. Mostrar Dato(i) : i = i + 1 : Leer Dato(i)

10. Mostrar “Número de serie de dumpers”

11. Mientras Dato(i) <> 63287 Hacer

Mostrar Dato(i)

i = i + 1

Leer Dato(i)

Repetir

12. Mostrar Dato(i)

13. Mostrar “Finalizada la extracción el total de máquinas es”, i

14. Fin

 

 

Ahora vamos a mostrar un plateamiento alternativo para resolver el mismo problema, que se plasma en el siguiente pseudocódigo:

1. Inicio [Pseudocódigo aprenderaprogramar.com]

2. i = 1

3. Leer Dato(i)

4. Mostrar “Números de serie de palas cargadoras”

5. Mientras Dato(i) <> 63287 Hacer

Mostrar Dato(i)

Si Dato(i) = 78345 Entonces

Mostrar “Números de serie de retroexcavadoras”

FinSi

Si Dato(i) = 33287 Entonces

Mostrar “Números de serie de dumpers”

FinSi

i = i + 1

Leer Dato(i)

Repetir

6. Mostrar Dato(i)

7. Mostrar “Finalizada la extracción el total de máquinas es”, i

8. Fin

 

 

Realizar la verificación mental de ambos pseudocódigos. ¿Hacen los dos lo mismo? ¿Son los dos igual de eficientes?

 

 

SOLUCIÓN

Diagrama de flujo:

diagrama de flujo bucles

 

diagrama de flujo programa

 

 

Comentarios: Si realizamos la verificación mental de ambos algoritmos encontramos lo siguiente:

· Si el archivo no contuviera los números de serie esperados como señaleros en ambos casos se generaría un bucle infinito y finalmente un error al tratar de extraer datos que no existirían.

· Si el archivo contiene los tres señaleros en el orden esperado, a lo que llamaremos situación normal, ambos algoritmos hacen lo mismo.

· Si el archivo contiene los tres señaleros en distinto orden al esperado, el algoritmo que se planteó para el primer ejercicio dará lugar a la presentación de resultados incorrectos con salida normal del programa, mientras que el algoritmo que proponemos ahora dará lugar a un bucle infinito o a un error.

 

 

Podemos decir, con matices, que los dos programas hacen prácticamente lo mismo. Respecto a la eficiencia observamos:

· El algoritmo propuesto como primer ejercicio es un poco más compacto que el actual. Utiliza menos código.

· El algoritmo actual muestra repetición de estructuras y código similar a lo largo del programa.

· El algoritmo propuesto como primer ejercicio realiza dos evaluaciones para cada dato, acción que no realiza el actual.

 

Con todo lo expuesto, concluiríamos que el actual es relativamente más ineficiente, pero ambos podrían “arreglarse” para evitar que se pudieran producir bucles infinitos o mostrarse resultados erróneos. Ambos pueden ser válidos. El objeto de haber realizado esta comparación de diseños es:

· Darnos cuenta de que se nos pueden ocurrir distintos diseños que superan una verificación.

· Reflexionar en torno a que la eficiencia es importante pero no debe ser una obsesión: si tenemos un algoritmo que funciona, quizás nos interese aprovecharlo aunque sea un “poquito” ineficiente, sobre todo si el esfuerzo para una reconstrucción es elevado.

 

 

 

 

 

 

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.

¿Puedo yo aprender?

Seas o no del área informática, si quieres aprender a programar te ofrecemos una solución guiada y personalizada: realizar un curso tutorizado on-line. Con este tipo de curso, podrás aprender a programar de forma ágil y amena.

Acceder a detalles y precios de los cursos tutorizados on-line

Política sobre cookies

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, de acuerdo a tus hábitos de navegación.

Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra Política de Cookies.

En Facebook!

Ahora puedes seguirnos en Facebook. Noticias, novedades y mucho más ¡Te esperamos!

RANKING APR2+

Ranking de lenguajes y entornos de programación aprenderaprogramar.com
 

MARZO - ABRIL 2017

1. Java / J2EE
2. Entornos Oracle
3. JavaScript, jQuery
4. .NET, C#
5. Entornos SQL Server
6. HTML, CSS
7. Php, MySql
8. Android, iOS


Acceder a detalles sobre el ranking de programación aprenderaprogramar.com

FOROS APR2+

Pregunta, responde, consulta, lee, intercambia...

Participa!!! Entra en los foros aprenderaprogramar.com.

             Copyright 2006-2017 aprenderaprogramar.com                La web abierta a cualquier persona interesada en la programación