Make your own free website on Tripod.com

ESTRUCTURAS REPETITIVAS

LA ITERACION WHILE
El WHILE es una de las tres iteraciones posibles en C . Su sintaxis podría expresarse de la siguiente forma :

 while(expresion)           ó           while(expresión) {
   proposición 1 ;                      proposición 1 ;
                                        proposición 2 ;
                                        ...............
                                        proposición n ;
                                        }

Esta sintaxis expresada en palabras significaria: mientras (expresión) dé un resultado CIERTO ejecútese la proposición 1 , en el caso de la izquierda ó ejecútese el bloque de sentencias , en el caso de la derecha.
Por lo general , dentro de la proposición ó del bloque de ellas , se modifican términos de la expresión condicional , para controlar la duración de la iteración .

LA ITERACION DO - WHILE
Su sintaxis será :

do {
 proposición 1 ;
 proposición 2 ;
 ...............
} while (expresión) ;

Expresado en palabras , esto significa : ejecute las proposiciones , luego repita la ejecución mientras la expresión dé un resultado CIERTO . La diferencia fundamental entre esta iteración y la anterior es que el DO-WHILE se ejecuta siempre AL MENOS una vez , sea cual sea el resultado de expresión.

ITERACION FOR
El FOR es simplemente una manera abreviada de expresar un WHILE , veamos su sintaxis :

for ( expresión1 ; expresión2 ; expresion3 ) {
        proposición1 ;
        proposición2 ;
        ..............
}
Esto es equivalente a :
expresión1 ;
while ( expresión2 ) {
        proposición1 ;
        proposición2 ;
        ..............
        expresion3   ;
}

Ejemplo de un programa for

#include<stdio.h>
#include<math.h>

/* Programa para tabular la funcion y = Sen(x) */

main()
{
float a=0;
float b=1.6;
float c=0.1;
float x,y;
for(x=a; x<=b; x=x+c)
{
y=sin(x);
printf("%f %f",x,y);
}
printf(" Presiona una tecla "); getch(); 
}

otro ejemplo:
#include<stdio.h>
#include<math.h>

/* Programa para tabular la función y = sen(x) */

main()
{
float x,y;
for(x=0.0; x<=1.6; x=x+0.1)
{
y=sin(x);
printf(" x = %f y = %f",x,y);
}
printf("Presiona una tecla"); getch();
}

La expresión1 es una asignación de una ó más variables , (equivale a una inicialización de las mismas ) , la expresión2 es una relación de algun tipo que , mientras dé un valor CIERTO , permite la iteración de la ejecución y expresión3 es otra asignación , que comunmente varía alguna de las variables contenida en expresión2 .
Todas estas expresiones , contenidas en el paréntesis del FOR deben estar separadas por PUNTO Y COMA y NO por comas simples .
No es imprescindible que existan TODAS las expresiones dentro del paréntesis del FOR , pudiendose dejar en blanco algunas de ellas , por ejemplo :

for ( ; exp2 ; exp3)             ó
for (exp1 ; ; )                  ó
for ( ; ; )

Estas dos últimas expresiónes son interesantes desde el punto de vista de su falta de término relacional , lo que implica que el programador deberá haber previsto alguna manera alternativa de salir del lazo ( probablemente mediante BREAK ó RETURN como veremos más adelante ) ya que sinó , la ejecución del mismo es infinita ( ó tan larga como se mantenga encendida la computadora ) .

LA SENTENCIA BREAK
El BREAK , ya brevemente descripto con el SWITCH , sirve también para terminar loops producidos por WHILE , DO-WHILE y FOR antes que se cumpla la condición normal de terminación . En el EJEMPLO siguiente vemos su uso para terminar un WHILE indeterminado.


#include <stdio.h>
#include <conio.h>
main()
{
  char c ;
  printf("ESTE ES UN LOOP INDEFINIDO ") ;
  while(1)  {
   printf( "DENTRO DEL LOOP INDEFINIDO (apriete una tecla):" ) ;
   if( (c = getch()) == 'Q' )
    break ;
   printf( "\nNO FUE LA TECLA CORRECTA PARA ABANDONAR EL LOOP ") ;
  }
   printf("\nTECLA CORRECTA : FIN DEL WHILE ") ;
}

Obsérvese que la expresión while(1) SIEMPRE es cierta , por lo que el programa correrá imparable hasta que el operador oprima la tecla "secreta" Q . Esto se consigue en el IF , ya que cuando c es igual al ASCII Q se ejecuta la instrucción BREAK ,dando por finalizado el WHILE .
El mismo criterio podría aplicarse con el DO-WHILE ó con FOR , por ejemplo haciendo

 for (;;)  {     /* loop indefinido */
 ............
  if( expresión )
   break ;       /* ruptura del loop cuando expresión sea verdadera */
 }

LA SENTENCIA CONTINUE
La sentencia CONTINUE es similar al BREAK con la diferencia que en vez de terminar violentamente un loop , termina con la realización de una iteración particular y permitiendo al programa continuar con la siguiente.

LA FUNCION EXIT()
La función EXIT() tiene una operatoria mucho más drastica que las anteriores , en vez de saltear una iteración ó abandonar un lazo de programa , esta abandona directamente al programa mismo dándolo por terminado . Realiza también una serie de operaciones útiles como ser , el cerrado de cualquier archivo que el programa hubiera abierto , el vaciado de los buffers de salida , etc.
Normalmente se la utiliza para abortar los programas en caso de que se esté por cometer un error fatal é inevitable . Mediante el valor que se le ponga en su argumento se le puede informar a quien haya llamado al programa ( Sistema Operativo , archivo .bat , u otro programa ) el tipo de error que se cometió.

SENTENCIA GOTO
Si Ud. se ha admirado de que C tenga la operación GOTO , recuerde que el hecho de existir NO lo obliga a usarla , en el mismo sentido que por tener puertas los aviones no está obligado a saltar por ellas en pleno vuelo.
El uso del GOTO implica un salto incondicional de un lugar a otro del programa . Esta práctica hace que los programas sean muy dificiles de corregir ó mantener.
Si no quedara más remedio que usarlo, (y en programación estructurada SIEMPRE hay remedio) debe marcarse el destino del salto mediante un nombre seguido por dos puntos .

if( c == 0 )  goto OTRO_LADO ;
.............................
OTRO_LADO:
 printf(........

En este caso si c es cero se saltean todas las sentencias entre el if y el destino , continuandose con la ejecución del printf() . El destino puede ser tanto posterior como anterior al GOTO invocante .

LEA LA PAGINA DE EJERCICIOS RESUELTOS Y PROPUESTOS

Pagina Anterior Anterior        home       SiguienteSiguiente Página