ESTRUCTURAS DE CONTROL
               CONTROL:
BUCLES
Evaluación
 Escribir un programa que desglose cierta cantidad de
 segundos introducida por el teclado en su equivalente
 en semanas, días, horas, minutos, segundos
              ,   ,     ,        , g
 Escribir un programa lea la longitud de los lados y
 calcule la hipotenusa
 Escribir un programa que calcule el numero de días de
 un mes dados los valores numéricos del mes y año
    mes,
Contenido
1.   La sentencia While
2.   Repetición: el bucle For
3.   Precauciones en el uso del bucle For
4.   Repetición: el bucle Do-While
5.   Comparación de bucles While, For y do-While
6.   Diseño de bucles
7.   Bucles anidados
8.   Ejercicios
La sentencia While
 Un bucle while tiene una condición del bucle (una
 expresión lógica) que controla la secuencia de
 repetición.
 repetición La posición de esta condición del bucle
 es delante del cuerpo del bucle y significa que un
 bucle while es un bucle pretest de modo que
 cuando se ejecuta el mismo, se evalúa la condición
 antes de que se ejecute el cuerpo del bucle
Sintaxis
           Las sentencias del cuerpo del
           bucle se repiten mientras que
           la expresión lógica (condición
           del bucle) sea verdadera.
                       )
           Cuando        se   evalúa    la
           expresión lógica y resulta
           falsa, se termina y se sale del
           bucle y se ejecuta la siguiente
           sentencia       de   programa
           después de la sentencia while
Ejemplo
 /*bucle de muestra con while*/
 #include <stdio.h>
 #include <stdlib.h>
 int main ()
 {
     int contador=0;
     while(contador<5)
     {
                contador++;
                printf("contador: %dn",contador);
                }
                printf("Fin");
                system("PAUSE");
                return 0;
                }
Operadores de incremento y decremento
 C ofrece los operadores de incremento (++) y
 decremento (--) que soporta una sintaxis abreviada
 para añadir (incrementar) o restar (decrementar) 1 al
 valor de una variable
 K=i++; /*asigna el valor de 3 a k y 4 a i*/
 K ++i; / asigna
 K=++i; /*asigna el valor de 5 a K y 5 a i*/
                                           i /
 K=i--; /*asigna el valor de 5 a k y 4 a i*/
 K i; / asigna
 K=--i; /*asigna el valor de 3 a k y 3 a i*/
                                         i /
Bucles controlados por centinelas
 Un método para terminar
               p
 un bucle es introducir un
 único dato definido y
 especificado denominado
 valor centinela como ultimo
 dato. La condición del bucle
 comprueba cada dato y
 termina cuando se lee el
 valor centinela
Bucles controlados por indicadores
 Un bucle controlado por bandera-indicador se ejecuta
                       p                         j
 hasta que se produce un suceso anticipado y se cambia
 el valor del indicador
Las sentencia break en los bucles
 La sentencia break se utiliza, a veces, para realizar una
 terminación anormal del bucle. Dicho de otro modo, una
 terminación antes de lo previsto
Bucles While (true)
 La      condición   que     se
 comprueba en un b l while
           b        bucle hil
 puede ser cualquier expresión
 valida C. Mientras que la
 condición         permanezca
 verdadera (distinto de 0), el
 bucle       while   continuara
 ejecutándose.
 ejecutándose Se puede crear
 un bucle que nunca termine
 utilizando el valor 1 para la
 condición que se comprueba
            q         p
Ejemplo
 /*calculo de la media de 6 numeros*/      while (contadornum<totalnum)
 #include <stdio.h>
 #incl de <stdio h>                         {
 #include <stdlib.h>                              float numero;
 #include <string.h>                              scanf ("%f",&numero);
 int main ()                                      sumanum+=numero;   ;
 {                                                ++contadornum;
     const int totalnum=6;                        }
     int contadornum=0;                           media=sumanum/contadornum;
     float sumanum=0;                             printf("media:%.2fn",media);
     float media;                                 system("PAUSE");
     printf ("introduzca %d numeros:n",          return 0;
 totalnum);                                       }
