30
ESTRUCTURAS DE CONTROL ESTRUCTURAS DE CONTROL: BUCLES

ESTRUCTURAS DE CONTROL: BUCLES EN C++

  • Upload
    diedex

  • View
    7.695

  • Download
    6

Embed Size (px)

Citation preview

Page 1: ESTRUCTURAS DE CONTROL: BUCLES EN C++

ESTRUCTURAS DE CONTROL ESTRUCTURAS DE CONTROL: BUCLES

Page 2: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Evaluación Evaluación Escribir un programa que desglose cierta cantidad deEscribir un programa que desglose cierta cantidad desegundos introducida por el teclado en su equivalenteen semanas, días, horas, minutos, segundos, , , , gEscribir un programa lea la longitud de los lados ycalcule la hipotenusacalcule la hipotenusaEscribir un programa que calcule el numero de días deun mes dados los valores numéricos del mes y añoun mes, dados los valores numéricos del mes y año

Page 3: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Contenido 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

Page 4: ESTRUCTURAS DE CONTROL: BUCLES EN C++

La sentencia WhileLa sentencia While

Un bucle while tiene una condición del bucle (unaUn bucle while tiene una condición del bucle (unaexpresión lógica) que controla la secuencia derepetición La posición de esta condición del buclerepetición. La posición de esta condición del buclees delante del cuerpo del bucle y significa que unbucle while es un bucle pretest de modo quebucle while es un bucle pretest de modo quecuando se ejecuta el mismo, se evalúa la condiciónantes de que se ejecute el cuerpo del bucleantes de que se ejecute el cuerpo del bucle

Page 5: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Sintaxis Sintaxis Las sentencias del cuerpo delbucle se repiten mientras quela expresión lógica (condicióndel bucle) sea verdadera.)Cuando se evalúa laexpresión lógica y resultafalsa, se termina y se sale delfalsa, se termina y se sale delbucle y se ejecuta la siguientesentencia de programadespués de la sentencia whiledespués de la sentencia while

Page 6: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo /*bucle de muestra con while*/

#include <stdio.h>

#include <stdlib.h>

int main ()

{

int contador=0;

while(contador<5)

{

contador++;

printf("contador: %d\n",contador);

}}

printf("Fin");

system("PAUSE");

return 0;

}}

Page 7: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Operadores de incremento y decrementoOperadores de incremento y decrementoC ofrece los operadores de incremento (++) ydecremento (--) que soporta una sintaxis abreviadapara añadir (incrementar) o restar (decrementar) 1 alvalor de una variablevalor de una variableK=i++; /*asigna el valor de 3 a k y 4 a i*/K=++i; /*asigna el valor de 5 a K y 5 a i*/K ++i; / asigna el valor de 5 a K y 5 a i /K=i--; /*asigna el valor de 5 a k y 4 a i*/K=--i; /*asigna el valor de 3 a k y 3 a i*/K i; / asigna el valor de 3 a k y 3 a i /

Page 8: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Bucles controlados por centinelasBucles controlados por centinelasUn método para terminarpun bucle es introducir unúnico dato definido yespecificado denominadoespecificado denominadovalor centinela como ultimodato. La condición del buclecomprueba cada dato ytermina cuando se lee elvalor centinelavalor centinela

Page 9: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Bucles controlados por indicadoresBucles controlados por indicadoresUn bucle controlado por bandera-indicador se ejecutap jhasta que se produce un suceso anticipado y se cambiael valor del indicador

Page 10: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Las sentencia break en los bucles 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

Page 11: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Bucles While (true)Bucles While (true)La condición que se

b b l hilcomprueba en un bucle whilepuede ser cualquier expresiónvalida C. Mientras que lacondición permanezcacondición permanezcaverdadera (distinto de 0), elbucle while continuaraejecutándose Se puede crearejecutándose. Se puede crearun bucle que nunca termineutilizando el valor 1 para lacondición que se compruebaq p

Page 12: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo /*calculo de la media de 6 numeros*/#incl de <stdio h>

while (contadornum<totalnum){#include <stdio.h>

#include <stdlib.h>#include <string.h>int main ()

{float numero;scanf ("%f",&numero);sumanum+=numero;()

{const int totalnum=6;int contadornum=0;

;++contadornum;}media=sumanum/contadornum;

float sumanum=0;float media;printf ("introduzca %d numeros:\n",

totalnum);

printf("media:%.2f\n",media);system("PAUSE");return 0;}totalnum); }

