La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

1 Algoritmos y Programación Primavera de 2006 Javier M. Hernández FCFM Lectura 5: Diagramas de Flujo - Algoritmos B. Universidad Autónoma de Puebla.

Presentaciones similares


Presentación del tema: "1 Algoritmos y Programación Primavera de 2006 Javier M. Hernández FCFM Lectura 5: Diagramas de Flujo - Algoritmos B. Universidad Autónoma de Puebla."— Transcripción de la presentación:

1 1 Algoritmos y Programación Primavera de 2006 Javier M. Hernández FCFM Lectura 5: Diagramas de Flujo - Algoritmos B. Universidad Autónoma de Puebla

2 2 Tópicos El Ciclo de Desarrollo del SoftwareEl Ciclo de Desarrollo del Software Diagramas de FlujoDiagramas de Flujo –Selección –Secuencia –Iteración Cómo diagnosticar errores en sus programas?Cómo diagnosticar errores en sus programas? –Métodos para debugging –Métodos para pruebas

3 3 Componentes del Proceso de Desarrollo del Software   Definir el problema claramente   Analizar el problema   Diseñar un algoritmo   diseño top-down   Documentar al sistema   Codificar (Usar) el algoritmo   Probar el código

4 4 Ciclo de Desarrollo AnálisisDiseñoImplementarProbar debugging y pruebas

5 5 Debugging y Pruebas Debugging: el proceso de encontrar y corregir los errores (a.k.a “bugs”) Pruebas: ejecutar el programa sobre un conjunto de datos de prueba

6 6 Tipos de Errores sintáctico: cómo se escriben las instrucciones semántico: qué representan while (i=0; i < 5; i++) { printf(“%d\n”, i); } Ejemplo 1: for (i=0; i < 5; i++); { printf(“%d\n”, i); } Ejemplo 2: if (choice = ‘Q’) { break; } Ejemplo 3:

7 7 Diagramas de Flujo Representar el flujo del control del algoritmo:Representar el flujo del control del algoritmo: –secuencias –selección –Iteración Útil para:Útil para: –Encontrar errores semánticos –Determinar el conjunto de datos de pruebas

8 8 Secuencia (revisión) Series de instrucciones que se realizarán en un orden secuencial fijoSeries de instrucciones que se realizarán en un orden secuencial fijo Ejemplo 1:Ejemplo 1: Paso A: número de entrada Paso B: añadir 1 al número Paso C: número de salida

9 9 Diagramas de Flujo: Secuencia Paso A: número entrada Paso B: número + 1 Paso C: número salida Instrucción en una caja rectangular Orden de ejecución indicado por flechas Representado por instrucciones concatenadas (usualmente de forma vertical)

10 10 Paso A: número de entrada Paso B: si número es negativo, si número es negativo, Entonces sumar -1 a números sino sumar 1 al número Paso C: número de salida Ejemplo 2: un algoritmo involucra “selección” Paso A: número entrada Paso C: número salida Secuencia (cont)

11 11 Diagrama de Flujo: Selección Paso A if ( condición C1 ) { }else{ } Paso C Paso A C1 verdad? S2 Paso C S1 SI NO Flecha marcada con resultado de prueba condición Prueba de Condición en un diamante

12 12 entrada número si número es negativo, entonces sumar -1 a número ó añadir 1 a número salida con número introducir número es número negativo? sumar -1 a número SI NO sumar 1 a número número de salida Ejemplo: Algoritmo a Diag. Flujo

13 13 Diagrama de Flujo: Iteración (ciclo while) while ( condición C1 ) { } C1 verdad? S1 SI NO

14 14 Diagrama de Flujo: Iteración (ciclo for) for ( inicio ; condición C1 ; incremento ) { } C1 verdad? S1 SI NO inicio incremento

15 15 Cómo elegir que iteración usar? Sabes exactamente cuantas veces hay que ejecutar el ciclo?Sabes exactamente cuantas veces hay que ejecutar el ciclo? –Si la respuesta es afirmativa, use FOR Es posible que la secuencia nunca sea ejecutada?Es posible que la secuencia nunca sea ejecutada? Si la respuesta es afirmativa, use WHILE

