Translate

jueves, 18 de diciembre de 2008

Estructuras de Control

Las estructuras de control son usadas para modificar el flujo del programa o para realizar ciertas acciones en condición de los estados de las diversas variables o del estado de los puertos del PIC. Existen dos tipos de estructuras de control:  de iteración  de selección.

Las estructuras de iteración sirven para repetir el flujo del programa mediante una condición y las más usadas son while, for y do..while, mientras que las estructuras de selección sirven para elegir la dirección del flujo de programa o el estado de una variable dependiendo de otro valor, las mas usadas son  if, if..else, select case.

Estructura WHILE

La traducción literal es mientras,  asi que podemos tomarla tal cual, mientras la condición se cumpla has...  Y su sintaxis es:

   while(condicion)

    {

      // sentencias

    }

Como se ve mientras la condición  sea verdad se ejecutarán las sentencias dentro de un WHILE. Por ejemplo:

    x=0;

   while(x<5)

   { x++;}

Como veran en principio x=0 y entrará en el while ya que es menor que 5 y se incrementará 1 a 1, cuando x>=6 el while dejará de ejecutar la sentencia de incremento y seguirá con la  instrucción debajo del while. Podemos implementar un loop infinito con el while haciendo:

 while(1);  o

 while(1)

 {

  // sentencias

 }

Esta sentencia sirve para detener el flujo de un programa.

Estructura FOR

La estructura for sirve para repetir las sentencias durante un lapso determinado, o para efectuar operaciones sucesivas. Su sintaxis es:

    for(variable inicial; variable final; paso de variable)

     {

        // sentencias

     }

Los argumentos variable inicial, variable final y paso de variable  son los que determinan el lapso a cumplir, por ejemplo:

   i=0;

  x=0;

  for ( i=0; i<=9; i++)

   { x++;}

 Como se puede ver la variable i es la que condiciona la iteración, comienza de 0 y su límite es 9 y su paso se incrementará 1 paso, es decir de uno en uno. Así pues, cuando i=0 x=0, i=1 x=1... i=9 x=9, cuando  llegue a 9 el programa seguirá con la  instrucción debajo del for. También se pueden hacer loops infinitos con un for de la siguiente manera:

  for (;;)

   {

     //sentencias

   }

 Estructura do..while

Esta estructura también se puede interpretar como su traducción: has..mientras. Es parecida a un while solo que la condición se evalua al final y no al principio como lo hace el while por lo que la condición puede estar dentro de este ciclo, su sintaxis es:

  do

 {

   // sentencias

  }while(condición);

Y un ejemplo puede ser:

  do

 { x++;}while(x==25);

La variable x se incrementa de uno en uno hasta que sea  igual a 25, despues continuara el programa con la siguiente instruccion debajo del do...while.

Estructura if

La traducción es: . Y  también la podemos tomar, if  es una estructura selectiva y evalúa una expresión, sí el resultado es verdadero efectuará las instrucciones que esten dentro de él. Su sintaxis es:

   if(expresión)

    {

     //sentencias

    }

Si el resultado de la expresión es falso el flujo del programa continuará con las sentencias debajo del if. Un ejemplo:

    x=6;

   if(x>6)

   { k++;}

Como se ve x tiene un valor y el  if  evalua su estatus, como el resulatdo es verdadero k incrementara su valor una sola vez y el flujo de programa continuará.

Estructura if..else

Esta estructura es idéntica al if,  solo que le añadimos la palabra reservada else,  que se traduce como: si no.  Por lo que es útil cuando una expresión es evaluada y su resultado es falso, podemos hacer otra cosa, su sintaxis es:

    if (expresión)

   {

      //sentencias

    }

   else

   {

     // sentencias

   }

De esta manera podemos mostrar el siguiente ejemplo:

    x=0;

    if( x ==5)

     {k++;}

  else

    {k--;}

Como la evaluación de x es falsa, k decrementará en uno su valor y continuará con el flujo del programa.

Estructura switch

Sirve para hacer selecciones multiples de acuerdo al valor de una expresión y es el equivalente al switch de ansi C. Su sintaxis es:

 swicth (valor)

 {   

  case 1: //sentencias

        break;

  case 2: //sentencias

     break;

 ....

  case n: //sentencias

   break;

  default: //sentencias

   break;

  }

 Como verán dependiendo de valor se selecciona el caso por ejemplo:

  x=3;

   switch (x){

    case 1: k= 20*2;

     break;

   case 2: k=20/2;

    break;

  case 3: k=20+2;

    break;}

Como x es igual a 3 el case efectuará la operación k=20+2, el uso de default  es opcional.

Todos los operadores de comparación y los lógicos pueden ser usados dentro de las sentencias de comparación y dentro del while y do while, para poder efectuar flujos mejor controlados.

Bifurcaciones

Son usadas para: parar, continuar o saltar el flujo normal de un programa,  para C18 se usan break, continue, goto.

 Break. Interrumpe la secuencia de un ciclo do..while, while y un for. No se debe confundir con el uso en select case.

 Continue. Es usado para pasar a la siguiente repetición dada una condición.

 Goto. Salta a una etiqueta de programa. Una Etiqueta es un nombre o identificador al cual le siguen los dos puntos(:) por ejemplo: 

 YO:

  if(k=0)

{ goto el}

 ....

 el:

  // sentencias

Como todo manual de C dire contra mi voluntad: el uso de goto  no es una buena práctica, ni se recomienda hacerlo en un programa.

No hay comentarios:

Publicar un comentario