unidad2teoria

10
INSTITUTO TECNOLOGICO DE AGUASCALIENTES DEPARTAMENTO DE INGENIERIA INDUSTRIAL ALGORITMOS Y LENGUAJES DE PROGRAMACION UNIDAD 2.- DIAGRAMAS DE FLUJO. MAESTRO: ING. LUIS HUMBERTO LOPEZ PEREZ. UNIDAD 2.- Desarrollo de Lógica Algorítmica. 2.1. Metodología para la solución de problemas. Definición del Problema: Esta fase está dada por el enunciado del problema, el cual requiere una definición clara y precisa. Es importante que se conozca lo que se desea que realice la computadora; mientras esto no se conozca del todo no tiene mucho caso continuar con la siguiente etapa. Análisis del Problema: Una vez que se ha comprendido lo que se desea de la computadora, es necesario definir: Los datos de entrada. Cuál es la información que se desea producir (salida) Los métodos y fórmulas que se necesitan para procesar los datos. Una recomendación muy práctica es el que nos pongamos en el lugar de la computadora y analicemos que es lo que necesitamos que nos ordenen y en que secuencia para producir los resultados esperados. Diseño del Algoritmo: Las características de un buen algoritmo son: Debe tener un punto particular de inicio. Debe ser definido, no debe permitir dobles interpretaciones. Debe ser general, es decir, soportar la mayoría de las variantes que se puedan presentar en la definición del problema. Debe ser finito en tamaño y tiempo de ejecución. Codificación: La codificación es la operación de escribir la solución del problema (de acuerdo a la lógica del diagrama de flujo o pseudocodigo), en una serie de instrucciones detalladas, en un código reconocible por la computadora, la Unidad 2.- Diagramas de Flujo. Curso agosto-diciembre del 2014

Upload: karen-perez-olvera

Post on 05-Dec-2015

212 views

Category:

Documents


0 download

DESCRIPTION

Desarrollo de Lógica Algorítmica

TRANSCRIPT

Page 1: UNIDAD2TEORIA

INSTITUTO TECNOLOGICO DE AGUASCALIENTESDEPARTAMENTO DE INGENIERIA INDUSTRIAL

ALGORITMOS Y LENGUAJES DE PROGRAMACIONUNIDAD 2.- DIAGRAMAS DE FLUJO.

MAESTRO: ING. LUIS HUMBERTO LOPEZ PEREZ.UNIDAD 2.- Desarrollo de Lógica Algorítmica.

2.1. Metodología para la solución de problemas.

Definición del Problema: Esta fase está dada por el enunciado del problema, el cual requiere una definición clara y precisa. Es importante que se conozca lo que se desea que realice la computadora; mientras esto no se conozca del todo no tiene mucho caso continuar con la siguiente etapa.

Análisis del Problema: Una vez que se ha comprendido lo que se desea de la computadora, es necesario definir:

Los datos de entrada. Cuál es la información que se desea producir (salida) Los métodos y fórmulas que se necesitan para procesar los datos.

Una recomendación muy práctica es el que nos pongamos en el lugar de la computadora y analicemos que es lo que necesitamos que nos ordenen y en que secuencia para producir los resultados esperados. Diseño del Algoritmo: Las características de un buen algoritmo son:

Debe tener un punto particular de inicio. Debe ser definido, no debe permitir dobles interpretaciones. Debe ser general, es decir, soportar la mayoría de las variantes que se puedan

presentar en la definición del problema. Debe ser finito en tamaño y tiempo de ejecución.

Codificación: La codificación es la operación de escribir la solución del problema (de acuerdo a la lógica del diagrama de flujo o pseudocodigo), en una serie de instrucciones detalladas, en un código reconocible por la computadora, la serie de instrucciones detalladas se le conoce como código fuente, el cual se escribe en un lenguaje de programación o lenguaje de alto nivel.

Prueba y Depuración: Los errores humanos dentro de la programación de computadoras son muchos y aumentan considerablemente con la complejidad del problema. El proceso de identificar y eliminar errores, para dar paso a una solución sin errores se le llama depuración. La depuración o prueba resulta una tarea tan creativa como el mismo desarrollo de la solución, por ello se debe considerar con el mismo interés y entusiasmo. Resulta conveniente observar los siguientes principios al realizar una depuración, ya que de este trabajo depende el éxito de nuestra solución.

