Autor Tema: bucle en c  (Leído 4919 veces)

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

Desconectado 13pic

  • PIC10
  • *
  • Mensajes: 26
bucle en c
« en: 14 de Febrero de 2009, 09:43:31 »
buenas, soy nuevo en c y quisiera saber cual es la palabra para hacer un bucle, como goto en ensamblador.
muchas gracias :-/

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: bucle en c
« Respuesta #1 en: 14 de Febrero de 2009, 09:49:36 »
No te confundas.
GOTO es un salto, no un bucle.

En C puedes hacer bucles condicionales con For-Next, con While y Do-While.
Tambien se puede generar un bucle con If-Then, pero no es la aplicacion ideal.

Bienvenido al foro!!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: bucle en c
« Respuesta #2 en: 14 de Febrero de 2009, 09:50:50 »
La forma mas común es con:

while(Condición)
  {
  Instrucciones del bucle
  }

En "C" no están permitidos los saltos tipo "goto" aunque algunos compiladores si lo implementan.

Un saludo
« Última modificación: 14 de Febrero de 2009, 09:53:03 por jfh900 »
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: bucle en c
« Respuesta #3 en: 14 de Febrero de 2009, 09:51:08 »
Código: CSS
  1. int8 i;
  2.  
  3. for(i=valor_inicial; i<valor_final;i++){
  4.  
  5.    // Aqui lo que desees iterar
  6.  
  7. }
  8.  
  9. // Por ejemplo
  10. for(i=0; i<5;i++){
  11.  
  12.    // Aqui tendrás sucesivamente 5 iteraciones
  13.    // con la variable i cambiando de 0 .. 1 .. 2 ... 3 ... y 4
  14. }

Un saludo.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: bucle en c
« Respuesta #4 en: 14 de Febrero de 2009, 13:16:34 »
Ya q sacaron el tema... no se por q existe el for en C. Se puede lograr exactamente el mismo comportamiento con un while. (en otros lenguajes esta justificado porq los for tienen otro comportamiento)
Código: [Seleccionar]
for(i=0;i<x;i++)
{
  //codigo
}
Es lo mismo que
Código: [Seleccionar]
i=0;
while(i<x)
{
  //codigo
  i++
}

Salvo que el for utilice instrucciones especiales de maquina q lo hacen mas eficiente, no veo motivo para q exista. Eso si, es mas comodo q su equivalencia con el while jeje
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: bucle en c
« Respuesta #5 en: 14 de Febrero de 2009, 13:59:48 »
Hay veces que se necesita modificar el valor de i dependiendo de los resultados obtenidos en una iteración y hay ocasiones en que i siempre es modificado.

Cuando i siempre es modificado, se usa un for. Cuando i a veces es modificado, se usa un while.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: bucle en c
« Respuesta #6 en: 14 de Febrero de 2009, 14:29:42 »
No exactamente, migsantiago.

Estoy leyendo la biblia del lenguaje C y viene a decir que el uso del for o del while es cuestión de gustos.

Se puede tener un for en el que la i sea modificada sólo a veces, y un while en el que lo sea siempre.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: bucle en c
« Respuesta #7 en: 14 de Febrero de 2009, 14:38:29 »
No exactamente, migsantiago.

Estoy leyendo la biblia del lenguaje C y viene a decir que el uso del for o del while es cuestión de gustos.

Se puede tener un for en el que la i sea modificada sólo a veces, y un while en el que lo sea siempre.

¿Y cómo sería ese for?

Talvez así...

Código: [Seleccionar]
for(i=0;i<5;i++)
{
if(estado==0)
   i--;
}

Pero seguramente existen diferencias entre un while y un for al momento de ser compilados, uno debe generar menos código ensamblador que el otro. Me refiero a que un for es más eficiente que un while bajo ciertas condiciones y viceversa.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: bucle en c
« Respuesta #8 en: 14 de Febrero de 2009, 14:40:08 »
en un for también se puede usar

CONTINUE;

BREAK;

para saltar un valor de i, o para terminarlo antes de terminar la cuenta de i, nunca hice la prueba en CCS, pero supongo que si funcionará porque el break si "rompe"
.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: bucle en c
« Respuesta #9 en: 14 de Febrero de 2009, 17:52:30 »
Yo creo q es una cuestion de gustos como dice Nocturno. Quizas el for existe para que aquellos q vienen de otros lenguajes no lo extrañen, q se yo.
En la facu nos negamos a usar el for (pese a un bug del compilador borland, le agarramos odio jeje [de todos modos ahora usamos gcc :wink:]), y tambien conozco gente q lo usa de forma extraña. Por ej en lugar de hacer un while(1), ponen for( ; ; ) :shock:. La verdad q me parece muy poco estetico, pero sobre gustos no hay nada escrito.

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: bucle en c
« Respuesta #10 en: 14 de Febrero de 2009, 18:04:38 »
Es cuestión de gustos ... y de claridad. La declaración de un for() múltiple con inicialización de media docena de variables, cinco comprobaciones de fin del bucle y una docena de incrementos o decrementos sólo es "visible" a primera vista en un for()

No es raro que yo utilice un código de este tipo:
Código: C#
  1. for(i=0,j=100,K=-1;i<MAXLEN,j>0,K!=0;i++,--j){
  2.     // y tal y tal
  3.   }

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: bucle en c
« Respuesta #11 en: 14 de Febrero de 2009, 18:11:00 »
La verdad que si, queda mucho mas prolijo asi. Por cierto, las condiciones se tienen q dar simultaneamente para q el bucle termine? o con que se de una ya esta? (en otras palabras, las comas hacen de && o de ||?)

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: bucle en c
« Respuesta #12 en: 14 de Febrero de 2009, 18:13:02 »
No gera, cualquiera de ellas hace que termine el bucle, es como si estuviesen unidas por ||.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado mariano_pic

  • PIC18
  • ****
  • Mensajes: 499
    • Software Electronica Microncontroladores
Re: bucle en c
« Respuesta #13 en: 14 de Febrero de 2009, 18:19:43 »
buenas, soy nuevo en c y quisiera saber cual es la palabra para hacer un bucle, como goto en ensamblador.
muchas gracias :-/

     Hola amigo, lo que necesitas es un bucle en c, que se paresca a un goto cerrado en ensamblador

    ejemplo:
    asm:

    Rutina_prinsipal:
    ..
    ..
    ..
    goto    Rutina_prinsipal


   Cuando se hace un programa en asm tenemos que tener este bucle para mantener nuestro codigo actuando constantemente
   en c podemos hacer lo siguiente:


   while(1){
   ...
   ...//comandos c
    }

    Si quieres implementar un contador:

    en asm:


    movlw  .5
    movwf  reg1
 bucle:
    decfsz   reg1,f
    goto      bucle
    ...
    ...

    puedes utilizar un bucle controlado por contador tipo for

    int8 reg1
    for(reg1=0;reg1<5;reg1++){

    }
    
    si quieres pudes usar el while como contador:

   reg1=0;
   while(reg1<5){
     reg1++;
    }

    y bueno espero te sea util.

Desconectado 13pic

  • PIC10
  • *
  • Mensajes: 26
Re: bucle en c
« Respuesta #14 en: 16 de Febrero de 2009, 18:28:40 »
muchisimas gracias a todos, y gracias por las explicaciones detalladas :D