Page 13: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Repetición el bucle ForRepetición el bucle ForLa sentencia for (bucle for) es un método ara ejecutar( ) jun bloque de sentencias un numero fijo de veces. Elbucle for se diferencia del bucle while en que lasoperaciones de control del bucle se sitúan en un solositio: la cabecera de la sentenciaSi iSintaxis

For( inicialización; condición iteración; incremento)S t iSentencias

Page 14: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo #include <stdio.h>#i l d < dlib h>

#include <stdio.h>

#include <stdlib.h>#include <stdlib.h>int main (){

i i

int main ()

{

int i;

/*imprimir hola 10 veces*/

int i;/*imprimir hola 10 veces*/for(i=0; i<10; i++)

i tf("h l !\ ")

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

{

printf("hola!, ");

printf("el valor de i es: %d\n",i);

}printf("hola!\n");system("PAUSE");return 0;

}

}

system("PAUSE");

return 0;

}

}

Page 15: ESTRUCTURAS DE CONTROL: BUCLES EN C++

ContCont…Existen dos formas de implementar la sentencia for que se utilizan

l i l b l d fnormalmente para implementar bucles de conteo: formatoascendente, en el que la variable de control se incrementa yformato descendente, en el que la variable de control decrementa.

Page 16: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplos Ejemplos #include <stdio.h>

#include <stdlib.h>

#include <stdio.h>

#include <stdlib.h>#include <math.h>

#define M 15

#define f(x) exp(2*x)-x

int main ()

int main()

{

int n, suma = 0;

for (n=1; n<=10; n++)

{

int i;

double x;

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

{

suma += 2*n;

printf("La suma de los 10 primeros numeros pares: %d\n",suma);

system("PAUSE");

return 0;

}printf("valor de x: ");

scanf("%lf",&x);

printf("f(%.1lf)=%.4g\n",x,f(x));

}

system("PAUSE");

}

/*El bucle lo podríamos haber diseñado con un incremento de 2:

for (n = 2; n <= 20; n+=2)

suma += n; */return 0;

}

/

Page 17: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Bucles infinitos Bucles infinitos C no soporta una sentencia que realice esa tarea, pero existe una

i d l i i f i i l b l i fi ivariante de la sintaxis fro que permite implementar bucles infinitosque son aquellos bucles que, en principio, no tienen fin.Sintaxis

For(;;)Sentencia;

La sentencia se ejecuta indefinidamente a menos que se utilice unaLa sentencia se ejecuta indefinidamente a menos que se utilice unasentencia return o break (normalmente una combinación if-break oif-return)

Page 18: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Sentencia nulas en bucles forSentencia nulas en bucles for

Cualquiera o todas las/* bucles for con sentencias nulas */

#include <stdio.h>Cualquiera o todas lassentencias del bucle forpueden ser nulas Para

#include <stdlib.h>

int main()

{

int contador = 0;pueden ser nulas. Paraejecutar esta acción seutiliza el (;) para marcar

for (;contador < 5;)

{

contador++;

printf (";Bucle!\n");

}utiliza el (;) para marcarla sentencia vacía

}

printf("\n Contador: %d \n", contador);

system ("PAUSE");

return 0;

}}

Page 19: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Sentencias break y continueSentencias break y continue

La sentencia break Las sentencia continueLa sentencia breaktermina la ejecuciónde un bucle de una

Las sentencia continuehace que la ejecuciónde un bucle vuelva ade un bucle, de una

sentencia switch, y engeneral de cualquier

de un bucle vuelva ala cabecera del bucle

general de cualquiersentencia

Page 20: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplos Ejemplos #include <stdio.h>

#include <stdlib.h> /*Ejemplo de utilización de break*/

#include <stdio.h>

#include <stdlib.h>int main ()

{

int contador = 0; /* inicialización */

int max;

printf ("Cuantos holas? " ) ;

int main()

{

int clave,i;

puts ("Introduce -9 para acabar. " ) ;

scanf ("%d",&max) ;

for (;;) /* bucle for que no termina nunca */

{

if(contador < max) /* test */

{

clave = 1;

for (i = 0; i < 8; i++) {

if (clave ==-9) continue;

scanf ("%d",&clave);

printf ("clave %d\n" clave) ;puts("Hola!");

contador++;

}

else

break;

printf ( clave %d\n ,clave) ;

}

printf("VAL0RES FINALES i = %d clave = %d",i,clave);

system("PAUSE");

return 0;}

system("PAUSE");

return 0;

}

}

