Que diferencia hay en utilizar bucle for o while en lenguaje C.

Iniciado por NOB2014, 19 Mayo 2016, 19:22 PM

0 Miembros y 1 Visitante están viendo este tema.

NOB2014

Hola a todos.
Bueno esa es mi intriga, estoy haciendo un programa para practicar y note que tiene más de 10 bucles y sin pensar demasiado los hice todos con while, quisiera saber si esto de utilizar uno u otro pude afectar la memoria como a la velocidad del programa. -

Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

engel lex

#1
para nada, una vez compilador while y for terminan siendo indiferentes

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

HardForo

#2
- Con while() puede que no necesites una variable de lazo auxiliar  (i,j, etc)

- A nivel de codigo maquina podria haber diferencias minimas pero tampoco de muchas instrucciones (mas bien algun reorden)

- Velocidad: no debe haber diferencia significativa excepto que:


   a) A nivel de maquina haya alguna instruccion de mas (en while vs for)  +

   b) Hagas millones de iteraciones +

   c) El codigo a ser iterado es muy simple y entonces en comparacion (a) podria hacerse mas signifcativo.
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

engel lex

Cita de: HardForo en 19 Mayo 2016, 19:29 PM
- Con while() puede que no necesites una variable de lazo auxiliar  (i,j, etc)

con for tampoco

incluso perfectamente puedes hacer

Código (cpp) [Seleccionar]
while(i != false){
 //algo
}
//o
for(;i != false;){
 //algo
}


ambos ciclos son identicos en funcionamiento

Cita de: HardForo en 19 Mayo 2016, 19:29 PM
- A nivel de codigo maquina podria haber diferencias minimas pero tampoco de muchas instrucciones (mas bien algun reorden)

con lo eficiente de la compilación actual los códigos podrían ser identicos (la compilación actual es "inteligente" y compila en el orden más optimo, no en relación plana a las instrucciones)


Cita de: HardForo en 19 Mayo 2016, 19:29 PM
- Velocidad: no debe haber diferencia significativa porque aporta poco en instrucciones (a nivel maquina) respecto de lo que se supone haces en el bucle (excepto sea tambien muy simple y tengas que hacerlo millones de veces)

a) A nivel de maquina alguna instruccion de mas (en while vs for)  +

    b) Hagas millones de iteraciones +

    c) El codigo a ser iterado es muy simple y entonces en comparacion (a) podria hacerse mas signifcativo.
lo mismo que arriba... probablemente nada de esto termine haciendo diferencias
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

HardForo

#4
Hay casos donde es irreducible la necesidad de variable de lazo sin embargo @alex @"engel lex" creo tienes razon pero habria que desensamblar para estar seguros y de todas formas existen muchos compiladores como para asegurar.

Creí que Lex venia por Alex  por Alexander y a su vez por Alejandro  :xD

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

NOB2014

Hola.
Gracias a ambos por ocuparse, como lamentablemente todavía desconozco cómo desensamblar
un programa me quedo con que es indiferente utilizar uno u otro. -

Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Orubatosu

Si te lo piensas bien, hay una diferencia fundamental entre ambos, que "supongo" puedes ver a simple vista.

Donde se hace la comprobación de la condición del bucle, antes o después de ejecutar el bloque
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

engel lex

Cita de: Orubatosu en 20 Mayo 2016, 09:38 AM
Si te lo piensas bien, hay una diferencia fundamental entre ambos, que "supongo" puedes ver a simple vista.

Donde se hace la comprobación de la condición del bucle, antes o después de ejecutar el bloque

no, no está do while, :P así que si son identicos, ambos comprueban en la entrada
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

NOB2014

Hola.
Ufff, lo de Orubatosu me había desconcertado, si la condición es falsa el bucle no se ejecuta nunca tanto en for como en while por qué la misma se verifica al comienzo, en cambio, con do while aunque sea falsa la primera vez se lee lo que está dentro del bloque porqué la condición se encuentra al final, espero estar en lo cierto.-     

Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-