Documentación: Es la guía o comunicación escrita es sus variadas formas, ya sea en enunciados, procedimientos, dibujos o diagramas. A menudo un programa escrito por una persona, es usado por otra. Por ello la documentación sirve para ayudar a

Unidad 2.- Diagramas de Flujo. Curso agosto-diciembre del 2014

Page 2: UNIDAD2TEORIA

comprender o usar un programa o para facilitar futuras modificaciones (mantenimiento). La documentación se divide en tres partes:

Documentación Interna: Son los comentarios o mensaje que se añaden al código fuente para hacer más claro el entendimiento de un proceso.

Documentación Externa: Se define en un documento escrito los siguientes puntos:

o Descripción del Problema o Nombre del Autor o Algoritmo (diagrama de flujo o pseudocodigo) o Diccionario de Datos o Código Fuente (programa)

Manual del Usuario: Describe paso a paso la manera cómo funciona el programa, con el fin de que el usuario obtenga el resultado deseado.

Mantenimiento: Se lleva a cabo después de terminado el programa, cuando se detecta que es necesario hacer algún cambio, ajuste o complementación al programa para que siga trabajando de manera correcta. Para poder realizar este trabajo se requiere que el programa este correctamente documentado.

2.2. Metodología para el diseño de software: Top down, Bottom up, modular y Programación estructurada.

Técnicas de Diseño Modular

Las siguientes técnicas se derivan directamente de la Programación Modular.

Método Descendente (Top-Down)

También conocido como de arriba a abajo consiste en establecer una serie de niveles de mayor a menor complejidad que den solución al problema. Luego se crea una relación entre las etapas de la estructuración de forma que una etapa jerárquica y su inmediato inferior se relacionen mediante una interfaz claramente definida de entradas y salidas de información.

El Top-Down es muy popular por ser metodológico para la enseñanza de la programación, por favorecer la rápida creación de una estructura de diseño inicial flexible y fácil de comprender y por ser muy útil en la solución de problemas complejos.

Método Ascendente (Bottom-Up)

El diseño ascendente se refiere a la identificación de aquellos procesos que necesitan computarizarse conforme vayan apareciendo, su análisis como sistema y su codificación, o bien, la adquisición de paquetes de software para satisfacer el problema inmediato.

Cuando la programación se realiza internamente y se hace un enfoque ascendente, es difícil llegar a integrar los subsistemas al grado tal de que el desempeño global sea fluido. Los problemas de integración entre los subsistemas son sumamente costosos y muchos de ellos no se solucionan hasta que la programación alcanza la fecha límite para

Unidad 2.- Diagramas de Flujo. Curso agosto-diciembre del 2014

Page 3: UNIDAD2TEORIA

la integración total del sistema. En esta fecha, ya se cuenta con muy poco tiempo, presupuesto o paciencia de los usuarios, como para corregir aquellas delicadas interfaces, que en un principio, se ignoran.

Aunque cada subsistema parece ofrecer lo que se requiere, cuando se contempla al sistema como una entidad global, éste padece de ciertas limitaciones por haber tomado un enfoque ascendente. Una de ellas es la duplicación de esfuerzos para accesar el software y más aún al introducir los datos. Otro es que se introducen al sistema muchos datos carentes de valor. Un tercero y tal vez el más serio inconveniente del enfoque ascendente, es que los objetivos globales de la organización no fueron considerados y en consecuencia no se satisfacen. Sobra decir que esta técnica de diseño es la menos usada por sus múltiples inconvenientes.

La programación estructurada es una forma de escribir programas de ordenador (programación de computadora) de manera clara. Para ello utiliza únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN.

A finales de los años 1960 surgió una nueva forma de programar que no solamente daba lugar a programas fiables y eficientes, sino que además estaban escritos de manera que facilitaba su comprensión posterior.

El teorema del programa estructurado, demostrado por Böhm-Jacopini, demuestra que todo programa puede escribirse utilizando únicamente las tres instrucciones de control siguientes:

