1. Diseño de Diagramas de Flujo DFD
1.1. DFD es un programa de libre disposición para ayuda al diseño e implementación de algoritmos expresados en diagramas de flujo (DF). Además incorpora opciones para el depurado de los algoritmos, lo que facilita enormemente la localización de los errores de ejecución y lógicos más habituales.
1.2. Su utilización es muy sencilla, al tratarse de una herramienta gráfica, y además incluye un menú de ayuda muy completo, por lo que en estas notas nos vamos a centrar en el uso básico de las herramientas de diseño y depuración.
1.3. https://www.youtube.com/watch?v=xSVN-sgsXUU
2. Diseño de Pseucódigo PSeInt
2.1. PSeInt es una herramienta para asistir a un estudiante en sus primeros pasos en programación. Mediante un simple e intuitivo pseudo lenguaje en español (complementado con un editor de diagramas de flujo), le permite centrar su atención en los conceptos fundamentales de la algoritmia computacional, minimizando las dificultades propias de un lenguaje y proporcionando un entorno de trabajo con numerosas ayudas y recursos didácticos.
2.1.1. https://youtu.be/DHIi4dcaMEc
3. Un algoritmo cuenta con un inicio y sus subprogramas llamados también diseño modular.
3.1. La función es una estructura autónoma similar a los módulos. La diferencia radica en que la función se usa para devolver un solo valor de un tipo de dato simple a su punto de referencia. La función se relaciona especificando su nombre en una expresión, como si fuera una variable ordinaria de tipo simple. Las funciones se dividen en estándares y definidas por el usuario.
3.2. Estándar: Son funciones proporcionadas por cualquier lenguaje de programación de alto nivel, y se dividen en aritméticas y alfabéticas.
3.3. Definidas por el usuario: son funciones que puede definirlas el programador con el propósito de ejecutar alguna función específica, y que por lo general se usan cuando se trata de hacer algún cálculo que será requerido en varias ocasiones en la parte principal del algoritmo.
4. Tecnicas de diseño de algoritmos
4.1. Algoritmos voraces (greedy): seleccionan los elementos más prometedores del conjunto de candidatos hasta encontrar una solución. En la mayoría de los casos la solución no es óptima. Algoritmos paralelos: permiten la división de un problema en subproblemas de forma que se puedan ejecutar de forma simultánea en varios procesadores. Algoritmos probabilísticos: algunos de los pasos de este tipo de algoritmos están en función de valores pseudoaleatorios. Algoritmos determinísticos: el comportamiento del algoritmo es lineal: cada paso del algoritmo tiene únicamente un paso sucesor y otro antecesor. Algoritmos no determinísticos: el comportamiento del algoritmo tiene forma de árbol y a cada paso del algoritmo puede bifurcarse a cualquier número de pasos inmediatamente posteriores, además todas las ramas se ejecutan simultáneamente. Divide y vencerás: dividen el problema en subconjuntos disjuntos obteniendo una solución de cada uno de ellos para después unirlas, logrando así la solución al problema completo. Metaheurísticas: encuentran soluciones aproximadas (no óptimas) a problemas basándose en un conocimiento anterior (a veces llamado experiencia) de los mismos. Programación dinámica: intenta resolver problemas disminuyendo su coste computacional aumentando el coste espacial. Ramificación y acotación: se basa en la construcción de las soluciones al problema mediante un árbol implícito que se recorre de forma controlada encontrando las mejores soluciones. Vuelta atrás (backtracking): se construye el espacio de soluciones del problema en un árbol que se examina completamente, almacenando las soluciones menos costosas.
5. Diseño de algoritmos
5.1. El diseño de un algoritmo implica la representación de las instrucciones en orden lógico. Para la representación se utilizan herramientas de diagramación con figuras o con texto. Para la representación de un algoritmo se puede utilizar diagrama de flujo o pseudocódigo.
6. Conceptos basicos
6.1. Algoritmo. Se puede entender un algoritmo como una secuencia de pasos finitos bien definidos que resuelven un problema.
6.1.1. Algoritmos Cualitativos Son los algoritmos descritos o representados por medio de palabras Algoritmos Cuantitativos Son los algoritmoAlgoritmos s descritos o representados por medio de cálculos numéricos.
6.1.1.1. Programa Conjunto de instrucciones lógicas representadas en un lenguaje para resolver un problema por computadora
6.1.1.1.1. PROGRAMA FUENTE:Algoritmo escrito en un lenguaje de alto nivel como COBOL, PASCAL, C, PYTHON, entre otros, no es ejecutable por la computadora
6.1.1.1.2. PROGRAMA OBJETO:Algoritmo escrito en un lenguaje de máquina (ceros y unos), ejecutable por la computadora.
6.1.1.1.3. PROGRAMACION:Se refiere a la acción de crear programas o aplicaciones a través del desarrollo de un código fuente, que se basa en el conjunto de instrucciones que sigue el ordenador para ejecutar un programa. La programación es lo que permite que un ordenador funcione y realice las tareas que el usuario solicita.
7. Tipos de datos
7.1. Los datos simples, ocupan una sola casilla de memoria, por tanto, una variable simple hace referencia a un único valor a la vez. Dentro de ese grupo de datos se encuentran: enteros, reales, caracteres y booleanos.
7.2. Los datos estructurados, se caracterizan por el hecho de que con un nombre (identificador de variable estructurada) se hace referencia a un grupo de casillas de memoria. Es decir, un dato estructurado tiene varios componentes (pueden ser datos simples o estructurados).
7.3. CONSTANTES:Es todo aquel valor que no puede cambiar en el desarrollo de un algoritmo y son introducidos al algoritmo siempre en el momento de utilizarse.
7.4. VARIABLES:Es todo aquel valor que puede o no cambiar en el transcurso de un algoritmo. Generalmente son introducidas al algoritmo como datos.
7.5. DIAGRAMAS DE FLUJO:Los diagramas de flujo son una herramienta que permite representar visualmente qué operaciones se requieren y en qué secuencia se deben efectuar para solucionar un problema dado.
7.5.1. Los diagramas de flujo desempeñan un papel vital en la programación de un problema, ya que facilitan la comprensión de problemas complicados y sobre todo aquellos en que sus procesos son muy largos; generalmente, los diagramas de flujo se dibujan antes de comenzar a programar el código fuente, que se ingresará posteriormente a la computadora.
7.5.2. Los diagramas de flujo facilitan la comunicación entre los programadores y los usuarios, además de que permiten de una manera más rápida detectar los posibles errores de lógica que se presenten al implementar el algoritmo.