informática tema 5 - estructuras de control estructuras de repetición

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

Upload: encarnacion-arocha

Post on 23-Jan-2016

279 views

Category:

Documents


0 download

TRANSCRIPT

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

Informática

Tema 5 - Estructuras de Control

Estructuras de Repetición

Page 2: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

Índice

• Necesidad

• Conceptos

• El while

• Bucle infinito

• El do...while

• El for

Page 3: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

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.

Page 4: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

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...

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

El while

• Sintaxis:while (exp_condicional)

bloque¿exp?

Bloque

Resto de instrucciones

Cierto(1)

Falso(0)

while

Page 6: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

• 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.

Page 7: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

/* 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);

}

Page 8: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

• 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.

Page 9: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

/* 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*/

}

}

Page 10: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

• 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.

Page 11: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

• 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”

Page 12: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

• 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.

Page 13: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

/* 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);

}

Page 14: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

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*/

}

Page 15: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

El do...while

• Sintaxis:

do

bloque

while (exp_condicional);¿exp?

Bloque

Resto de instrucciones

Cierto(1)

Falso(0)

do

while

Page 16: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

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.

Page 17: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

/*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<1)||(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*/

}

}

Page 18: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

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.

Page 19: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

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--)

Page 20: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

¿exp2?

exp1

Resto de instrucciones

Cierto(1)

Falso(0)

for

bloque

exp3

Page 21: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

/*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<1)||(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);

}

}

Page 22: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

Correspondencia for-while

• Un for siempre se puede substituir por un while y viceversa

exp1

for(exp1;exp2;exp3) while (exp2) {

bloque bloque

exp3

}

Page 23: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

Algunos for’s y while’s singulares

• for(;;) /*bucle infinito*/

• for(;exp2;) /*sin exp1 y sin exp3*/

• while(1) /*bucle infinito*/

Page 24: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

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.

Page 25: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

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); }

Page 26: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

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.

Page 27: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

/* 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”);}

Page 28: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

/* 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”);}

Page 29: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

/* 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”);}

Page 30: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

/* 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”);}

Page 31: Informática Tema 5 - Estructuras de Control Estructuras de Repetición

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 ex segun Tailor:

N

i

ix

i

xe

0 !