La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Informática Tema 5 - Estructuras de Control Estructuras de Repetición.

Presentaciones similares


Presentación del tema: "Informática Tema 5 - Estructuras de Control Estructuras de Repetición."— Transcripción de la presentación:

1 Informática Tema 5 - Estructuras de Control Estructuras de Repetición

2 Índice Necesidad Conceptos El while Bucle infinito El do...while El for

3 Necesidad En ciertos problemas es necesario ejecutar una instrucción o bloque de instrucciones más de una vez: P.e: “Hacer un programa en C que calcule la suma de N números enteros leídos desde teclado” Hay veces que conocemos el número de veces que deben repetirse y otras veces finalizará cuando se satisfaga una condición.

4 Conceptos A las estructuras de repetición se les conoce con el nombre de “bucle”. A cada repetición de las instrucciones de un bucle se le denomina “iteración”. Así se habla de primera iteración del bucle, segunda iteración, etc...

5 El while Sintaxis: while (exp_condicional) bloque ¿exp? Bloque Resto de instrucciones Cierto(1) Falso(0) while

6 Ejemplo 1: “Hacer un programa en C que calcule la suma de N números enteros leídos desde teclado” Algoritmo: –Pedir el valor que va a tener N. –Poner a cero una variable acumulador. –Mientras n sea distinto de cero: Pedir un valor Acumular el valor en la variable –Mostrar el resultado de la variable acumulador.

7 /* ejemplo 1*/ main(){ int N,suma,numero; prinft(“Deme la cantidad de numeros a leer: ”); scanf(“%d”,&N); /* numero de veces a ejecutarse */ suma=0; /* guarda la suma */ while (N!=0) { printf(“Deme el valor del numero: “); scanf(“%d”,&numero); suma=suma+numero; /*se van acumulando valores*/ N=N-1; /* se decrementa el contador*/ } printf(“el valor de la suma es: %d\n”,suma); }

8 Ejemplo 2: “ Hacer un programa en C que muestre por pantalla la tabla de multiplicar de un numero introducido por teclado” Algoritmo: –Pedir el número. –Poner un contador a cero. –Mientras que el contador sea menor o igual a 10: Sacar por pantalla el resultado del numero multiplicado por el contador. Incrementar el contador.