Page 21: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Repetición: el bucle do whileRepetición: el bucle do…whileLa sentencia do-while se utiliza para especificar un p pbucle condicional que se ejecuta al menos una vez Sintaxis Sintaxis

do sentencia while (expresión)dodo

sentenciawhile (expresión)( p )

Page 22: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Diferencias entre while y do whileDiferencias entre while y do whileUna sentencia do-while es similar a una sentencia while excepto que l d l b l j i l el cuerpo del bucle se ejecuta siempre al menos una vez

Page 23: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplos Ejemplos #include <stdio.h>#incl de <stdlib h>

#include <stdio.h>

#include <stdlib.h>#include <stdlib.h>/*cuenta de 0 a 10*/int main (){

/*imprime las letras minusculas del alfabeto*/

int main ()

{

char car='a';{int x=0;doprintf ("x: %d\n",x++);

do

{

printf ("%c\n",car);

car++;

}while (x<10);system("PAUSE");return 0;

}

}

while (car<='z');

system("PAUSE");

return 0;

}}

}

Page 24: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Comparación de bucles Comparación de bucles While; el uso mas frecuente es cuando la repetición no esta

l d d l d di ió d dcontrolada por contador; el test de condición precede a cadarepetición del bucle; el cuerpo del bucle puede no ser ejecutado. Sedebe utilizar cuando se desea saltar el bucle si la condición es falsaFor; bucle de conteo, cuando el numero de repeticiones se conocepor anticipado y puede ser controlado por un contador; también esadecuado para bucles que implican control no contable del bucle

i l t d i i i li ió d t li ió l t t d lcon simples etapas de inicialización y de actualización; el test de lacondición precede a la ejecución del cuerpo del bucleDo while; es adecuada para asegurar que al menos se ejecuta elb lbucle una vez

Page 25: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Diseño de bucles Diseño de bucles

El diseño de un bucle necesita tres puntos aEl diseño de un bucle necesita tres puntos aconsiderar

El cuerpo del bucleEl cuerpo del bucleLas sentencias de inicializaciónL di i l i ió d l b lLas condiciones para la terminación del bucle

Page 26: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplos Ejemplos #include <stdio.h> scanf ("%ld",&n);#include <stdlib.h>/*vizualize el factorial de un entero*/i i ()

}while ((n<2)||(n>20));for (m=n fact=1; n>1; factint main ()

{ long int n,m,fact;

for (m=n, fact=1; n>1; fact*=n--);

printf ("%ld! = %ld\n",m,fact);("PAUSE")do

{printf ("\nFactorial de numero n:

system("PAUSE");return 0;

}p ( \");

}

Page 27: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Bucles anidados Bucles anidados Es posible anidar bucles. Los bucles anidados constan de un bucle externo

b l i t C d it l b l t lcon uno o mas bucles internos. Cada vez que se repite el bucle externo, losbucles internos se repiten, se vuelve a evaluar los componentes de control yse ejecutan todas las iteraciones requeridas

Page 28: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplos Ejemplos #include <stdio.h> scanf ( "%d",&columnas) ;

printf ("Q e caracter? " ) #include <stdlib.h>int main (){

printf ( Que caracter?: ) ;scanf ("\n%c",&elCar) ;for (i = 0; i < filas; i++){

int filas, columnas;int i, j;char elCar;

{for (j = 0; j < columnas; j++ )

putchar(elCar) ;putchar('\n');;

printf ("Cuantas filas?: " ) ;scanf ("%d",&filas) ;printf ("Cuantas columnas?: " ) ;

}system("PAUSE");return 0;

}printf ( Cuantas columnas?: ) ; }

Page 29: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejercicios Ejercicios Escribir un programa que encuentre el primer numero primo introducido porl t l del teclado

Calcular la suma de los términos de la serieEscribir un programa que calcule la suma de los 50 primeros números

nn22

322

21

32 +++

enterosCalcular la media de las notas introducidas por teclado con un dialogo interactivo semejante al siguiente:

Cuantas notas?: 3Nota 1: 12Nota 2: 16…Media : 14

Page 30: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Patrón de prueba de pantalla panorámica (16:9)

Prueba de la relación de

aspecto

(Debe parecer circular)

16x9

4x3