martes, 12 de julio de 2011

Extra: Ciclos

¿Cómo se logra que algo se repita?
Por medio de un ciclo o bucle que funciona de la siguiente manera: Evalúa una condición de resultar cierta, realiza una acción o bloque de acciones, luego vuelve a evaluar la condición y si nuevamente resulta cierta, realiza la (s) acción (es). Cuando la condición de cómo resultado falso, se sale del ciclo y continúa con la ejecución normal del programa.

¿Hasta cuándo va a repetirse?
Hasta que la condición asignada a dicho bucle deje de cumplirse, siempre y cuando dicha condición sea verdadera..


¿Qué opciones hay para crear repeticiones?

 Existen 3 estructuras repetitivas: While, For y Do .. While
  •  Estructura While

Sintaxis:

while (condición)
        Acción;  //Se ejecuta mientras condición se evalua verdadera (distinta de 0)

En el caso de que el cuerpo del while (acciones a ejecutar en caso de que el condicional se verifique) posea más de una sentencia, todas ellas son encerradas entre llaves:

while (condición)
{
Acción1;
Acción2;
...
}

El condicional es una expresion relacional que puede involucrar operadores relacionales (>, <, >=, <=, ==, !=) y/o operadores logicos (&&, ||, !)

Ejemplo:



/*Programa que imprime la tabla de conversión de
Fahrenheit a Celsius para F = 0, 20, 40,..., 300 */

#include  

 int main(int argc, char** args){

 int Lower, Upper, Step;
 float Fahr, Celsius;

  Lower = 0;     /* límite superior de la tabla de temperaturas*/
  Upper = 300;   /*límite superior*/
  Step = 20;     /* tamaño del incremento*/
  
  Fahr = Lower;
   
  while(Fahr <= Upper){

     Celsius = (5.0/9.0) * (Fahr - 32.0);

     printf("%4.0f F -> %6.1f C\n", Fahr, Celsius);

     Fahr = Fahr + Step;

     } 
return 0;
} 


Nota: Lo que se encuentra entre parentesis es una expresión a evaluar. Mientras el resultado de la misma sea distinto de cero, se ejecutan las sentencias asociadas que se encuentran encerradas entre llaves. A este tipo de sentencias se las llama sentencias compuestas. Si el cuerpo de esta sentencia consiste en una sola sentencia simple, pueden omitirse las llaves. Las sentencias compuestas no llevan el caracter ; como terminador. Para mejorar la legibilidad del programa, conviene indentar las sentencias compuestas.

  • Estructura For

Esta estructura es una generalización de la estructura while. Su función es ejecutar iterativamente el cuerpo del bloque, que como en el caso del while puede ser simple o compuesto. La definición de esta estructura de control posee 3 partes separadas por el caracter ";".

for(inicialización; condición ; reinicialización) 
{ ... ...}

La inicialización puede poseer una sentencia, ninguna, o varias separadas por el caracter ",". Esta parte se ejecuta inmediatamente antes de entrar en el ciclo.

El criterio o condición de control de la iteración. Se evalúa antes de entrar a cada ciclo, inclusive en la primer iteración. Si su resultado es distinto de cero se ejecuta el ciclo; sino se abandona el ciclo y se sigue con la sentencia posterior al cuerpo del for.

La reinicialización, que es ejecutada al final de cada ciclo.


Podemos simular el bloque for con la siguiente lógica:
 
a;
while(b){... ...  c;}




/* Tabla de conversión de grados F a Celsius
utilizando constantes simbolicas y bloque for */

#include 


#define LOWER 0
#define UPPER 300
#define STEP 20

int main(int argc, char** args){

  int Fahr;

    for(Fahr = LOWER; Fahr <= UPPER; Fahr += STEP)

     printf("%4.0f F -> %6.1f C\n", Fahr, (5.0/9.0)*

             (Fahr - 32))
}


Nota:
Uso de constrantes simbolicas. Cuando se requieran valores numericos constantes en un programa, deben definirse como constantes y no usar sus valores numéricos dentro del programa. C permite definir constantes simbolicas (directiva #define al preprocesador) que asocian un simbolo (LOWER, UPPER, STEP) con una expresión (0,300 y 20 respectivamente) de tal manera que el preprocesador reemplaza cualquier ocurrencia de esos simbolos por sus expresiones asociadas.

  • Estructura Do-While


La estructura de control do-while es una variación sobre el bloque while
 
do{ Acción1; Acción2; ...}while(condición);

La diferencia esta en que la condición se chequea al final y las acciones son ejecutadas al menos una vez.

1 comentario:

  1. No pongas ñ en el código fuente. Faltan las referencias. Te pongo +3.

    ResponderEliminar