Repetición el bucle For
 La sentencia for (bucle for) es un método ara ejecutar
                   (         )                  j
 un bloque de sentencias un numero fijo de veces. El
 bucle for se diferencia del bucle while en que las
 operaciones de control del bucle se sitúan en un solo
 sitio: la cabecera de la sentencia
 Sintaxis
 Si      i
   For( inicialización; condición iteración; incremento)
   Sentencias
   S t i
Ejemplo
 #include <stdio.h>               #include <stdio.h>
                                  #include <stdlib.h>
 #include <stdlib.h>
 #i l d < dlib h>                 int main ()

 int main ()                      {
                                      int i;
 {                                    /*imprimir hola 10 veces*/
     int i;
     i i                              for(i=0; i<10; i++)
                                      {
     /*imprimir hola 10 veces*/
                                      printf("hola!, ");
     for(i=0; i<10; i++)              printf("el valor de i es: %dn",i);

     printf("hola!n");
        i tf("h l ! ")               }
                                      system("PAUSE");
     system("PAUSE");                 return 0;

     return 0;                    }

 }
Cont…
Cont
 Existen dos formas de implementar la sentencia for que se utilizan
 normalmente para i l
        l             implementar b lbucles d conteo: f
                                             de             formato
 ascendente, en el que la variable de control se incrementa y
 formato descendente, en el que la variable de control decrementa.
