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