Tema 4 iterativas

3.827 visualizaciones

Publicado el

0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
3.827
En SlideShare
0
De insertados
0
Número de insertados
46
Acciones
Compartido
0
Descargas
75
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Tema 4 iterativas

  1. 1. Tema 4 Estructuras de Control Iterativas
  2. 2. Estructuras iterativas <ul><li>Repiten n veces la ejecución de un bloque de instrucciones </li></ul><ul><ul><li>n finito o infinito </li></ul></ul><ul><ul><li>n conocido o desconocido a priori </li></ul></ul>
  3. 3. Iteraciones en c <ul><li>Sentencia while </li></ul><ul><li>Sentencia do-while </li></ul><ul><li>Sentencia for </li></ul>
  4. 4. Sentencia while <ul><li>while ( condición ) </li></ul><ul><li>{ </li></ul><ul><li>bloque_instrucciones; </li></ul><ul><li>} </li></ul>¿condición? V F Bloque de instrucciones
  5. 5. S emántica de while <ul><li>while : (0-n veces) </li></ul><ul><ul><li>Evaluar la condición </li></ul></ul><ul><ul><ul><li>Si el resultado es falso, acabar el bucle (seguir con la instrucción siguiente al while ) </li></ul></ul></ul><ul><ul><ul><li>Si el resultado es verdadero, ejecutar el bloque de instrucciones completo y volver a empezar </li></ul></ul></ul>
  6. 6. <ul><li>Escribir la tabla de multiplicar del 8. </li></ul><ul><li>int mult = 1; </li></ul><ul><li>while (mult <= 10) </li></ul><ul><li> { </li></ul><ul><li>printf (“ %d x %d = %d”, 8, mult, 8*mult); </li></ul><ul><li>mult = mult +1; </li></ul><ul><li>} </li></ul>Ejemplo
  7. 7. Ejemplo
  8. 8. Iteraciones en c <ul><li>Sentencia while </li></ul><ul><li>Sentencia do-while </li></ul><ul><li>Sentencia for </li></ul>
  9. 9. Sentencia do-while <ul><li>do </li></ul><ul><li>{ </li></ul><ul><li>bloque_instrucciones; </li></ul><ul><li>}while ( condición ); </li></ul>¿condición? V F Bloque de instrucciones
  10. 10. S emántica de do- while <ul><li>do while : (1-n veces) </li></ul><ul><ul><li>Ejecutar el bloque de instrucciones complet o </li></ul></ul><ul><ul><li>Evaluar la condición </li></ul></ul><ul><ul><ul><li>Si el resultado es falso, acabar el bucle (seguir con la instrucción siguiente al do-while ) </li></ul></ul></ul><ul><ul><ul><li>Si el resultado es verdadero, volver a empezar </li></ul></ul></ul>
  11. 11. Ejemplo <ul><li>Leer un número comprendido entre 1 y 100 </li></ul><ul><li>int num; </li></ul><ul><li>do </li></ul><ul><li> { </li></ul><ul><li>printf (“ Escribe un valor entre 1 y 100: ”); </li></ul><ul><li>scanf(“%d”, &num); </li></ul><ul><li>} while (num < 1 || num >100); </li></ul>
  12. 12. Ejemplo
  13. 13. Diseño de la iteración <ul><li>Control de la iteración </li></ul><ul><ul><li>¿Cuándo acaba la iteración? (condición de salida) </li></ul></ul><ul><ul><li>¿Cómo inicializar la condición? </li></ul></ul><ul><ul><li>¿Cómo se actualiza la condición? </li></ul></ul>
  14. 14. Diseño de la iteración <ul><li>Control de la iteración </li></ul><ul><li>Proceso de la iteración </li></ul><ul><ul><li>¿Qué es lo que hay que repetir? </li></ul></ul><ul><ul><li>¿Cómo inicializarlo? </li></ul></ul><ul><ul><li>¿Cuál es el estado al final del bucle? </li></ul></ul>
  15. 15. Diseño de la iteración <ul><li>Control de la iteración </li></ul><ul><li>Proceso de la iteración </li></ul><ul><li>Comprobación del diseño a través de trazas </li></ul>
  16. 16. Ejemplo resuelto <ul><li>Leer un valor a y escribir su tabla de multiplicar. </li></ul><ul><ul><li>Se usará un contador b que tomará valores de 1 a 10 para multiplicar al valor de a . </li></ul></ul>
  17. 17. Control de la iteración <ul><li>¿Cuándo acaba la iteración? (condición de salida) </li></ul><ul><ul><li>Cuando b valga 11 </li></ul></ul><ul><li>¿Cómo inicializar la condición? </li></ul><ul><ul><li>Al principio b valdrá 1 </li></ul></ul><ul><li>¿Cómo se actualiza la condición? </li></ul><ul><ul><li>En cada iteración b se incrementará en 1 </li></ul></ul>
  18. 18. Proceso de la iteración <ul><li>¿Qué es lo que hay que repetir? </li></ul><ul><ul><li>Mostrar el valor a * b y saltar de línea </li></ul></ul><ul><li>¿Cómo inicializarlo? </li></ul><ul><ul><li>No hace falta </li></ul></ul><ul><li>¿Cuál es el estado al final del bucle? </li></ul><ul><ul><li>Se habrá mostrado la tabla de multiplicar de a </li></ul></ul>
  19. 19. Algoritmo Inicialización Control Proceso INICIO LEER ( a ) b =1 b <=10 ESCRIBIR a * b Saltar de línea b = b +1 V F FIN
  20. 20. Código <ul><li>void main() </li></ul><ul><li>{ </li></ul><ul><li>int a,b,c; </li></ul><ul><li>printf(“ Introduce un número: ”); </li></ul><ul><li>scanf(“%d”,&a); </li></ul><ul><li>b=1; </li></ul><ul><li>while (b <= 10 ) </li></ul><ul><li>{ </li></ul><ul><li>c=a*b; </li></ul><ul><li> printf (“ %d x %d es = %d ”,a,b,c); </li></ul><ul><li>b=b+1; </li></ul><ul><li>} </li></ul><ul><li>system(“pause”); </li></ul><ul><li>} </li></ul>
  21. 21. Comprobación (trazas) 20 5 4 16 4 4 24 6 4 8 2 4 12 3 4 4 1 4 .. .. .. 10 b 40 4 c a
  22. 22. Ejemplo/ ejercicio 1 <ul><li>Implementar una eurocalculadora </li></ul><ul><ul><li>Dependiendo de la opción ‘P’ o ‘E’ convertirá de euros a pesetas o viceversa </li></ul></ul><ul><ul><li>Tras cada conversión el programa preguntará si se va a realizar otro cálculo </li></ul></ul>
  23. 23. Algoritmo (con do-while) F Calcular num en pesetas Escribir resultado en pesetas ¿Qué deseas (P/E)?  opc ¿ opc == ‘P’? V ¿Qué número?  num Calcular num en euros Escribir resultado en euros ¿Más números (S/N)?  resp ¿ resp == ‘S’? V F FIN
  24. 24. Algoritmo (con while ) resp=‘S’ Calcular num en pesetas Escribir resultado en pesetas ¿Más números (S/N)?  resp F ¿ opc == ‘P’? V Calcular num en euros Escribir resultado en euros ¿Qué deseas (P/E)?  opc ¿Qué número?  num ¿ resp == ‘S’? V F FIN
  25. 25. Ejemplo/ ejercicio 2 <ul><li>Calcular la primera potencia de 2 que sea mayor o igual que un número dado </li></ul>Leer Numero ¿Potencia< Numero ? Escribir Potencia V F Potencia = 1 Potencia = Potencia * 2
  26. 26. Código (con while ) <ul><li>/* numero > 1 */ </li></ul><ul><li>{ </li></ul><ul><li>potencia=1; /* 2 0 = 1 */ </li></ul><ul><li>while (p otencia < numero ) </li></ul><ul><li>{ </li></ul><ul><li> potencia = potencia*2; </li></ul><ul><li>} </li></ul><ul><li>printf ( “La p otencia buscada es %d” , potencia ); </li></ul><ul><li>} </li></ul>
  27. 27. Ejemplo/ ejercicio 3 <ul><li>Contar los caracteres introducidos por teclado hasta encontrar un punto (que también se cuenta) </li></ul>Leer car (un carácter) ¿ car !=‘.’? Escribir num V F num = 1 num = num +1 Leer car
  28. 28. Código (con while ) <ul><li>{ </li></ul><ul><li>n um=1 ; </li></ul><ul><li>scanf ( “%c”, & car) ; </li></ul><ul><li>while ( car != ‘.’ ) </li></ul><ul><li>{ </li></ul><ul><li>n um= n um+1 ; </li></ul><ul><li>scanf ( “%c”, & car) ; </li></ul><ul><li> } </li></ul><ul><li>printf ( “ Número total de caracteres: %d” , n um); </li></ul><ul><li>} </li></ul>
  29. 29. Código (con do-while ) <ul><li>{ </li></ul><ul><li>n um=0; </li></ul><ul><li>do { </li></ul><ul><li>n um= num +1 ; </li></ul><ul><li>scanf ( “%c”, & car) ; </li></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><li>while ( car != ‘.’ ) ; </li></ul><ul><li>printf ( “ Número total de caracteres: %d” , n um); </li></ul><ul><li>} </li></ul>
  30. 30. Ejercicios <ul><li>Imprimir los números del 1 al 10 cinco veces </li></ul><ul><li>Mostrar las tablas de multiplicar del 1 al 9 </li></ul><ul><li>Mostrar los múltiplos de 6 del 0 al 10000 </li></ul><ul><ul><li>Mismo ejercicio, pero de 10 en 10, es decir, cada 10 números mostrados, pedir que se pulse una tecla para continuar </li></ul></ul><ul><li>Pedir 2 números y escribir todos los enteros que hay entre ambos </li></ul><ul><li>Pedir un valor n e imprimir las n primeras potencias de n </li></ul>
  31. 31. Iteraciones en c <ul><li>Sentencia while </li></ul><ul><li>Sentencia do-while </li></ul><ul><li>Sentencia for </li></ul>
  32. 32. Sentencia for <ul><li>for ( inicialización ; condición ; actualización ) </li></ul><ul><li>{ </li></ul><ul><li>bloque_instrucciones; </li></ul><ul><li>} </li></ul>¿condición? V F Bloque de instrucciones Inicialización Actualización
  33. 33. Semántica de for <ul><li>for : (número de veces conocido a priori) </li></ul><ul><ul><li>Ejecutar la inicialización </li></ul></ul><ul><ul><li>Evaluar la condición </li></ul></ul><ul><ul><ul><li>Si el resultado es falso, acabar el bucle (seguir con la instrucción siguiente al for ) </li></ul></ul></ul><ul><ul><ul><li>Si el resultado es verdadero, ejecutar el bloque de instrucciones completo y ejecutar la actualización </li></ul></ul></ul>
  34. 34. Equivalencia for - while inicialización; while ( condición ) { bloque_instrucciones; actualización: } for ( inicialización ; condición; actualización ) { bloque_instrucciones; }
  35. 35. Ejemplo <ul><li>Mostrar en pantalla los primeros n números pares </li></ul>scanf (“%d”, &n) i=1; while (i<=n) { printf(“ %d”, 2*i); i= i+1; } scanf (“%d”, &n) for (i=1; i<=n; i= i+1) { printf(“ %d”, 2*i); }
  36. 36. Estructuras iterativas <ul><li>¿Cuando utilizar una u otra? </li></ul><ul><ul><li>for cuando el número de iteraciones sea conocido </li></ul></ul><ul><ul><li>do while cuando la iteración se ejecute como mínimo una vez </li></ul></ul><ul><ul><li>while en el resto de casos </li></ul></ul>
  37. 37. Ejercicios
  38. 38. Ejercicio factorial <ul><li>Pedir un número y mostrar por pantalla su factorial </li></ul><ul><ul><li>Propuesta: comprobar que el número es positivo, y pedirlo cuantas veces haga falta mientras no lo sea </li></ul></ul>
  39. 39. while Leer el número  num ¿ num == 0? fact = 1 Escribir resultado ¿ num <0? No se puede Calcular num ! fact = 1 i = 1 ¿ i <= num ? fact = fact * i i = i + 1 Escribir fact V V V F F F
  40. 40. for for (i=1;i<=num;i=i+1) {fact=fact*i;} Leer el número  num ¿ num == 0? fact = 1 Escribir resultado ¿ num <0? No se puede calcular num ! fact = 1; Repetir desde que i vale 1 hasta que i valga num , i=i+1; fact = fact * i; Escribir fact SI SI NO NO
  41. 41. Más ejercicios <ul><li>Pedir 2 números positivos y calcular su Máximo Común Divisor y su mínimo común múltiplo </li></ul><ul><li>Calcular el mínimo, el máximo y la media de una serie de números enteros que termina en 0 </li></ul><ul><ul><li>Propuesta: ídem pero considerando sólo los positivos </li></ul></ul><ul><li>Pedir n y m y calcular el valor </li></ul>

×