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.

Slides:



Advertisements
Presentaciones similares
Capítulo 2 Algoritmos.
Advertisements

Unidad 1 DISEÑO DE ALGORITMOS ING. Nelwi Baez. MSC
Estructuras de Repetición Algoritmos
Programación Estructurada
Lenguajes de programación
Iteración La iteración permite modelar problemas en los cuales una secuencia de instrucciones debe ejecutarse varias veces. La cantidad de iteraciones.
Te presento a Python Qué es Python? Lenguaje interpretado
Seminario de Actualización - Excel Avanzado y Macros
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Estructuras de Control
Técnico en programación de Software
Ciclo de desarrollo del software
1.5 Algoritmos, Pseudocódigo y Diagramas de Flujo
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Concepto de programa. Directorio Concepto de programa. Analisis del problema. Resolucion del problema. Desarroollo de un programa. Partes constitutivas.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Curso de Programación I Parte III
CICLOS EN C.
DSUPE Pseudocódigo.
Una breve introducción
Estructuras de Repetición
PARADIGMA Es un esquema de pensamiento que nos lleva a concebir las cosas de una manera determinada. el término paradigma puede indicar el concepto de esquema.
METODOLOGIA DE LA PROGRAMACION

ESTRUCTURAS DE CONTROL
ESTRUCTURAS CONTROL SECUENCIAL
Programación de Computadores
Academia de Informática
Estructuras de Iteracion (Repetitivas ) while , for,, do-while
Programación en Matlab
CI TEORIA semana 4 Estructura Algorítmica: SELECCIÓN
Análisis de Algoritmos
Introducción al análisis de algoritmos
Capítulo 1 “Elementos de Programación”
Conversión cadena a número
Introducción a la Programación
Capítulo 2 – Estructuras de Control
WHILE Estructuras Repetitivas
ESTRUCTURA DE DECISION LOGICA
Introducción al lenguaje de programación SLE 2
Ciclos (Loops, Repeticiones) Permiten ejecutar una secuencia de sentencias mas de una vez. Hay 2 tipos de loops:  WHILE repite la acción un número indefinido.
Juego de Preguntas y Respuestas
Teoría – Alejandro Gonzalez
Introducción a la Ingeniería de Sistemas
Algoritmo: es un método para resolver un problema mediante una serie de pasos definidos, precisos y finitos.
PENSAMIENTO ANALÍTICO SISTÉMICO DAISY KATERINE RODRÍGUEZ DURÁN
Control de Flujo.
Programación 1 (01y 05) Prof. Flor Narciso
ALGORITMOS La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió.
Estructuras de Repetición (Hacer-Mientras)
Sentencias de repetición
Representación de Algoritmos
Estructuras de Repetición (Hacer-Mientras)
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
Sesión 13: Python (4) – Estructura Repetición. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática.
Lógica Computacional.
Operadores Lógicos Y (Conjunción): Tanto P como Q (Ambas). O (Disyunción): Puede ser que P o Q o ambas (mínimo 1)
Elaboración de algoritmos usando lógica de programación
TIPOS DE PRUEBAS DEL SOFTWARE
1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)
ESTRUCTURAS REPETITIVAS
Estructuras de Decisión
2011/1 - CLASE 12. AGENDA 1 Introducción 2 Sentencia while 3 Sentencia for 14 Sentencia do-while 5 Instrucciones Especiales 6 Ciclos anidados.
CICLOS EN C – PARTE 3.
Ciclo de desarrollo del software
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
Tema 8: Programación estructurada Introducción La importancia del conocimiento de programación es mucho mayor de lo que se piensa. Aprender a programar.
ESTRUCTURAS SELECTIVAS Elaborado por; Ing. Alberto Pérez.
ALGORITMOS Asignatura: Informática. Algoritmos Conjunto de instrucciones ordenadas de forma lógica y precisa, con un inicio y fin que permite resolver.
Transcripción de la presentación:

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 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 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 Ciclo de Desarrollo AnálisisDiseñoImplementarProbar debugging y pruebas

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 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 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 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 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 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 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 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 Diagrama de Flujo: Iteración (ciclo while) while ( condición C1 ) { } C1 verdad? S1 SI NO

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

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 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 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 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 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 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 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 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 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 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 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 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 Ejemplo: Declaraciones de Debugging... for (i=0; i<N; i++) { scanf(“%s”, name); }

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 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 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 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: –Output: Mejor calificacion es 96

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