16 16 Ejemplo: Código a Diag. Flujo (Vea el error!) for ( i=0; i<10; i++ ) { scanf(“%d\n”, &x); if ( x < 0 ) { break; } es i < 10 ? valor inicial de x SI NO poner i a 0 incremento i es x < 0 ? NOSI

17 17 Ejemplo: Código a Diag. Flujo (versión correcta) for ( i=0; i<10; i++ ) { scanf(“%d\n”, &x); if ( x < 0 ) { break; } es i < 10 ? valor inicial de x SI NO poner i a 0 incremento i es x < 0 ? NO SI

18 18 Algoritmo a Diagrama de Flujo Ejemplo: Sumar Números input totalNumeros poner suma to 0 poner contador a 0 mientras (contador < totalNumeros) { input siguienteNum sumar siguienteNum a suma sumar 1 a contador } salida “Suma es” suma salida “Media es” suma/contador valor inicial de totalNumeros poner suma a 0 poner contador a 0

19 19 es contador< totalNumeros? Algoritmo a Diagrama de Flujo Ejemplo: Sumar Números (cont) input totalNumeros poner suma a 0 poner contador a 0 mientras (contador < totalNumeros) { input siguienteNum sumar siguienteNum a suma sumar 1 to contador } salida “Suma es” suma salida “Media es” suma/contador valor inicial de siguienteNum SI NO incrementar contador sumar siguienteNum a suma

20 20 Algoritmo a Diag. de Flujo Ejemplo: SumarNumeros (cont) input totalNumeros poner suma a 0 poner contador a 0 mientras (contador < totalNumeros) { input siguienteNum sumar siguienteNum a suma sumar 1 a contador } salida “Suma es” suma salida “Media es” suma/contador valor de salida para suma valor de salida para suma/contador

21 21 Algoritmo a Diag. de Flujo Ejercicio: SumarNumeros (cont) input totalNumeros poner suma a 0 poner contador a 0 mientras (contador < totalNumeros) { input siguienteNum sumar siguienteNum a suma sumar 1 a contador } output “Suma es” suma output “Media es” suma/contador Qué tal si totalNumeros es cero?

22 22 Modificar el diagrama de flujo para añadir una verificación extra de modo que envie la media a output sólo cuando el contador es positivoModificar el diagrama de flujo para añadir una verificación extra de modo que envie la media a output sólo cuando el contador es positivo Algoritmo a Diag. de Flujo Ejercicio: SumarNumeros (cont)

23 23 Uso de Diagramas de Flujo Pseudo-código  diagrama de flujoPseudo-código  diagrama de flujo Diagrama de flujo  códigoDiagrama de flujo  código

24 24 Bases de Debugging Conocer el lenguaje (C, Fortran,…) bienConocer el lenguaje (C, Fortran,…) bien printf(“%d\n”, &num); Ejemplos: scanf(“%s”, &name); if (i < N); { scanf(“%d\n”, &i); } float x, y, z = 3.5; scanf(“%f”, x);

25 25 Poner atención a los errores del compilador y mensajes de advertenciaPoner atención a los errores del compilador y mensajes de advertencia Ejemplos: if (ch = ‘Q’) { break; } Bases de Debugging (cont) “Possible incorrect assignment” int N; … scanf(“%d”, N); “Possible use of ‘N’ before declaration”

26 26 Trazado Ejecución trazada de un programa:Ejecución trazada de un programa: –locación en el programa –estatus/contenido de variables Herramientas:Herramientas: –Ambiente de programación »E.g,. “step”, “breakpoints”, “watch” –Declaraciones de debugging »E.g., valores de output de las variables, marcadores en lugares específicos, etc

27 27 Ejemplo: Declaraciones de Debugging... for (i=0; i<N; i++) { scanf(“%s”, name); }

28 28 Ejemplo: Declaraciones de Debugging (cont) TIP: hacer declaraciones de debug condicionales sobre variable booleana const int debugging = 1;... for (i=0; i<N; i++) { scanf(“%s”, name); if (debugging) { printf("for: i=%d, name=%s\n", i, name); }

29 29 Ejemplo: Declaraciones debugging (alternativo) #define DEBUG 1 int main()... for (i=0; i<N; i++) { scanf(“%s”, name); #if DEBUG printf("for: i=%d, name=%s\n", i, name); #endif }

30 30 Técnicas de Prueba Datos de prueba deberán probar “completamente” al programaDatos de prueba deberán probar “completamente” al programa Todos los caminos lógicos del programa deberán ser caminados (i.e., cada línea del código deberán ser ejecutados una vez al menos)Todos los caminos lógicos del programa deberán ser caminados (i.e., cada línea del código deberán ser ejecutados una vez al menos) Use el diseño representado por el diagrama de flujoUse el diseño representado por el diagrama de flujo TIP: contruya programas incrementalmente, probando componentes pequeños en serie

31 31 Ejemplo: mejorCal Problema: Escribir un programa que lea una lista de calificaciones, e imprima la mejorEscribir un programa que lea una lista de calificaciones, e imprima la mejor Ejemplo:Ejemplo: –Input: 18 56 65 96 24 30 –Output: Mejor calificacion es 96

32 32 Ejemplo: mejorCal (cont) poner mejorCal a 0 loop{ input calificacion input calificacion if (fin de input) if (fin de input) then salir ciclo then salir ciclo } output “Mejor calificacion“, mejorCal Algoritmo

33 33 Ejemplo: mejorCal (cont) poner mejorCal a 0 loop{ input mark input mark if (end of input) if (end of input) then exit loop then exit loop if (calificacion > mejorCal) if (calificacion > mejorCal) then then { poner mejorCal a calificacion poner mejorCal a calificacion }} output “Mejor calificacion es“, mejorCal Algoritmo

34 34 Ejemplo: mejorCal (cont) Ejemplo: mejorCal (cont) poner mejorCal a 0 loop{ input calificacion input calificacion if (end of input) if (end of input) then salir loop then salir loop if (calificacion > mejorCal) if (calificacion > mejorCal) then then { poner mejorCal a calificacion poner mejorCal a calificacion }} output “Mejor calificacion“, mejorCal Algoritmo Cómo valido la entrada?

35 35 Clases de Datos de Prueba Datos válidosDatos válidos Datos válidos límitesDatos válidos límites Casos especiales o no usualesCasos especiales o no usuales Datos no válidosDatos no válidos

36 36 Datos de Prueba: Datos Válidos Datos razonables para el problemaDatos razonables para el problema Ejemplo: mejorCalEjemplo: mejorCal –Prueba de qué es? –Si la calificación es sobre 100, datos válidos de prueba son 75, 65, 55 75, 65, 55

37 37 D. P.: Datos Válidos Límites Datos con valores extremosDatos con valores extremos Ejemplo: mejorCalEjemplo: mejorCal –mínimo de 0 –máximo de 100 Condiciones de selección de pruebaCondiciones de selección de prueba Condiciones de salida de iteraciónCondiciones de salida de iteración Probar primer y último elementos de arregloProbar primer y último elementos de arreglo

38 38 Datos de Prueba: Casos Especiales Ejemplo: mejorCalEjemplo: mejorCal –Qué sucede si alguien se ausentó o la calificación no es correcta (consideración especial)? input calificacion if (calificacion es “Aus” o “CE”) { output “No calificacion para este estudiante” poner calificacion a 0 } else { poner calificacion a valor númerico de calificacion }

39 39 Datos de Entrada: Datos no validos Un dato no valido esUn dato no valido es –de un tipo no correcto, o –fuera del intervalo esperado Use las características del lenguaje de programación para asegurar el tipo correcto de datosUse las características del lenguaje de programación para asegurar el tipo correcto de datos –Ejemplo: mejorCal »calificación se puede restringir a un entero int mark; scanf(“%d”, &mark);

40 40 Datos de Prueba: Datos No Válidos (cont)... if ((mark 100)) { output “Calif debe estar entre 0 y 100” } input calificacion... poner mark a un valor numerico de calificacion if (no puedo tener numero de calificacion) { output “entrada no valida” }

41 41 loop { set mejorCal to 0 input markEntered if (end of input) break loop if ( markEntered is “Aus” or “CE” ) { output “No hay calificacion para este estudiante” } else { set mark a valor numerico de markEntered if (cannot get number from markEntered) { output “Invalid input” } else if ((mark 100)) { output “Mark tiene que estar entre 0 y 100” } else /* entrada valida! */ { if (mark > mejorCal) poner mejorCal a mark } output “Mejor Calificacion es “, mejorCal Algoritmo: mejorCal mejor1

42 42 Ejemplo int x,y; scanf("%d %d", &x, &y); if (x > 2) { while (x > y) while (x > y) { printf("S1,"); printf("S1,"); x--; x--; } printf("S2,"); printf("S2,");} else if (x < y) { printf("S3,"); printf("S3,");}printf("S4"); SI NO x>2? Input x,y NO output S2 x<y? output S4 SI output S3 NO SI x>y? output S1 decremento x

43 43 Ejemplo (cont) int x,y; scanf("%d %d", &x, &y); if (x > 2) { while (x > y) while (x > y) { printf("S1,"); printf("S1,"); x--; x--; } printf("S2,"); printf("S2,");} else if (x < y) { printf("S3,"); printf("S3,");}printf("S4"); SINO x>2? Input x,y

44 44 int x,y; scanf("%d %d", &x, &y); if (x > 2) { while (x > y) while (x > y) { printf("S1,"); printf("S1,"); x--; x--; } printf("S2,"); printf("S2,"); else if (x < y) { printf("S3,"); printf("S3,");}printf("S4"); SI NO x>2? Input x,y SI x>y? output S1 decremento x Ejemplo (cont)

45 45 int x,y; scanf("%d %d", &x, &y); if (x > 2) { while (x > y) while (x > y) { printf("S1,"); printf("S1,"); x--; x--; } printf("S2,"); printf("S2,");} else if (x < y) { printf("S3,"); printf("S3,");}printf("S4"); SI NO x>2? Input x,y x<y? output S4 SI output S3 NO SI x>y? output S1 decremento x Ejemplo (cont)

46 46 int x,y; scanf("%d %d", &x, &y); if (x > 2) { while (x > y) while (x > y) { printf("S1,"); printf("S1,"); x--; x--; } printf("S2,"); printf("S2,");} else if (x < y) { printf("S3,"); printf("S3,");}printf("S4"); SI NO x>2? Input x,y NO output S2 x<y? output S4 SI output S3 NO SI x>y? output S1 decremento x Ejemplo (cont)

47 47 Ejemplo (cont): Datos Válidos Qué líneas del código indican los datos válidos?Qué líneas del código indican los datos válidos? int x,y; scanf("%d %d\n", &x, &y); Datos Válidos son cualquier entero: – –positivo, – –negativo, o – –cero

48 48 Ejemplo (cont): Datos de prueba para todos los caminos lógicos Qúe hacemos para cada input?Qúe hacemos para cada input? int x,y; scanf("%d %d", &x, &y); if (x > 2) { while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y) { printf("S3,"); } printf("S4"); Qué decimos acerca de la salida ? S4 debe ser la salida al final de cada vez

49 49 int x,y; scanf("%d %d", &x, &y); if (x > 2) { while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y) { printf("S3,"); } printf("S4"); Ejemplo (cont): Datos de prueba para todos los caminos lógicos SI NO x>2? Input x,y NO output S2 x<y? output S4 output S3 NO SI x>y? output S1 decremento x HACER: Probar todos los caminos desde “Input” a “Salida S4”

50 50 Ejemplo (cont): Puntos elegidos SI NO x>2? Input x,y NO output S2 x<y? output S4 SI output S3 NO SI x>y? output S1 decremento x Trayectorias se determinan por puntos elegidos

51 51 Ejemplo (cont): Puntos elegidos Cuáles son los puntos elegidos de nivel más alto?Cuáles son los puntos elegidos de nivel más alto? int x,y; scanf("%d %d", &x, &y); if (x > 2) { while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y) { printf("S3,"); } printf("S4");

52 52 Ejemplo (cont): Puntos elegidos SI NO x>2? Input x,y NO output S2 x<y? output S4 output S3 NO SI x>y? output S1 decremento x int x,y; scanf("%d %d", &x, &y); if (x > 2) { while (x > y) while (x > y) { printf("S1,"); printf("S1,"); x--; x--; } printf("S2,"); printf("S2,");} else if (x < y) { printf("S3,"); printf("S3,");}printf("S4");

53 53 Ejemplo (cont): Puntos elegidos Datos de Prueba Caso 1: NO (x>2), NO (x<y) Output: S4 Valores específicos: x==2, y == 2 SI NO x>2? Input x,y NO output S2 x<y? output S4 SI output S3 NO SI x>y? output S1 decremento x

54 54 Ejemplo (cont): Puntos elegidos Datos Prueba Caso 2: NOT (x>2), x<y Output: S3, S4 Valores espcíficos: x==2, y == 3 SI NO x>2? Input x,y NO output S2 x<y? output S4 SI output S3 NO SI x>y? output S1 decremento x

55 55 Ejemplo (cont): Puntos elegidos int x,y; scanf("%d %d", &x, &y); if (x > 2) { while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y) { printf("S3,"); } printf("S4"); SI NO x>2? Input x,y NO output S2 x<y? output S4 SI output S3 NO SI x>y? output S1 decremento x

56 56 Ejemplo (cont): Puntos elegidos Datos de prueba Caso 3 (cuerpo ciclo no ejecutado): x > 2, NOT(x > y) Output: S2, S4 Valores específicos: x==3, y == 4 SI NO x>2? Input x,y NO output S2 x<y? output S4 SI output S3 NO SI x>y? output S1 decremento x

57 57 Ejemplo (cont): Puntos elegidos Datos de prueba Caso 4 (ejecución cuerpo de ciclo): x > 2, x > y Output: S1, S2, S4 Valores específicos: x==5, y == 4 SI NO x>2? entrada x,y NO output S2 x<y? output S4 SI output S3 NO SI x>y? output S1 decremento x

58 58 Notas sobre ciclos de prueba Es posible que un ciclo nunca termine?Es posible que un ciclo nunca termine? –sólo si el algoritmo es incorrecto Ejemplo:Ejemplo: while (x > y) { printf("S1,"); x++; } while (x > y) { printf("S1,"); x--; }

59 59 Ejercicio: Cambiando el Algoritmo /* Paso 1 */ while (x > 0) { /* Paso 2 */ if (y == 2) { /* Paso 2a */ } else { /* Paso 2b */ } /* Paso 3 */ } /* Paso 4 */ Cómo asegurar que el ciclo siempre termine?Cómo asegurar que el ciclo siempre termine? dado un conjunto de datos de prueba: válidos válidos límite no válidos

60 60 Sumario Probar es una parte importante de proceso de desarrollo del softwareProbar es una parte importante de proceso de desarrollo del software Considerar todos los casos de datos de prueba puede conducir a un cambio en el algoritmoConsiderar todos los casos de datos de prueba puede conducir a un cambio en el algoritmo Los Diagramas de Flujo se pueden usar para diseñar el conjunto de datos de pruebaLos Diagramas de Flujo se pueden usar para diseñar el conjunto de datos de prueba


Descargar ppt "1 Algoritmos y Programación Primavera de 2006 Javier M. Hernández FCFM Lectura 5: Diagramas de Flujo - Algoritmos B. Universidad Autónoma de Puebla."

Presentaciones similares


Anuncios Google