Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Tema 3 - Técnicas básicas de diseño de algoritmos

93 visualizaciones

Publicado el

Tema 3 - Técnicas básicas de diseño de algoritmos

3.1 Diseñar esquemas de iteración y recorrido
3.2 Desarrollar estrategias básicas de recursión

Publicado en: Educación
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Tema 3 - Técnicas básicas de diseño de algoritmos

  1. 1. http://www.eps.uam.es/~phaya PROG-I 2009-10 TÉCNICAS BÁSICAS DE DISEÑO DE ALGORITMOS Tema 3 – 3.1 y 3.2
  2. 2. PROG-I / 31PROG-I Objetivos Semana 5 3.1 Diseñar esquemas de iteración y recorrido 3.2 Desarrollar estrategias básicas de recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 2
  3. 3. Esquemas iteración y recorrido
  4. 4. PROG-I / 31PROG-I Clasificar los siguientes problemas 1. Imprimir los números impares/pares entre el 1 y un n dado. 2. Determinar si una secuencia de números esta formada sólo por números pares/impares. 3. Contar el número de espacios en blanco en una frase terminada con un punto. 4. Encontrar la posición del primer carácter en blanco en una frase. 5. Determinar los n primeros términos de una serie numérica. 6. Determinar si un número dado pertenece a los n primeros términos de una serie numérica. 7. Dado una lista de alumnos, mostrar los datos de uno en concreto dado. 8. Dado una lista de alumnos, calcular la edad media. Curso 2009-10 4Tema 3 - Técnicas básicas de diseño de
  5. 5. PROG-I / 31PROG-I Esquemas de recorrido (I)  Recorrido cuando se conoce la longitud de la secuencia a priori (bucle definido) inicializa tratamiento desde i  1 hasta longitud(S): trata elemento actual obtén siguiente elemento finaliza tratamiento accede al primer elemento inicializa tratamiento desde i  2 hasta longitud(S): trata elemento actual obtén siguiente elemento finaliza tratamiento /*inicializa tratamiento*/ scanf("%d",&n); /*desde i  1 hasta longitud(S): */ for (i= 1; i <= n; i++) /*trata elemento actual*/ printf("1/%d ", i); /*obtén siguiente elemento*/ /*finaliza tratamiento*/ printf("n"); Curso 2009-10 5Tema 3 - Técnicas básicas de diseño de
  6. 6. PROG-I / 31PROG-I Esquemas de recorrido (II) accede al primer elemento inicializa tratamiento mientras no fin de secuencia: trata elemento actual obtén elemento siguiente finaliza tratamiento  Recorrido cuando se conoce la longitud de la secuencia a priori (bucle indefinido) Curso 2009-10 6Tema 3 - Técnicas básicas de diseño de
  7. 7. PROG-I / 31PROG-I Esquemas de recorrido (II) Contar el número de espacios en blanco de una frase terminada con punto /* accede al primer elemento */ c = getchar(); /* inicializa tratamiento */ i = 0; /* mientras no fin de secuencia: */ while (c != '.') { /* trata elemento actual */ if (c == ' ') i++; /* obtén elemento siguiente */ c = getchar(c); } /*finaliza tratamiento*/ printf("%dn", i); Curso 2009-10 7Tema 3 - Técnicas básicas de diseño de
  8. 8. PROG-I / 31PROG-I Esquemas de recorrido (II) si es secuencia vacía finaliza tratamiento si no inicializa tratamiento haz trata elemento actual obtén elemento siguiente mientras no fin de secuencia finaliza tratamiento Curso 2009-10 8Tema 3 - Técnicas básicas de diseño de
  9. 9. PROG-I / 31PROG-I Esquema de búsqueda acceder al primer elemento inicializar tratamiento mientras no fin secuencia y no satisface condición obtener siguiente elemento si fin de secuencia: finalizar tratamiento si no finalizar tratamiento encontrado  Búsqueda: siempre es un bucle indefinido. Curso 2009-10 9Tema 3 - Técnicas básicas de diseño de
  10. 10. PROG-I / 31PROG-I Resumen Curso 2009-10Tema 3 - Técnicas básicas de diseño de 10 Problema Recorrido Búsqueda Codificar ¿long? Fija Variable Bucle definido Bucle indefinido ¿1elem? ¿tipo?
  11. 11. Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 11
  12. 12. PROG-I / 31PROG-I Recursión  Llamada de una función a si misma, ya sea directa o indirectamente  Ej. Hallar la suma de los n primeros elementos positivos.  f(n) = n + (n-1) + (n-2) + … + 2 + 1  f(n) = n + f(n-1) si n > 0. Si n = 0, f(0) = 0 Curso 2009-10 12Tema 3 - Técnicas básicas de diseño de 1. #include <stdio.h> 2. 3. int suma(int n) { 4. if (n == 0) 5. return 0; 6. else 7. return n + suma(n-1); 8. } 9. 10. int main(void) 11. { 12. printf("%dn",suma(3)); 13. return 0; 14. }
  13. 13. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 13 ee sumarecursiva.c main 12. printf("%dn",suma(3));
  14. 14. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 14 ee sumarecursiva.c main 12. printf("%dn",suma(3)); suma nn 33
  15. 15. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 15 ee sumarecursiva.c main 4. if (n == 0) suma nn 33
  16. 16. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 16 ee sumarecursiva.c main 7. return n + suma(n-1); suma nn 33
  17. 17. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 17 ee sumarecursiva.c main 7. return n + suma(2); suma nn 33 suma' nn 22
  18. 18. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 18 ee sumarecursiva.c main suma nn 33 suma' nn 22 4. if (n == 0)
  19. 19. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 19 ee sumarecursiva.c main 7. return n + suma(n-1); suma nn 33 suma' nn 22
  20. 20. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 20 ee sumarecursiva.c main 7. return n + suma(1); suma nn 33 suma' nn 22 suma'' nn 11
  21. 21. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 21 ee sumarecursiva.c main suma nn 33 suma' nn 22 4. if (n == 0) suma'' nn 11
  22. 22. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 22 ee sumarecursiva.c main 7. return n + suma(n-1); suma nn 33 suma' nn 22 suma'' nn 11
  23. 23. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 23 ee sumarecursiva.c main 7. return n + suma(0); suma nn 33 suma' nn 22 suma''' nn 00 suma'' nn 11
  24. 24. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 24 ee sumarecursiva.c main suma nn 33 suma' nn 22 suma'' nn 11 suma''' nn 00 4. if (n == 0)
  25. 25. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 25 ee sumarecursiva.c main suma nn 33 suma' nn 22 suma'' nn 11 suma''' nn 00 7. return 0;
  26. 26. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 26 ee sumarecursiva.c main suma nn 33 suma' nn 22 suma'' nn 11 7. return n + suma(0);
  27. 27. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 27 ee sumarecursiva.c main suma nn 33 suma' nn 22 suma'' nn 11 7. return 1 + 0;
  28. 28. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 28 ee sumarecursiva.c main suma nn 33 suma' nn 22 7. return n + 1;
  29. 29. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 29 ee sumarecursiva.c main suma nn 33 7. return n + 3;
  30. 30. PROG-I / 31PROG-I Recursión Curso 2009-10Tema 3 - Técnicas básicas de diseño de 30 ee sumarecursiva.c main 12. printf("%dn",6);
  31. 31. PROG-I / 31PROG-I Resumen Curso 2009-10Tema 3 - Técnicas básicas de diseño de 31  Caso base Ej. n = 0  ¿Qué pasa si eliminamos el caso base?  Expresa de manera simple y elegante ciertos problemas mcd (a, b) = mcd(b, a modulo b) si b ≠ 0 mcd (a, 0) = a  Consideraciones en cuanto a la eficiencia int suma(int n) { return n + suma(n-1); }

×