Secuencia Instrucción condicional. Iteración (bucle de instrucciones) con condición al principio.

Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles. Si bien los lenguajes de programación tienen un mayor repertorio de estructuras de control, éstas pueden ser construidas mediante las tres básicas.

Estructura secuencial

Una estructura de programa es secuencial si se ejecutan una tras otra a modo de secuencia, es decir que una instrucción no se ejecuta hasta que finaliza la anterior.

Estructura selectiva o de selección

La estructura selectiva permite que la ejecución del programa se bifurque a una instrucción u otra según un criterio o condición lógica, solo una de estas instrucciones se ejecutará.

Unidad 2.- Diagramas de Flujo. Curso agosto-diciembre del 2014

Page 4: UNIDAD2TEORIA

Estructura iterativa

Un bucle iterativo o iteración de una secuencia de instrucciones, hace que se repitan mientras se cumpla una condición, en un principio el número de iteraciones no tiene por qué estar determinado.

Ventajas de la programación estructurada

1. Los programas son más fáciles de entender, ya que pueden ser leídos de forma secuencial, sin necesidad de hacer seguimiento a saltos de línea (GOTO) dentro de los bloques de código para entender la lógica.

2. La estructura del programa es clara, puesto que las instrucciones están más ligadas o relacionadas entre sí.

3. Reducción del esfuerzo en las pruebas. El seguimiento de los fallos o errores del programa ("debugging") se facilita debido a la estructura más visible, por lo que los errores se pueden detectar y corregir más fácilmente.

4. Reducción de los costos de mantenimiento de los programas.

5. Programas más sencillos y más rápidos (ya que es más fácil su optimización).

6. Los bloques de código son auto explicativos, lo que facilita la documentación.

7. Los GOTO se reservan para construir las instrucciones básicas. Aunque no se usan de forma directa, por estar prohibida su utilización, están incluidas implícitamente en las instrucciones de selección e iteración.

8. Un programa escrito de acuerdo a estos principios no solamente tendrá una mejor estructura sino también una excelente presentación.

La programación estructurada ofrece estos beneficios, pero no se la debe considerar como una panacea ya que el desarrollo de programas es, principalmente, una tarea de dedicación, esfuerzo y creatividad.

Inconvenientes de la programación estructurada

El principal inconveniente de este método de programación es que se obtiene un único bloque de programa, que cuando se hace demasiado grande puede resultar problemático su manejo; esto se resuelve empleando la programación modular, definiendo módulos interdependientes programados y compilados por separado (en realidad esto no es necesario, pero es recomendable para su mantenimiento y funcionalidad).

En realidad, cuando se programa hoy en día (inicios del siglo XXI) se suelen utilizar, tanto las técnicas de programación estructurada como las de programación modular, de forma conjunta y por lo tanto es posible que cuando uno haga referencia a la programación estructurada esté considerando también las técnicas de modularización.

Unidad 2.- Diagramas de Flujo. Curso agosto-diciembre del 2014

Page 5: UNIDAD2TEORIA

Un método un poco más sofisticado es la programación por capas, en la que los módulos tienen una estructura jerárquica en la que se pueden definir funciones dentro de funciones o de procedimientos.

2.3. Definición de lenguajes algorítmicos. Definición de Algoritmo. “Un algoritmo se define como un método que se realiza paso a paso para solucionar un problema que termina en un número finito de pasos”. Las características fundamentales que debe cumplir todo algoritmo son: Debe ser preciso. E indicar el orden de realización de cada paso. Debe ser definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez. Debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento; o sea debe tener un número finito de pasos.

La definición de un algoritmo debe describir tres partes: Entrada, Proceso y Salida.