Ejemplos
 #include <stdio.h>                      #include <stdio.h>
 #include <stdlib.h>                     #include <stdlib.h>
 #include <math.h>
                                         int main()
                                         {
 #define M 15
                                             int n, suma = 0;
 #define f(x) exp(2*x)-x
 int main ()                                 for (n=1; n<=10; n++)
 {                                           suma += 2*n;
     int i;                                  printf("La suma de los 10 primeros numeros pares: %dn",suma);
     double x;                               system("PAUSE");
     for(i=0; i<=M; i++)
                                             return 0;
     {
                                         }
     printf("valor de x: ");
     scanf("%lf",&x);
     printf("f(%.1lf)=%.4gn",x,f(x));   /*El bucle lo podríamos haber diseñado con un incremento de 2:
     }                                       for (n = 2; n <= 20; n+=2)
     system("PAUSE");                        suma += n;     */
                                                             /
     return 0;
 }
Bucles infinitos
 C no soporta una sentencia que realice esa tarea, pero existe una
 variante d l sintaxis f que permite i l
     i    de la i     i fro           i implementar b l i fi i
                                                         bucles infinitos
 que son aquellos bucles que, en principio, no tienen fin.
 Sintaxis
    For(;;)
       Sentencia;
 La sentencia se ejecuta indefinidamente a menos que se utilice una
 sentencia return o break (normalmente una combinación if-break o
 if-return)
Sentencia nulas en bucles for
                              /* bucles for con sentencias nulas */

 Cualquiera o todas las       #include <stdio.h>
                              #include <stdlib.h>

 sentencias del bucle for     int main()
                              {


 pueden ser nulas Para
                 nulas.           int contador = 0;
                                  for (;contador < 5;)


 ejecutar esta acción se
                                  {
                                  contador++;
                                  printf (";Bucle!n");

 utiliza el (;) para marcar       }
                                  printf("n Contador: %d n", contador);

 la sentencia vacía               system ("PAUSE");
                                  return 0;
                              }
Sentencias break y continue
 La sentencia break       Las sentencia continue
 termina la ejecución     hace que la ejecución
 de un bucle de una
         bucle,           de un bucle vuelva a
 sentencia switch, y en   la cabecera del bucle
 general de cualquier
 sentencia
Ejemplos
 #include <stdio.h>                                        #include <stdio.h>
 #include <stdlib.h> /*Ejemplo de utilización de break*/   #include <stdlib.h>
 int main ()
                                                           int main()
 {
                                                           {
 int contador = 0; /* inicialización */
                                                           int clave,i;
 int max;
 printf ("Cuantos holas? " ) ;                             puts ("Introduce -9 para acabar. " ) ;
 scanf ("%d",&max) ;                                       clave = 1;
 for (;;) /* bucle for que no termina nunca */             for (i = 0; i < 8; i++) {
 {                                                         if (clave ==-9) continue;
 if(contador < max) /* test */
                                                           scanf ("%d",&clave);
 {
                                                           printf ("clave %dn",clave) ;
                                                                  ( clave %dn clave)
 puts("Hola!");
                                                           }
 contador++;
 }                                                         printf("VAL0RES FINALES i = %d clave = %d",i,clave);
 else                                                      system("PAUSE");
     break;                                                return 0;
 }                                                         }
     system("PAUSE");
     return 0;
 }
Repetición: el bucle do while
                     do…while
 La sentencia do-while se utiliza para especificar un
                                  p      p
 bucle condicional que se ejecuta al menos una vez
 Sintaxis
   do sentencia while (expresión)
   do
     sentencia
   while (expresión)
         ( p       )
Diferencias entre while y do while
 Una sentencia do-while es similar a una sentencia while excepto que
 el cuerpo del bucle se ejecuta siempre al menos una vez
  l        d lb l        j       i       l
Ejemplos
 #include <stdio.h>            #include <stdio.h>
                               #include <stdlib.h>
 #include <stdlib.h>
 #incl de <stdlib h>
                               /*imprime las letras minusculas del alfabeto*/
 /*cuenta de 0 a 10*/          int main ()

 int main ()                   {
                                   char car='a';
 {
                                   do
     int x=0;                      {
     do                            printf ("%cn",car);
                                   car++;
     printf ("x: %dn",x++);
                                   }
     while (x<10);                 while (car<='z');
     system("PAUSE");              system("PAUSE");
                                   return 0;
     return 0;
                               }
 }
Comparación de bucles
 While; el uso mas frecuente es cuando la repetición no esta
 controlada por contador; el test d condición precede a cada
       l d              d       l     de     di ió         d         d
 repetición del bucle; el cuerpo del bucle puede no ser ejecutado. Se
 debe utilizar cuando se desea saltar el bucle si la condición es falsa
 For; bucle de conteo, cuando el numero de repeticiones se conoce
 por anticipado y puede ser controlado por un contador; también es
 adecuado para bucles que implican control no contable del bucle
 con simples etapas d i i i li ió y d actualización; el t t d l
      i l      t     de inicialización de t li ió           l test de la
 condición precede a la ejecución del cuerpo del bucle
 Do while; es adecuada para asegurar que al menos se ejecuta el
 bucle
 b l una vez
Diseño de bucles
 El diseño de un bucle necesita tres puntos a
 considerar
  El cuerpo del bucle
  Las sentencias de inicialización
  Las
  L condiciones para l terminación del bucle
          di i           la     i ió d l b l
Ejemplos
 #include <stdio.h>                       scanf ("%ld",&n);
 #include <stdlib.h>
                                            }
 /*vizualize el factorial de un
 entero*/                                   while ((n<2)||(n>20));
 int i
 i main ()                                  for (m=n fact=1; n>1; fact
                                                (m=n,
 {
                                         *=n--);
     long int n,m,fact;                     printf ("%ld! = %ldn",m,fact);
     do                                     system("PAUSE");
                                                    ("PAUSE")
     {                                      return 0;
     p
     printf ("nFactorial de numero n:
            (                           }
 ");
Bucles anidados
 Es posible anidar bucles. Los bucles anidados constan de un bucle externo
 con uno o mas b l i t
                 bucles internos. C d vez que se repite el b l externo, l
                                  Cada                 it l bucle t       los
 bucles internos se repiten, se vuelve a evaluar los componentes de control y
 se ejecutan todas las iteraciones requeridas
Ejemplos
 #include <stdio.h>                       scanf ( "%d",&columnas) ;
 #include <stdlib.h>                        printf ("Q e caracter? " ) ;
                                                   ( Que caracter?:
                                            scanf ("n%c",&elCar) ;
  int main ()
                                            for (i = 0; i < filas; i++)
 {                                          {
     int filas, columnas;                      for (j = 0; j < columnas; j++ )
     int i, j;                                     putchar(elCar) ;
     char elCar;   ;                           putchar('n');
                                            }
     printf ("Cuantas filas?: " ) ;
                                            system("PAUSE");
     scanf ("%d",&filas) ;                  return 0;
     printf ("Cuantas columnas?: " ) ;
               ( Cuantas                 }
Ejercicios
 Escribir un programa que encuentre el primer numero primo introducido por
 el t l d
   l teclado
                                                1 2 3 n
 Calcular la suma de los términos de la serie    2
                                                  + + +
                                                2 2  3
                                                      2 2n


 Escribir un programa que calcule la suma de los 50 primeros números
 enteros
 Calcular la media de las notas introducidas por teclado con un dialogo
 interactivo semejante al siguiente:
    Cuantas notas?: 3
    Nota 1: 12
    Nota 2: 16
    …
    Media : 14
Patrón de prueba de pantalla panorámica (16:9)




                               Prueba de la
                                relación de
                                  aspecto
                            (Debe parecer circular)




       4x3

16x9

ESTRUCTURAS DE CONTROL: BUCLES EN C++

  • 1.
    ESTRUCTURAS DE CONTROL CONTROL: BUCLES
  • 2.
    Evaluación Escribir unprograma que desglose cierta cantidad de segundos introducida por el teclado en su equivalente en semanas, días, horas, minutos, segundos , , , , g Escribir un programa lea la longitud de los lados y calcule la hipotenusa Escribir un programa que calcule el numero de días de un mes dados los valores numéricos del mes y año mes,
  • 3.
    Contenido 1. La sentencia While 2. Repetición: el bucle For 3. Precauciones en el uso del bucle For 4. Repetición: el bucle Do-While 5. Comparación de bucles While, For y do-While 6. Diseño de bucles 7. Bucles anidados 8. Ejercicios
  • 4.
    La sentencia While Un bucle while tiene una condición del bucle (una expresión lógica) que controla la secuencia de repetición. repetición La posición de esta condición del bucle es delante del cuerpo del bucle y significa que un bucle while es un bucle pretest de modo que cuando se ejecuta el mismo, se evalúa la condición antes de que se ejecute el cuerpo del bucle
  • 5.
    Sintaxis Las sentencias del cuerpo del bucle se repiten mientras que la expresión lógica (condición del bucle) sea verdadera. ) Cuando se evalúa la expresión lógica y resulta falsa, se termina y se sale del bucle y se ejecuta la siguiente sentencia de programa después de la sentencia while
  • 6.
    Ejemplo /*bucle demuestra con while*/ #include <stdio.h> #include <stdlib.h> int main () { int contador=0; while(contador<5) { contador++; printf("contador: %dn",contador); } printf("Fin"); system("PAUSE"); return 0; }
  • 7.
    Operadores de incrementoy decremento C ofrece los operadores de incremento (++) y decremento (--) que soporta una sintaxis abreviada para añadir (incrementar) o restar (decrementar) 1 al valor de una variable K=i++; /*asigna el valor de 3 a k y 4 a i*/ K ++i; / asigna K=++i; /*asigna el valor de 5 a K y 5 a i*/ i / K=i--; /*asigna el valor de 5 a k y 4 a i*/ K i; / asigna K=--i; /*asigna el valor de 3 a k y 3 a i*/ i /
  • 8.
    Bucles controlados porcentinelas Un método para terminar p un bucle es introducir un único dato definido y especificado denominado valor centinela como ultimo dato. La condición del bucle comprueba cada dato y termina cuando se lee el valor centinela
  • 9.
    Bucles controlados porindicadores Un bucle controlado por bandera-indicador se ejecuta p j hasta que se produce un suceso anticipado y se cambia el valor del indicador
  • 10.
    Las sentencia breaken los bucles La sentencia break se utiliza, a veces, para realizar una terminación anormal del bucle. Dicho de otro modo, una terminación antes de lo previsto
  • 11.
    Bucles While (true) La condición que se comprueba en un b l while b bucle hil puede ser cualquier expresión valida C. Mientras que la condición permanezca verdadera (distinto de 0), el bucle while continuara ejecutándose. ejecutándose Se puede crear un bucle que nunca termine utilizando el valor 1 para la condición que se comprueba q p
  • 12.
    Ejemplo /*calculo dela media de 6 numeros*/ while (contadornum<totalnum) #include <stdio.h> #incl de <stdio h> { #include <stdlib.h> float numero; #include <string.h> scanf ("%f",&numero); int main () sumanum+=numero; ; { ++contadornum; const int totalnum=6; } int contadornum=0; media=sumanum/contadornum; float sumanum=0; printf("media:%.2fn",media); float media; system("PAUSE"); printf ("introduzca %d numeros:n", return 0; totalnum); }
  • 13.
    Repetición el bucleFor La sentencia for (bucle for) es un método ara ejecutar ( ) j un bloque de sentencias un numero fijo de veces. El bucle for se diferencia del bucle while en que las operaciones de control del bucle se sitúan en un solo sitio: la cabecera de la sentencia Sintaxis Si i For( inicialización; condición iteración; incremento) Sentencias S t i
  • 14.
    Ejemplo #include <stdio.h> #include <stdio.h> #include <stdlib.h> #include <stdlib.h> #i l d < dlib h> int main () int main () { int i; { /*imprimir hola 10 veces*/ int i; i i for(i=0; i<10; i++) { /*imprimir hola 10 veces*/ printf("hola!, "); for(i=0; i<10; i++) printf("el valor de i es: %dn",i); printf("hola!n"); i tf("h l ! ") } system("PAUSE"); system("PAUSE"); return 0; return 0; } }
  • 15.
    Cont… Cont Existen dosformas de implementar la sentencia for que se utilizan normalmente para i l l implementar b lbucles d conteo: f de formato ascendente, en el que la variable de control se incrementa y formato descendente, en el que la variable de control decrementa.
  • 16.
    Ejemplos #include <stdio.h> #include <stdio.h> #include <stdlib.h> #include <stdlib.h> #include <math.h> int main() { #define M 15 int n, suma = 0; #define f(x) exp(2*x)-x int main () for (n=1; n<=10; n++) { suma += 2*n; int i; printf("La suma de los 10 primeros numeros pares: %dn",suma); double x; system("PAUSE"); for(i=0; i<=M; i++) return 0; { } printf("valor de x: "); scanf("%lf",&x); printf("f(%.1lf)=%.4gn",x,f(x)); /*El bucle lo podríamos haber diseñado con un incremento de 2: } for (n = 2; n <= 20; n+=2) system("PAUSE"); suma += n; */ / return 0; }
  • 17.
    Bucles infinitos Cno soporta una sentencia que realice esa tarea, pero existe una variante d l sintaxis f que permite i l i de la i i fro i implementar b l i fi i bucles infinitos que son aquellos bucles que, en principio, no tienen fin. Sintaxis For(;;) Sentencia; La sentencia se ejecuta indefinidamente a menos que se utilice una sentencia return o break (normalmente una combinación if-break o if-return)
  • 18.
    Sentencia nulas enbucles for /* bucles for con sentencias nulas */ Cualquiera o todas las #include <stdio.h> #include <stdlib.h> sentencias del bucle for int main() { pueden ser nulas Para nulas. int contador = 0; for (;contador < 5;) ejecutar esta acción se { contador++; printf (";Bucle!n"); utiliza el (;) para marcar } printf("n Contador: %d n", contador); la sentencia vacía system ("PAUSE"); return 0; }
  • 19.
    Sentencias break ycontinue La sentencia break Las sentencia continue termina la ejecución hace que la ejecución de un bucle de una bucle, de un bucle vuelva a sentencia switch, y en la cabecera del bucle general de cualquier sentencia
  • 20.
    Ejemplos #include <stdio.h> #include <stdio.h> #include <stdlib.h> /*Ejemplo de utilización de break*/ #include <stdlib.h> int main () int main() { { int contador = 0; /* inicialización */ int clave,i; int max; printf ("Cuantos holas? " ) ; puts ("Introduce -9 para acabar. " ) ; scanf ("%d",&max) ; clave = 1; for (;;) /* bucle for que no termina nunca */ for (i = 0; i < 8; i++) { { if (clave ==-9) continue; if(contador < max) /* test */ scanf ("%d",&clave); { printf ("clave %dn",clave) ; ( clave %dn clave) puts("Hola!"); } contador++; } printf("VAL0RES FINALES i = %d clave = %d",i,clave); else system("PAUSE"); break; return 0; } } system("PAUSE"); return 0; }
  • 21.
    Repetición: el bucledo while do…while La sentencia do-while se utiliza para especificar un p p bucle condicional que se ejecuta al menos una vez Sintaxis do sentencia while (expresión) do sentencia while (expresión) ( p )
  • 22.
    Diferencias entre whiley do while Una sentencia do-while es similar a una sentencia while excepto que el cuerpo del bucle se ejecuta siempre al menos una vez l d lb l j i l
  • 23.
    Ejemplos #include <stdio.h> #include <stdio.h> #include <stdlib.h> #include <stdlib.h> #incl de <stdlib h> /*imprime las letras minusculas del alfabeto*/ /*cuenta de 0 a 10*/ int main () int main () { char car='a'; { do int x=0; { do printf ("%cn",car); car++; printf ("x: %dn",x++); } while (x<10); while (car<='z'); system("PAUSE"); system("PAUSE"); return 0; return 0; } }
  • 24.
    Comparación de bucles While; el uso mas frecuente es cuando la repetición no esta controlada por contador; el test d condición precede a cada l d d l de di ió d d repetición del bucle; el cuerpo del bucle puede no ser ejecutado. Se debe utilizar cuando se desea saltar el bucle si la condición es falsa For; bucle de conteo, cuando el numero de repeticiones se conoce por anticipado y puede ser controlado por un contador; también es adecuado para bucles que implican control no contable del bucle con simples etapas d i i i li ió y d actualización; el t t d l i l t de inicialización de t li ió l test de la condición precede a la ejecución del cuerpo del bucle Do while; es adecuada para asegurar que al menos se ejecuta el bucle b l una vez
  • 25.
    Diseño de bucles El diseño de un bucle necesita tres puntos a considerar El cuerpo del bucle Las sentencias de inicialización Las L condiciones para l terminación del bucle di i la i ió d l b l
  • 26.
    Ejemplos #include <stdio.h> scanf ("%ld",&n); #include <stdlib.h> } /*vizualize el factorial de un entero*/ while ((n<2)||(n>20)); int i i main () for (m=n fact=1; n>1; fact (m=n, { *=n--); long int n,m,fact; printf ("%ld! = %ldn",m,fact); do system("PAUSE"); ("PAUSE") { return 0; p printf ("nFactorial de numero n: ( } ");
  • 27.
    Bucles anidados Esposible anidar bucles. Los bucles anidados constan de un bucle externo con uno o mas b l i t bucles internos. C d vez que se repite el b l externo, l Cada it l bucle t los bucles internos se repiten, se vuelve a evaluar los componentes de control y se ejecutan todas las iteraciones requeridas
  • 28.
    Ejemplos #include <stdio.h> scanf ( "%d",&columnas) ; #include <stdlib.h> printf ("Q e caracter? " ) ; ( Que caracter?: scanf ("n%c",&elCar) ; int main () for (i = 0; i < filas; i++) { { int filas, columnas; for (j = 0; j < columnas; j++ ) int i, j; putchar(elCar) ; char elCar; ; putchar('n'); } printf ("Cuantas filas?: " ) ; system("PAUSE"); scanf ("%d",&filas) ; return 0; printf ("Cuantas columnas?: " ) ; ( Cuantas }
  • 29.
    Ejercicios Escribir unprograma que encuentre el primer numero primo introducido por el t l d l teclado 1 2 3 n Calcular la suma de los términos de la serie 2 + + + 2 2 3 2 2n Escribir un programa que calcule la suma de los 50 primeros números enteros Calcular la media de las notas introducidas por teclado con un dialogo interactivo semejante al siguiente: Cuantas notas?: 3 Nota 1: 12 Nota 2: 16 … Media : 14
  • 30.
    Patrón de pruebade pantalla panorámica (16:9) Prueba de la relación de aspecto (Debe parecer circular) 4x3 16x9