mx-psi / mp

Repositorio para las prácticas de Metodología de la Programación.
GNU General Public License v3.0
0 stars 0 forks source link

Sobreescribir o comprobar fin de cadena #12

Closed mx-psi closed 9 years ago

mx-psi commented 9 years ago

Decidir entre:

if (texto[byte] == '\0')
         fin_texto = true; 

y:

fin_texto = texto[byte] == '\0';
josemam commented 9 years ago

He generado dos programas que ejecutan un bucle de 10^9 iteraciones. El primero asigna a un bool si el bucle está en la última iteración, y el segundo comprueba si está en la última iteración y en tal caso se lo asigna.

Usando time con ambos programas he llegado a la conclusión de que es más rápido comprobar el fin de cadena que sobreescribir. Los tiempos en segundos en tres ejecuciones del programa que sobreescribe han sido 3.148 3.058 3.141, y el programa que comprueba ha tenido por tiempos 2.972 3.011 3.019

Por otro lado, la sobreescritura, aunque es más compacta, es más oscura. Por ambas razones, escogeremos la comprobación en lugar de la sobreescritura. Dado que en este momento el programa involucrado está hecho con comprobación en los dos sitios en los que se opera hasta fin de cadena, se quedan como están.

He pensado también en ahorrarme la variable fin_texto comprobando directamente texto[byte] == '\0' o texto[byte-1] == '\0', según el caso. Acortaría el código y ahorraría una variable, pero, además de ser una solución también oscura, requeriría comprobar una componente inexistente en la primera iteración (o hacer alguna virguería en el código para evitar eso). Por ello, esta opción también ha sido descartada.

mx-psi commented 9 years ago

Probablemente sea por esto