2.3.1 Elementos y reglas de la representación gráfica y manuscrita de los algoritmos (diagrama de flujo, diagrama N-S, diagrama estructurado y pseudocódigo.

DIAGRAMAS DE NASSI - SCHNEIDERMAN

Definición. El diagrama N-S o también conocido como diagrama de Chapín es una

técnica de especificación de algoritmos que combina la descripción textual, propia del

pseudocódigo, con la representación gráfica del diagrama de flujo.

El diagrama N-S cuenta con un conjunto limitado de símbolos para representar los

pasos del algoritmo, por ello se apoya en expresiones del lenguaje natural; sin embargo,

dado que el lenguaje natural es muy extenso y se presta para la ambigüedad, solo se

utiliza un conjunto de palabras, a las que se denomina palabras reservadas. Las palabras

reservadas más utilizadas son:

Inicio FinLeerEscribirMientrasRepitaHastaParaIncrementarDecrementarHacerFuncionEnteroRealCaracterCadenaLogicoRetornar

Los símbolos utilizados en el diagrama de Chapín corresponden a cada tipo de estructura. Dado que se tienen tres tipos de estructuras, se utilizan tres símbolos. Esto hace que los procesos del algoritmo sean fáciles de representar y de interpretar.

Un pseudocódigo (falso lenguaje), es una serie de normas léxicas y gramaticales parecidas a la mayoría de los lenguajes de programación, pero sin llegar a la rigidez de sintaxis de estos ni a la fluidez del lenguaje coloquial. Esto permite codificar un programa con mayor agilidad que en cualquier lenguaje de programación, con la misma validez semántica, normalmente se utiliza en las fases de análisis o diseño de Software,

Unidad 2.- Diagramas de Flujo. Curso agosto-diciembre del 2014

Page 6: UNIDAD2TEORIA

o en el estudio de un algoritmo. Forma parte de las distintas herramientas de la ingeniería de software. El pseudocódigo describe un algoritmo utilizando una mezcla de frases en lenguaje común, instrucciones de programación y palabras clave que definen las estructuras básicas. Su objetivo es permitir que el programador se centre en los aspectos lógicos de la solución a un problema. No siendo el pseudocódigo un lenguaje formal, varían de un programador a otro, es decir, no hay una estructura semántica ni arquitectura estándar. Es una herramienta ágil para el estudio y diseño de aplicaciones, veamos un ejemplo, que podríamos definir como: lenguaje imperativo, de tercera generación, según el método de programación estructurada

2.3.2 Implementación de algoritmos secuenciales (utilizando notación algebraica)

Un algoritmo puede adoptar una de las estructuras siguientes o combinaciones de ellas: lineal o secuencial, alternativa o selectiva y repetitiva o cíclica.

La más sencilla de las tres es la lineal, también llamada secuencial que se caracteriza porque todos los pasos del algoritmo se realizan en secuencia, es decir, se suceden uso a otros.

Un ejemplo de esta estructura es el algoritmo que lea cuatro variables y calcule e imprime su producto, suma y media aritmética.

InicioLeer (a, b, c, d)Producto <-- (a * b * c * d)suma <-- (a + b + c + d)media <-- (a + b + c + d) / 4Escribir (producto, suma, media)Fin

Unidad 2.- Diagramas de Flujo. Curso agosto-diciembre del 2014

Page 7: UNIDAD2TEORIA

2.4. Pruebas y depuración.

Una vez que se ha construido o escrito un programa en algún lenguaje de programación, se requiere desarrollar un procedimiento sistemático para establecer si se trata de un programa correcto.

Los pasos básicos de tal procedimiento sistemático son los siguientes: Prueba y demostración.

Un buen programador debe pensar en desarrollar un conjunto de casos prueba, junto con su código. Un caso prueba es un conjunto de datos de entrada que junto con el programa produce una salida conocida de antemano, con los cuales se puede evaluar la funcionalidad y factibilidad del programa. Si el programa pasa todos los casos prueba, entonces podemos considerar que el programa es correcto.

Los casos prueba se deben considerar, como se dijo, al momento de hacer la codificación del programa. Por ejemplo, un programa que vaya a realizar algunas operaciones aritméticas deberá considerar la aparición de valores que probablemente le causen problemas como divisiones por cero o aproximaciones numéricas, ambos casos se deben tomar en cuenta y por lo tanto se deberá incluir en el programa la solución a este tipo de problemas se acaso se presenta.

Como la computación aún es una ciencia empírica, el diseño de casos prueba dependerá del conocimiento que el programador tenga sobre el problema. Puede darse el caso de que no se consideren todos los posibles problemas que puedan afectar la ejecución de un programa y es entonces cuando empieza la etapa de mantenimiento del software.

Unidad 2.- Diagramas de Flujo. Curso agosto-diciembre del 2014