9 /* ejemplo 2*/ main(){ int num,contador; prinft(“Deme el numero: ”); scanf(“%d”,&num); /* obtener el numero */ contador=0;/* iniciamos el contador a cero */ while (contador<=10) { printf(“%4d por %4d es %4d“,num,contador,num*contador); contador=contador+1; /* se incrementa el contador*/ }

10 En ambos ejemplos se conoce cuantas veces se debe ejecutar el bloque de instrucciones del while. La expresión del while se convierte normalmente en una compro- bación del valor del contador. (contador<=10) y (N!=0) Se define el contador como una variable que se incrementa o decrementa un valor constante en cada iteración del bucle y que nos permite contabilizar en que iteración nos encontramos del bucle.

11 Puede ser que no conozcamos el número de veces a ejecutar: –P.e.: “Calcular la suma de números introdu- cidos desde teclado hasta introducir un cero” En este caso no hay contador, no conocemos la iteración en la que nos encontramos en cada momento y es el valor del número introducido el que determina el final del bucle. En la expresión deberemos controlar el valor del numero introducido, es decir: “Mientras que el número sea distinto de cero”

12 Algoritmo: –Pedir el número. –Poner a cero la variable que va a acumular los valores. –Mientras que el número sea distinto de cero: Acumular el valor del número en la variable. Pedir un nuevo numero –Mostrar por pantalla el contenido de la variable donde se han ido acumulado los números.

13 /* ejemplo 3*/ main(){ int n,suma,numero; printf(“Deme el valor del numero: “); scanf(“%d”,&numero); suma=0; /* guarda la suma */ while (numero!=0) { suma=suma+numero; printf(“Deme el valor del numero: “); scanf(“%d”,&numero); } printf(“el valor de la suma es: %d\n”,suma); }

14 Bucle infinito Un bucle infinito es un bucle que se repite infinitas veces, típicamente, nunca deja de cumplirse la condición del bucle. P.e: Si en el ejemplo 1 nos olvidamos de decrementar la variable contador. while (n!=0) { printf(“Deme el valor del numero: “); scanf(“%d”,&numero); suma=suma+numero; /*se van acumulando valores*/ }

15 El do...while Sintaxis: do bloque while (exp_condicional); ¿exp? Bloque Resto de instrucciones Cierto(1) Falso(0) do while

16 Características Se ejecuta el bloque de instrucciones al menos una vez. Ello lo hace especialmente indicado para validar datos de entrada. (Ver ejemplo, pag. siguiente) Aunque es parecido al while no siempre existe una correspondencia entre ellos. –P.e.: intentar hacer el ejemplo 3.

17 /*ejemplo 2 comprobando la entrada entre 1 y 9*/ main(){ int num,contador; do { prinft(“Deme el numero entre 1 y 9: ”); scanf(“%d”,&num); /* obtener el numero */ } while ((num 9)); /* comprueba si num está fuera del intervalo 1-9*/ contador=0;/* iniciamos el contador a cero */ while (contador<=10) { printf(“%4d por %4d es %4d“,num,contador,num*contador); contador=contador+1; /* se incrementa el contador*/ }

18 El for Se suele emplear cuando se conoce el número de iteraciones a realizar. Sintaxis: for(exp1;exp2;exp3) bloque La exp1 suele contener inicializaciones de vbles. Las instrucciones que se encuentren en esta parte del for sólo se ejecutarán una vez antes de cualquier iteración del bucle, si tiene más de una deberá ser separadas por una coma.

19 La exp2 contiene una expresión condicional al estilo del while que controla la ejecución o no del bloque de instrucciones. La exp3 contiene instrucciones que se deben ejecutar en cada iteración del bucle. p.e. El incremento/decremento de un contador, si contiene más de una instrucción, deberán ir separadas por comas. Estas instrucciones se ejecutan al final de cada iteración. P.e: for(i=0;i<10;i++) for(i=0,j=N;i<N;i++,j--)

20 ¿exp2? exp1 Resto de instrucciones Cierto(1) Falso(0) for bloque exp3

21 /*ejemplo 2 comprobando la entrada entre 1 y 9*/ main(){ int num,contador; do { prinft(“Deme el numero entre 1 y 9: ”); scanf(“%d”,&num); /* obtener el numero */ } while ((num 9)); /* comprueba si num está fuera del intervalo 1-9*/ for(contador=0;contador<=10;contador++) { printf(“%4d por %4d es %4d“,num,contador,num*contador); }

22 Correspondencia for-while Un for siempre se puede substituir por un while y viceversa exp1 for(exp1;exp2;exp3)while (exp2) {bloque exp3 }

23 Algunos for’s y while’s singulares for(;;) /*bucle infinito*/ for(;exp2;) /*sin exp1 y sin exp3*/ while(1) /*bucle infinito*/

24 Problemas Realizar un programa en C que calcule la multiplicación de dos números enteros a y b empleando sólo la operación suma. Realizar un programa en C que calcule a elevado b siendo a y b enteros y empleando sólo la operación multiplicación. Realizar un programa en C que calcule la a elevado b siendo a y b enteros y empleando sólo la operación suma.

25 main () { int a,b,mult; printf ("deme dos numeros enteros: "); scanf("%d%d",&a,&b); mult=0; while (b>0) { mult=mult+a; b--; } printf("el resultado es %d\n",mult); }

26 Finalización anticipada de un bucle Escribir un programa en C para determinar si un numero entero es primo o no. –Pedir un numero entero. –Comprobar si es divisible por el 2, el 3, 4, 5, etc hasta llegar al numero. –Si he llegado al numero es primo, sino es que he encontrado un numero por el que es divisible.

27 /* solucion 1*/ main() { int num,i,primo; printf(“deme un numero entero positivo: ”); scanf(“%d”,&num); i=2; primo=1; while (i<num) { if ((num%i)==0) primo=0; i++; } if (primo) printf(“El numero es primo”); else printf(“El numero no es primo”); }

28 /* solucion 2*/ main() { int num,i,primo; printf(“deme un numero entero positivo: ”); scanf(“%d”,&num); i=2; primo=1; while ((i<num) && (primo)) { if ((num%i)==0) primo=0; i++; } if (primo) printf(“El numero es primo”); else printf(“El numero no es primo”); }

29 /* solucion 3*/ main() { int num,i; printf(“deme un numero entero positivo: ”); scanf(“%d”,&num); i=2; while ((i<num) && ((num%i)!=0)) i++; if (i==num) printf(“El numero es primo”); else printf(“El numero no es primo”); }

30 /* solucion 4*/ main() { int num,i; printf(“deme un numero entero positivo: ”); scanf(“%d”,&num); for(i=2;((i<num) && ((num%i)!=0));i++) { } if (i==num) printf(“El numero es primo”); else printf(“El numero no es primo”); }

31 Problema Hacer un programa en C que calcule el factorial de un numero i!=i-1*i-2*i-3*…*1 Hacer programa que calcule e x segun Tailor:


Descargar ppt "Informática Tema 5 - Estructuras de Control Estructuras de Repetición."

Presentaciones similares


Anuncios Google