Autor Tema: salir de funciones y bucles  (Leído 1749 veces)

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

Desconectado juansi

  • PIC16
  • ***
  • Mensajes: 102
salir de funciones y bucles
« en: 06 de Mayo de 2009, 17:42:30 »
hola amigos, tengo un problema con un programa q me va a volver loco, mi problema es:

¿como puedo salir de un bucle infinito q esta dentro de una funcion "x" para volver a la funcion main?
 ¿y como puedo volver a una funcion anterior a la funcion x?

gracias de ante mano
Las mujeres quieren "SOLUCIONES", y los hombres lo mismo pero escrito al reves.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: salir de funciones y bucles
« Respuesta #1 en: 06 de Mayo de 2009, 17:44:38 »
poniendo una condición mas en el bucle, la cual cambias desde dentro de él y asi sales
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: salir de funciones y bucles
« Respuesta #2 en: 06 de Mayo de 2009, 17:50:49 »
Para salir inmediatamente de un bucle, como un while() o un for() utiliza "break". Para salir de una subrutina utiliza "return". Si la subrutina devuelve un valor, deberías realizar el "return" con el valor adecuado.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: salir de funciones y bucles
« Respuesta #3 en: 14 de Mayo de 2009, 17:53:58 »
BIFURCACIONES DE CONTROL BREAK
Esta instrucción nos permite salir de cualquier bucle ya sea WHILE , DO WHILE, FOR. Cuando el programa encuentra a esat instrucción simplemente salta a la siguiente instruccion fuera del bucle donde se hallaba contenido.

Ejm:
   for(a=0;a<=200;a++)
   {
      Delay1KTCYx(200);
      if (PORTA==0X05)
         break;
      LATB=~LATB;
   }

En esta situación, tenemos un bucle FOR que contara hasta 200 con la variable " a " para satisfacer la expresión del bucle, sin embargo existe un break el cual depende de la estructura condicional IF que inidica si PORTA is igual a 5 entonces ejecuta break, de lo contrario finaliza el IF y continua con el bucle. Cuando PORTA sea igual a 5 el programa se topara con el BREAK y como consecuencia terminara con el bucle FOR y continuará con la siguiente instrucción fuera del bucle.


BIFURCACIONES DE CONTROL CONTINUE
Digamos que dentro de nuestro bucle existe una instrucción al final del bloque de codigo que queremos saltarla o no ejecutarla dependiendo de alguna condición extra, la instruccion CONTINUE permite saltar todas las instrucciones posteriores a su aparición dentro del bloque de codigo escrito en el bucle.

Ejm:
   for(b=0;b<=200;b++)
   {
      Delay1KTCYx(200);
      if (PORTA==0X0A)
         continue;
      LATC=~LATC;
   }

En este caso, el bucle FOR contara hasta 200 con la variable " b " y ejecutará la ultima instruccion LATC=~LATC dependiendo del estado del PORTA, siempre y cuando sea igual a 0X0A, de esta manera se utiliza el CONTINUE.

mas informacion aqui
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado LalitoX

  • PIC10
  • *
  • Mensajes: 13
Re: salir de funciones y bucles
« Respuesta #4 en: 15 de Mayo de 2009, 09:51:30 »
Igual no esta de mas decir que entre los programadores usar break es considerado "trampa" generalmente, siempre se puede modificar la condición o hacer lo que dice qiqe y evitar el uso de break.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: salir de funciones y bucles
« Respuesta #5 en: 15 de Mayo de 2009, 10:03:12 »
Un ejemplo de lo que dice QUIQE:

Estos dos bucles son similares. Cuando PORTA vale 0x05 el bucle termina.   :mrgreen:

Código: C#
  1. for(a=0;a<=200;a++)
  2.         {
  3.            Delay1KTCYx(200);
  4.            if (PORTA==0X05)
  5.               break;
  6.            LATB=~LATB;
  7.         }

y

Código: C#
  1. for(a=0;a<=200,PORTA!=0X05;a++)
  2.         {
  3.            Delay1KTCYx(200);
  4.            LATB=~LATB;
  5.         }


Cuando ponemos dos o mas condiciones de salida, separados por comas, en el bucle éste termina cuando cualquiera de dichas condiciones deja de cumplirse.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania