Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Caster en 21 Febrero 2012, 10:12 am



Título: [Solucionado] Modificar el incremento del bucle for
Publicado por: Caster en 21 Febrero 2012, 10:12 am
Hola a todos, me ha surgido esta duda. No es para aplicar a ningun prorama pero siento curiosidad igualmente.

Un bucle for simple:

Código
  1. for (x = 1; x <= y; x++) {
  2.  
  3. /*......./
  4.  
  5. }

Cada vez que se ejecuta, el valor de x aumenta en 1, pero, sería posible hacer esto para cambiar el valor del incremento:

Código
  1. for (x = 1; x <= y; x += 2) {
  2.  
  3. /*......./
  4.  
  5. }

O también así:

Código
  1. for (x = 1; x <= y; x = x + 2) {
  2.  
  3. /*......./
  4.  
  5. }


Título: Re: Modificar el incremento del bucle for
Publicado por: rir3760 en 21 Febrero 2012, 14:12 pm
Un bucle "for" tiene la estructura:
Código
  1. for (expr; expr; expr)
  2.   sentencia
A la ultima expresión se le conoce comúnmente como "incremento" porque es en ella donde se realiza el incremento del contador (la variable que controla la ejecución del bucle).

En otras palabras puedes colocar ahí cualquier expresión, por supuesto debes verificar que en algún momento la condición del bucle (segunda expresión) sea falsa para que este termine.

En C99 y C++ se puede sustituir la primera expresión por una declaración, por ejemplo:
Código
  1. for (int i = 0; i != 10; ++i)
  2.   cout << "i == " << i << endl;

Un saludo


Título: Re: Modificar el incremento del bucle for
Publicado por: Caster en 21 Febrero 2012, 15:08 pm
He entendido mal o tu te has explicado mal. Lo que quiero saber yo es si es posible que en vez de incrementar en 1 como pones tu en el ejmplo, que se puede incrementar en cualquier valor.


Título: Re: Modificar el incremento del bucle for
Publicado por: Xandrete en 21 Febrero 2012, 15:28 pm
He entendido mal o tu te has explicado mal. Lo que quiero saber yo es si es posible que en vez de incrementar en 1 como pones tu en el ejmplo, que se puede incrementar en cualquier valor.

Ni te ha entendido mal, ni te has explicado mal. Su respuesta es totalmente acertada.

for(expr;expr;expr) donde expr puede ser cualquier expresión. Una respuesta más específica: puedes incrementarlo sumándole dos unidades, multiplicarlo por dos, etc. O incluso puedes decrementarlo. O hacer su logarítmo, etc. ¡Lo que quieras!  ;)

Saludos


Título: Re: Modificar el incremento del bucle for
Publicado por: soyloqbuskas en 21 Febrero 2012, 15:29 pm
¡Buenas |Demon| !

Creo que no has entendido bien a rir3760.

Como bien te han dicho, un bucle for() tiene esta estructura
Código
  1. for (expr1; expr2; expr3)
  2.   sentencia

Donde....
    expr1 = asignacion del valor inicial (ej.: i=3)
    expr2 = comparacion (ej.: i<10 ó i*3<27, etc)
    expr3 = incremento de la variable (i++, o i=+2)

Toma un codigo de ejemplo:
Código
  1. #include<stdio.h>
  2.  
  3. int main(){
  4.    int i=0;
  5.    for(i=1;i*3<27;i+=2) printf("hola mundo\n");
  6.  
  7.    getchar();
  8.    return 0;    
  9. }
  10.  

Este tipo de dudas se solucionan probando. Te haces un programita como el que te he dejado e intentas probar tu idea, y si funciona bien y si no, es que no se puede hacer.

Un saludo.


Título: Re: Modificar el incremento del bucle for
Publicado por: anonimo12121 en 21 Febrero 2012, 15:44 pm
Creo que quieres hacer algo así no?

Código
  1. #include <iostream>
  2. using namespace std;
  3. int main(int argc,char *argv[]){
  4.    for(int x=1,i=0;i<100;i= i+x){
  5.        if(i==50)x=2;
  6.        cout << i << endl;
  7.    }
  8. };

si en vez 1 quieres que sea que vaya aumentando por ejemplo de 2 en 2.
Código
  1. #include <iostream>
  2. using namespace std;
  3. int main(int argc,char *argv[]){
  4.    for(int i=0;i<100;i=i+2){ // i=i+2 es igual a  i+=2
  5.        cout << i << endl;
  6.    }
  7. };


Título: Re: Modificar el incremento del bucle for
Publicado por: Caster en 21 Febrero 2012, 16:23 pm
Ok, ahora lo entiendo mucho mejor, gracias a todos por las aclaraciones.

@Dr.Hacker++: Era en C, pero no importa que lo he entendido igual.

Gracias a todos