Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porAurora Blanco Coronel Modificado hace 10 años
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
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.