“Año de la Diversificación y del Fortalecimiento de la Educación”. INSTITUCIÓN EDUCATIVA:
“I.E PNP FELIX TELLO ROJAS”
Docente: NÈRITA TARRILLO DAVILA
CURSO: EDUCACIÒN PARA EL TRABAJO
ALUMNAS: ASTRID VIDARTE PINTADO YOFELY SEMINARIO PARIHUAMAN MARY ELENA TORRES SANTACRUZ ANTHUANET MOROCHO RIVERA
GRADO:
4to A
Presentación Este manual contiene apuntes explicativos de todo los temas que hemos ido trabajando. También contiene diferentes puntos de vista de varios autores para así poder conocer más sobre estos temas que son muy importantes. Al curso de algoritmos nos parece muy interesante ya que este, es teórico-práctico lo cual nos permite poner en práctica lo aprendido en el aula virtual, esto nos convierte en personas competentes contribuyendo a una excelente formación profesional.
Dedicatoria:
*A nuestros padres por su apoyo incondicional. *A Dios por darnos salud a nosotras y a nuestras familias. *A nuestra profesora que nos ha inculcado buenas ense帽anzas y nos ha dado parte de su intelecto. Por su compromiso durante nuestra formaci贸n con respeto y paciencia.
Índice 1.
“Año de la Diversificación y del Fortalecimiento de la Educación”.
2.
Presentación
3.
Dedicatoria.
4.
Índice.
5.
1 sesión: Conociendo Algoritmos.
6.
2ª sesión: Entidades primitivas para el desarrollo de un algoritmo.
7.
3 sesión: Constantes, variables y expresiones.
8.
4ª sesión: Técnicas de diseño.
9.
5ª sesión: Pseucodigos.
10.
6ª sesión: Técnicas para la formulación de algoritmos. Diagrama de flujo.
11.
7ª sesión: Pseudocódigo, diagramas estructurados y estructuras algorítmicas.
12.
8º sesión: Estructuras condicionales.
13.
9ª sesión: Estructuras cíclicas.
14.
10ª sesión: Estructuras secuenciales.
15.
11ª sesión: Algoritmo de ordenamiento.
16.
12ª sesión: Algoritmo de búsqueda.
17.
13ª sesión: Algoritmos, complejidad y aplicaciones.
18.
Conclusión.
19.
Bibliografía.
Definición: Se Define algoritmo como un conjunto ordenado y finito de operaciones que permite hallar la solución de un problema. Método y notación en las distintas fórmulas del cálculo. El algoritmo constituye un método para resolver un problema mediante una secuencia de pasos a seguir. Dicha secuencia puede ser expresada en forma de diagrama de flujo con el fin de seguirlo de una forma más sencilla. De acuerdo con el concepto anterior, el algoritmo podría estar incluido en la definición de programa de ordenador de la Ley de Propiedad Intelectual (TRLPI), al referirse a éste como toda secuencia de instrucciones o indicaciones destinadas a ser utilizadas, directa o indirectamente, en un sistema informático para realizar una función o una tarea o para obtener un resultado determinado, cualquiera que fuere su forma de expresión y fijación.
¿QUÉ ES ALGORITMO? 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ó un tratado sobre manipulación de números y ecuaciones en el siglo IX.
Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir, para dar solución a un problema específico.
Además: En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador por parte de su patrón. Algunos ejemplos
en matemática son el algoritmo de multiplicación, para calcular el producto, el algoritmo de la división para calcular el cociente de dos números, el algoritmo de Euclides para obtener el máximo común divisor de dos enteros positivos, o el método de Gauss para resolver un sistema de ecuaciones lineales.
El desarrollo de algoritmos es un tema fundamental en el diseño de programas o soluciones. Por lo cual, el alumno debe tener buenas bases que le sirvan para poder crear de manera fácil y rápida sus programas. La siguiente documentación pueden servir de apoyo a tutores o profesores, en su labor cotidiana de enseñanza y al estudiante, facilitarle el desarrollo de su capacidad analítica y creadora, para de esta manera mejorar su destreza en la elaboración de algoritmos que sirven
como base para la codificación de los diferentes programas que tendrá que desarrollar a lo largo de su carrera.
¿TIPOS DE ALGORITMOS…? Existen dos tipos y son llamados así por su naturaleza:
Cualitativos: Son aquellos en los que se describen los pasos utilizando palabras.
Cuantitativos: Son aquellos en los que se utilizan cálculos numéricos para definir los pasos del proceso. Lenguajes Algorítmicos Un Lenguaje algorítmico es una serie de símbolos y reglas que se utilizan para describir de
manera explícita un proceso.
Tipos de Lenguajes Algorítmicos
Gráficos: Es la representación gráfica de las operaciones que realiza un
algoritmo (diagrama de flujo).
No Gráficos: Representa en forma descriptiva las operaciones que debe
realizar un algoritmo (pseudocódigo). INICIO Edad: Entero ESCRIBA “cuál es tu edad?” Lea Edad SI Edad >=18 entonces ESCRIBA “Eres mayor de Edad” FINSI ESCRIBA “fin del algoritmo” FIN
Metodología para la creación de algoritmos Ahora que ya sabemos qué es un algoritmo, vamos a estudiar la metodología para la solución de un problema mediante un ordenador. La creación de un algoritmo y su programación es una etapa, pero como programador debes realizar varios pasos antes y después. El computador es una máquina que por sí sola no puede hacer nada, necesita ser programada, es decir, introducirle instrucciones u órdenes que le digan lo que tiene que hacer. Un programa es la solución a un problema inicial, así que todo comienza allí: en el Problema. El proceso de programación es el siguiente: Dado un determinado problema el programador debe idear una solución y expresarla usando un algoritmo (aquí es donde entra a jugar); luego
de esto, debe codificarlo en un determinado lenguaje de programación y por último ejecutar el programa en el computador el cual refleja una solución al problema inicial. Esto es a grandes rasgos lo que hace el programador de computadores. La parte que corresponde a este manual es la de: “Dado un determinado problema debemos idear una solución y expresarla usando un ALGORITMO!”.
Metodología para la solución de problemas por medio de computadora
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: o
Los datos de entrada.
o
Cuál es la información que se desea producir (salida)
o
Los métodos y fórmulas que se necesitan para procesar los datos. Una recomendación muy práctica es el de colocarse en el lugar de la computadora y analizar qué es lo que se necesita que se ordene y en qué 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.
Diseño del Algoritmo
Prueba de escritorio o Depuración
Se denomina prueba de escritorio a la comprobación que se hace de un algoritmo para saber si está bien hecho. Esta prueba consiste en tomar datos específicos como entrada y seguir la secuencia indicada en el algoritmo hasta obtener un resultado, el análisis de estos resultados
indicará si el algoritmo está correcto o si por el contrario hay necesidad de corregirlo o hacerle ajustes.
CARACTERISTICAS DE LOS ALGORITMOS
Las características fundamentales que debe cumplir todo algoritmo son: Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.
Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez.
Un algoritmo debe ser finito. el algoritmo se debe terminar en algún momento; o sea, debe tener un número finito de pasos.
Un algoritmo debe ser legibles: El texto que lo describe debe ser claro, tal que permita entenderlo y leerlo fácilmente.
Un algoritmo debe definir tres partes: Entrada, Proceso y Salida. Ejemplo: el algoritmo de receta de cocina se tendrá:
Entrada: ingrediente y utensilios.
Proceso: elaboración de la receta en la cocina.
Salida: terminación del plato (por ejemplo, Pollo al horno) Todo algoritmo debe tener las siguientes características:
Tener un punto de inicio. Un algoritmo debe ser definido, no tiene que permitir una interpretación doble. Un algoritmo debe ser general, es decir que pueda soportar la mayoría de los cambios que se presenten para solucionar el problema Un algoritmo debe ser finito en tamaño y tiempo de ejecución. Proceder al diseño del Algoritmo Prueba de escritorio o Depuración
PROPIEDADES DE UN ALGORITMO Las propiedades de un algoritmo son puntos guías a seguir para su elaboración, ya que éstos permiten un mejor desarrollo del problema. 1. Enunciado del problema. El enunciado del problema debe de ser claro y completo. Es
importante que conozcamos exactamente lo que deseamos que haga el computador. Mientras esto no se comprenda, no tiene caso pasar a la siguiente etapa. 2. Análisis de la solución general. Entendido el problema, para resolverlo es preciso analizar:
Los datos de entradas que nos suministran.
El proceso al que se requiere someter esos datos a fin de obtener los resultados esperados.
Los datos o resultados que se esperan.
Áreas de trabajo, fórmulas y otros recursos necesarios. Definir condiciones si las hay
Diferentes alternativas de solución. Analizando el problema, posiblemente tengamos varias formas de resolverlo. Lo importante es
determinar cuál es la mejor alternativa: la que produce los resultados esperados en el menor tiempo. 3. Elaboración Del Algoritmo
Los conocimientos adquiridos anteriormente son las herramientas necesarias para llevar a
cabo la elaboración de un algoritmo a través de un problema. Se recomienda tomar en cuenta cada una de las propiedades de un algoritmo, ya que de ahí se inicia el proceso de elaboración. EJEMPLO DE ALGORITMO FREIR UN HUEVO.
Abre el gas
Partir el huevo
Enciende el fogón
Colocar dentro del sartén
Poner el sartén a calentar
Esperar tres minutos.
Echar aceite en el sartén
Y listo
PARTES DE UN ALGORITMO: Todo
Algoritmo debe tener las siguientes partes:
· Entrada de datos, son los datos necesarios que el algoritmo necesita para ser ejecutado.
· Proceso, es la secuencia de pasos para ejecutar el algoritmo. · Salida de resultados, son los datos obtenidos después de la ejecución del algoritmo.
Ejemplos
Para el proceso de Algoritmos es necesario aprender a desarrollar un conjunto de elementos. Todos estos elementos con los cuales se construyen dichos algoritmos se basan en una disciplina llamada: Programación Estructurada. Empecemos por conocer las reglas para cambiar fórmulas matemáticas a expresiones válidas para la computadora, además de diferenciar constantes e identificadores y tipos de datos simples. Tipos De Datos
Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carácter, tal como ‘b’, un valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto de valores que puede tomar una variable.
Tipos de Datos Simples Datos Numéricos:
Permiten representar valores escalares de forma numérica, esto incluye a los números enteros y los reales. Este tipo de datos permiten realizar operaciones aritméticas comunes. Datos lógicos:
Son aquellos que solo pueden tener dos valores (cierto o falso) ya que representan el resultado de una comparación entre otros datos (numéricos o alfanuméricos). Datos alfanuméricos (string):
Es una secuencia de caracteres alfanuméricos que permiten representar valores identificables de forma descriptiva, esto incluye nombres de personas, direcciones, etc. Es posible representar números como alfanuméricos, pero estos pierden su propiedad matemática, es decir no es posible hacer operaciones con ellos. Este tipo de datos se representan encerrados entre comillas.
Expresiones: Las expresiones se forman por la combinación de constantes, variables,
símbolos, paréntesis y nombres de funciones. Toda expresión tiene un valor que se
determina usando las operaciones que se indiquen con los valores de las variables y constantes. Toda expresión consta de operadores y operandos y se clasifican en: aritméticas, relacionales y lógicas. Operadores y Operandos
Los operadores son elementos que nos ayudan a relacionar los valores de las variables y constantes, gracias a ellos podemos manejar valores. Operadores aritméticos.-Los operadores aritméticos nos permiten la elaboración de
operaciones matemáticas con valores, usando variables y constantes. Estos operadores se utilizan con datos enteros o reales, y son: + Suma - Resta * Multiplicación / División ·
Operadores Relacionales.- Este tipo de operadores se usan para hacer una relación entre
dos valores del mismo tipo, con ayuda de estos se puede comparar dichos valores y establecer un resultado ya sea verdadero o falso. Estos son:
> Mayor que
< Menor que
> = Mayor o igual que
< = Menor o igual que < > Diferente
·
Operadores Lógicos: Estos operadores también nos ayudan a hacer una relación entre
datos pero estos deber ser valores lógicos. y son: And Y Or O
Not Negación Identificadores
Los identificadores representan los datos de un programa (constantes, variables, tipos de datos). Un identificador es una secuencia de caracteres que sirve para identificar
una posición en la memoria de la computadora, que permite acceder a su contenido. Ejemplo:
» Nombre » Num_hrs » Calif2
Reglas para formar un identificador
Debe comenzar con una letra (A a Z, mayúsculas o minúsculas) y no deben contener espacios en blanco.
Letras, dígitos y caracteres como la subraya ( _ ) están permitidos después del primer carácter.
La longitud de identificadores puede ser de varios caracteres. Pero es recomendable una longitud promedio de 8 caracteres.
El nombre del identificador debe dar una idea del valor que contiene.
PASOS A SEGUIR PARA DESARROLLAR UN ALGORITMO Analizar el problema
Que se nos está planteando. En este análisis hay que identificar cuáles son los
Datos de salid a, es decir, los resultados que debe de arrojar nuestro algoritmo; identificar cuáles son los datos de entra da necesarios para lograr los resultados esperados, es decir, los datos que nos tiene que dar el usuario; identificar los Proceso a realizar con los datos de entrada para obtener los datos de salida, en otras palabras las expresiones a calcular; y en caso de ser necesario identificar los datos qué permanecen Constantes Durante todo el proceso o algoritmo. 2. Diseñar el Algoritmo
En alguna de las tres técnicas algorítmicas conocidas, pero en estos casos serán todas. 3 Probar el algoritmo
Para evitar un posible error lógico, para lo cual se hace una corrida de escritorio, lo cual significa dar valores ficticios a las variables y checar los resultados.
Qué son las constantes, las variables y las expresiones en la programación así como su clasificación.
1-variables y constantes 1.1 Constantes
Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa. Ejemplo: pi = 3.1416 Una constante es un dato numérico o alfanumérico que no cambia durante todo el desarrollo del algoritmo o durante la ejecución del programa. Es un objeto de valor invariable. Para expresar una constante se escribe explícitamente su valor.
Tipos de Constantes:
Constantes Numéricas (Enteras y Reales)
Constantes Alfanuméricas
Constantes Lógicas (Boolenas)
Las constantes pueden ser: Constantes sin nombre: Es una expresión numérica donde se puede utilizar directamente el valor.
Constantes con nombre: Se hace una reserva de memoria en la cual se guarda el valor que será utilizado como constante. Ejemplo:
a) PI = 3.1416 b) E = 2.718228
c) Iva = 0.13 1.2 Variable Es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la ejecución de un proceso, su contenido puede cambiar durante la ejecución del programa.
Para poder reconocer una variable en la memoria de la computadora, es necesario darle un nombre con el cual podamos identificarla dentro de un algoritmo. Ejemplo:
área = pi * radio ^ 2 Las variables son: el radio, el área y la constate es pi Son zonas de memoria cuyo contenido cambia durante la fase de procesamiento de información.
Tipos de variables:
Variables Numéricas (Enteras y Reales)
Variables Alfanuméricas o Caracteres alfabéticos o Dígitos
o Caracteres especiales
Variables Lógicas (Boolenas)
Son las que únicamente pueden contener dos valores, los cuales son:
Valor Verdadero ó 1
Valor Falso ó 0
Estos tipos de variables pueden tomar únicamente valores del mismo tipo, es decir si la variable es entera solamente puede almacenar datos enteros. Ejemplo: Una variable declarada como cadena solo puede tomar valores correspondientes a ese tipo. Nombre = "Manuel López"
Características de una variable:
Las variables son observables y no imaginable
Las variables son cambiantes porque asumen diferentes valores, categorías, ubicación.
Las variables son medibles cuantitativamente como cualitativamente
Las variables tienen un referente conceptual porque emanan del
conocimiento teórico, de la realidad (experiencias en la realidad)
2. Clasificación de las Variables
Por su contenido
Variables Numéricas: Son aquellas en las cuales se almacenan valores numéricos, positivos o negativos, es decir almacenan números del 0 al 9, signos (+ y -) y el punto decimal. Ejemplo: iva = 0.15 pi = 3.1416 costo = 2500
Variables Lógicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estos representan el resultado de una comparación entre otros datos.
Variables Alfanuméricas: Esta formada por caracteres alfanuméricos (letras, números y caracteres especiales). Ejemplo: letra = ’a’ apellido = ’lopez’ direccion = ’Av. Libertad #190’
Por su uso
Variables de Trabajo: Variables que reciben el resultado de una operación matemática completa y que se usan normalmente dentro de un programa. Ejemplo: Suma = a + b /c
Contadores: Se utilizan para llevar el control del número de ocasiones en que se realiza una operación o se cumple una condición. Con los incrementos generalmente de uno en uno.
Acumuladores: Forma que toma una variable y que sirve para llevar la suma acumulativa de una serie de valores que se van leyendo o calculando progresivamente.
¿Qué tipos de datos existen? » Datos de Tipo Entero » Datos de Tipo Real » Datos de Tipo Lógico » Datos de Tipo Carácter » Datos de Tipo Cadena » Clasificación de los Tipos de Datos Simples » Ejercicios de Tipos de Datos en Pseudocódigo Los datos que utilizan los programas (o algoritmos) se pueden clasificar en base a diferentes criterios. Uno de los más significativos es aquel que dice que todos los datos que utilizan los programas son simples o compuestos. Un dato simple es indivisible (atómico), es decir, no se puede descomponer. Ejemplo 1: Un año es un dato simple. Año...: 2006 Un año se expresa con un número entero, el cual no se puede descomponer. Sin embargo, un dato compuesto está formado por otros datos. Ejemplo 2: Una fecha es un dato compuesto por tres datos simples (día, mes, año). Fecha: Día...: 30 Mes...: 11 Año...: 2006 Ejemplo 3: Otro ejemplo de dato simple es una letra. Letra...: t Una letra se representa con un carácter del alfabeto. Pero, cuando varias letras se agrupan, entonces se obtiene un dato compuesto por varios caracteres. Ejemplo 4: Para formar un nombre de persona se utilizan varios caracteres. Nombre...: Ana (dato compuesto por tres caracteres)
3-Expresiones Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales. Por ejemplo:
a + (b + 3) / c Cada expresión toma un valor que se determina tomando los valores de las variables y constantes implicadas y la ejecución de las operaciones indicadas. Una expresión consta de operadores y operandos. Según sea el tipo de datos que manipulan, se clasifican las expresiones en:
Aritméticas
Relacionales
Lógicas
4- Operadores y Operandos: Qué son los operadores y los operando, sus tipos y las prioridades de ejecución de los mismos. Operadores
Son elementos que relacionan de forma diferente, los valores de una o más variables y/o constantes. Es decir, los operadores nos permiten manipular valores.
Operadores Aritméticos
Los operadores aritméticos permiten la realización de operaciones matemáticas con los valores (variables y constantes).
Los operadores aritméticos pueden ser utilizados con tipos de datos enteros o reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real.
Operadores Aritméticos + Suma - Resta
* Multiplicación / División
mod Modulo (residuo de la división entera)
Ejemplos: Expresión 7/2 12 mod 7 4+2*5
Resultado 3.5 5 14
Prioridad de los Operadores Aritméticos
Todas las expresiones entre paréntesis se evalúan primero. Las expresiones con
paréntesis anidados se evalúan de dentro a fuera, el paréntesis más interno se evalúa primero. Dentro de una misma expresión los operadores se evalúan en el siguiente orden: 1. ^ Exponenciación 2. *, /, mod Multiplicación, división, modulo. 3. +, - Suma y resta. Los operadores en una misma expresión con igual nivel de prioridad se evalúan de izquierda a derecha. Ejemplos: 4 + 2 * 5 = 14
23 * 2 / 5 = 9.2
3 + 5 * (10 - (2 + 4)) = 23 2.1 * (1.5 + 12.3) = 2.1 * 13.8 = 28.98 Operadores Relacionales
Se utilizan para establecer una relación entre dos valores. Luego compara estos valores entre si y esta comparación produce un resultado de certeza o falsedad (verdadero o falso).
Los operadores relacionales comparan valores del mismo tipo (numéricos o cadenas). Estos tienen el mismo nivel de prioridad en su evaluación.
Los operadores relaciónales tiene menor prioridad que los aritméticos. Tipos de operadores Relacionales
> Mayor que
< Menor que
> = Mayor o igual que
< = Menor o igual que
< > Diferente
= Igual
Ejemplos: Si a = 10, b = 20, c = 30 a+b>c
Falso
a-b<c
Verdadero
a-b=c
Falso
a * b < > c Verdadero Ejemplos no lógicos: a<b<c
10 < 20 < 30 T > 5 < 30
(no es lógico porque tiene diferentes operandos) Operadores Lógicos
Estos operadores se utilizan para establecer relaciones entre valores lógicos. Estos valores pueden ser resultado de una expresión relacional.
Tipos de operadores Lógicos And Y Or O Not Negación Ejemplo:
Para los siguientes ejemplos T significa verdadero y F falso. Operador Not Operador Not Operando Resultado F T T F Operador And Operador And Operando1 Operador AND T T F F
Operando2 T F T F
Resultado T F F F
Operador Or Operador Or Operando1 Operador
Operando2
Resultado
Or
T T F F
T F T F
Prioridad de los Operadores L贸gicos
1. Not 2. And 3. Or Prioridad de los Operadores en General
4. ( ) 5. ^ 6. *, /, Mod, Not 7. +, -, And 8. >, <, > =, < =, < >, =, Or 9. Ejemplos: Sea: a = 10 b = 12 c = 13 d =10
T T T F
5-TÉCNICAS DE REPRESENTACIÓN:
Para la representación de un algoritmo, antes de ser convertido a lenguaje de programación, se utilizan algunos métodos de representación escrita, gráfica o matemática. Los métodos más conocidos son:
· Diagramación libre (Diagramas de flujo). · Diagramas Nassi-Shneiderman. · Pseudocódigo.
· Lenguaje natural (español, inglés, etc.). · Fórmulas matemáticas.
Existen dos principales técnicas de diseño de algoritmos de programación, el Top Down y el Bottom Up. Top Down
También conocida como de arriba-abajo y consiste en establecer una serie de niveles de mayor a menor complejidad (arriba-abajo) que den solución al problema. Consiste en efectuar una relación entre las etapas de la estructuración de forma que una etapa jerárquica y su inmediato inferior se relacionen mediante entradas y salidas de información. Este diseño consiste en una serie de descomposiciones sucesivas del
problema inicial, que recibe el refinamiento progresivo del repertorio de instrucciones que van a formar parte del programa. La utilización de la técnica de diseño Top-Down tiene los siguientes objetivos básicos:
Simplificación del problema y de los subprogramas de cada descomposición.
Las diferentes partes del problema pueden ser programadas de modo independiente e incluso por diferentes personas.
El programa final queda estructurado en forma de bloque o módulos lo que hace más sencilla su lectura y mantenimiento. Bottom Up
El diseño ascendente se refiere a la identificación de aquellos procesos que necesitan computarizarse con forme 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 haciendo 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 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, adolece de ciertas limitaciones por haber tomado un enfoque ascendente.
Uno de ellos es la duplicación de esfuerzos para acceder 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. Entonces…
La diferencia entre estas dos técnicas de programación se fundamenta en el resultado que presentan frente a un problema dado. Imagine una empresa, la cual se compone de varios departamentos (contabilidad,
mercadeo, …), en cada uno de ellos se fueron presentando problemas a los cuales se le dieron una solución basados en un enfoque ascendente (Bottom Up): creando programas que satisfacían sólo el problema que se presentaba.
Cuando la empresa decidió integrar un sistema global para suplir todas las necesidades de todos los departamentos se dio cuenta que cada una de las soluciones presentadas no era compatible la una con la otra, no representaba una globalidad, característica principal de los sistemas.
Como no hubo un previo análisis, diseño de una solución a nivel global en todos sus
departamentos, centralización de información, que son características propias de un diseño Descendente (Top Down) y características fundamentales de los sistemas; la empresa no pudo satisfacer su necesidad a nivel global.
La creación de algoritmos es basado sobre la técnica descendente, la cual brinda el diseño ideal para la solución de un problema.
Qué es el pseudocódigo y sus ventajas frente a los diagramas de flujos y las definiciones de los diagramas estructurados y las estructuras algorítmicas. Pseudocódigo
Mezcla de lenguaje de programación y español (o ingles o cualquier otro idioma) que se emplea, dentro de la programación estructurada, para realizar el diseño de un programa. En esencial, el Pseudocódigo se puede definir como un lenguaje de especificaciones de algoritmos. En esencial, el Pseudocódigo se puede definir como un lenguaje de especificaciones de algoritmos.
Es la representación narrativa de los pasos que debe seguir un algoritmo para dar solución a un problema determinado. El Pseudocódigo utiliza palabras que indican el proceso a realizar. Ventajas de utilizar un Pseudocódigo a un Diagrama de Flujo
Ocupa menos espacio en una hoja de papel
Permite representar en forma fácil operaciones repetitivas complejas
Es muy fácil pasar de Pseudocódigo a un programa en algún lenguaje de programación.
Si se siguen las reglas se puede observar claramente los niveles que tiene cada operación. Diagramas estructurados (Nassi-Schneiderman)
El diagrama estructurado N-S también conocido como diagrama de chapin es como un diagrama de flujo en el que se omiten las flechas de unión y las cajas son contiguas. Las acciones sucesivas se pueden escribir en cajas sucesivas y como en los diagramas
de flujo, se pueden escribir diferentes acciones en una caja. Un algoritmo se represente en la siguiente forma:
Estructuras Algorítmicas
Las estructuras de operación de programas son un grupo de formas de trabajo, que permiten, mediante la manipulación de variables, realizar ciertos procesos específicos que nos lleven a la solución de problemas. Estas estructuras se clasifican de acuerdo con su complejidad en:
En ciencias de la computación, y análisis numérico, el pseudocódigo (o falso lenguaje) es una descripción de alto nivel compacta e informal1 del principio operativo de un programa informático u otro algoritmo. Utiliza las convenciones estructurales de un lenguaje de programación real, pero está diseñado para la lectura humana en lugar de la lectura mediante máquina, y con independencia de cualquier otro lenguaje de programación. Normalmente, el
pseudocódigo omite detalles que no son esenciales para la comprensión humana del algoritmo, tales como declaraciones de variables, código específico del sistema y algunas subrutinas. El lenguaje de programación se complementa, donde sea
conveniente, con descripciones detalladas en lenguaje natural, o con notación matemática compacta. Se utiliza pseudocódigo pues este es más fácil de entender para las personas que el código del lenguaje de programación convencional, ya que es una
descripción eficiente y con un entorno independiente de los principios fundamentales de un algoritmo. Se utiliza comúnmente en los libros de texto y publicaciones
científicas que se documentan varios algoritmos, y también en la planificación del desarrollo de programas informáticos, para esbozar la estructura del programa antes de realizar la efectiva codificación. No existe una sintaxis estándar para el pseudocódigo, aunque los ocho IDE's que manejan pseudocódigo tengan su sintaxis propia. Aunque sea parecido, el pseudocódigo no debe confundirse con los programas esqueleto que incluyen código
ficticio, que pueden ser compilados sin errores. Los diagramas de flujo y UML pueden ser considerados como una alternativa gráfica al pseudocódigo, aunque sean más amplios en papel.
Características y partes Las principales características de este lenguaje son: 1. Se puede ejecutar en un ordenador (con un IDE como por ejemplo SLE, LPP,
PilatoX, Maruga Script, Seudocódigo o PSeInt. Otros Ides de consideración son Inter-P y Algor)
2. Es una forma de representación sencilla de utilizar y de manipular. 3. Facilita el paso del programa al lenguaje de programación. 4. Es independiente del lenguaje de programación que se vaya a utilizar. 5. Es un método que facilita la programación y solución al algoritmo del programa. Todo documento en pseudocódigo debe permitir la descripción de:
1. Instrucciones primitivas. 2. Instrucciones de proceso.... 3. Instrucciones de control. 4. Instrucciones compuestas. 5. Instrucciones de descripción. Estructura a seguir en su realización: 1. Cabecera. 1. Programa. 2. Módulo. 3. Tipos de datos. 4. Constantes. 5. Variables. 2. Cuerpo. 1. Inicio. 2. Instrucciones. 3. Fin.
Sintaxis En la actualidad y por lo general, el pseudocódigo, como su nombre lo indica, no obedece a las reglas de sintaxis de ningún idioma en particular ni es de forma estándar sistemática, a pesar de que cualquier escritor en particular vaya a pedir prestado las estructuras de
control general, la sintaxis y el estilo, por ejemplo, de algún lenguaje de programación
convencional. Pero en caso de que se quiera ejecutar, se debe llevar a forma tipo, para que no genere mensajes de error. Las fuentes populares incluyen la sintaxis
de Pascal, BASIC, C, C++, Java, Lisp, y ALGOL. Por lo general, se omiten las declaraciones de
variables. A veces, las llamadas a funciones, los bloques de código y el código contenido dentro de un loop se remplazan por una sentencia de una línea en lenguaje natural.
Dependiendo del escritor, el pseudocódigo puede variar mucho en su estilo, yendo desde en un extremo, una imitación casi exacta de un lenguaje de programación real, hasta al acercarse a una descripción en prosa de formato de pseudocódigo en el otro extremo.
Este es un ejemplo de pseudocódigo (para el juego matemático bizz buzz):
Pseudocódigo estilo Fortran:
Pseudocódigo estilo Pascal:
Pseudocódigo estilo C:
programa bizzbuzz
procedimiento bizzbuzz
subproceso funcion
hacer i = 1 hasta 100
para i := 1 hasta 100
bizzbuzz
hacer
para (i <- 1; i<=100;
establecer print_number a verdadero si i es divisible por
establecer
i++) {
print_number a verdadero;
3
Si i es divisible por escribir "Bizz"
3 entonces
establecer
Si i es divisible por
escribir "Bizz";
print_number a falso si i es divisible por
escribir "Bizz";
print_number a falso; Si i es divisible por
establecer
Si i es divisible por
escribir "Buzz";
escribir "Buzz";
print_number a falso; Si print_number,
establecer print_number a falso;
escribir i;
línea
Si print_number,
escribir una nueva
fin del hacer
5
establecer
escribir i escribir una nueva
establecer print_number a falso;
5 entonces
print_number a falso si print_number,
3
establecer
5 escribir "Buzz"
establecer print_number a verdadero;
escribir i;
lína; fin
escribir una nueva línea; }
Definición de datos del pseudocódigo La definición de datos se da por supuesta, sobre todo en las variables sencillas, si se emplea formaciones: pilas, colas, vectores o registros, se pueden definir en la cabecera del algoritmo, y naturalmente cuando empleemos el pseudocódigo para definir estructuras de datos, esta parte la desarrollaremos adecuadamente.
Funciones y operaciones Cada autor usa su propio pseudocódigo con sus respectivas convenciones. Por ejemplo, la instrucción "reemplace el valor de la variable
por el valor de la variable
ser representado como:
asigne a
el valor de
Las operaciones aritméticas se representan de la forma usual en matemáticas.
" puede
Estructuras de control En la redacción del pseudocódigo se utiliza tres tipos de estructuras de control: las secuenciales, las selectivas y las iterativas.
Estructuras secuenciales Las instrucciones se siguen en una secuencia fija que normalmente viene dada por el número de renglón. Es decir que las instrucciones se ejecutan de arriba hacia abajo.
Estructuras selectivas Las instrucciones selectivas representan instrucciones que pueden o no ejecutarse, según el cumplimiento de una condición.
Diagrama de flujo que muestra el funcionamiento de la instrucción condicional.
La condición es una expresión booleana. Instrucciones es ejecutada sólo si la condición es verdadera.
Selectiva doble (alternativa)
La instrucción alternativa realiza una instrucción de dos posibles, según el cumplimiento de una condición. Diagrama de flujo que muestra el funcionamiento de la instrucción condicional.
La condición es una variable booleana o una función reducible a booleana (lógica, Verdadero/Falso). Si esta condición es cierta se ejecuta Instrucciones1, si no es así, entonces se ejecutaInstrucciones2.
Selectiva múltiple También es común el uso de una selección múltiple que equivaldría a anidar varias funciones de selección.
En este caso hay una serie de condiciones que tienen que ser mutuamente excluyentes, si una de ellas se cumple las demás tienen que ser falsas necesariamente, hay un caso si no que será cierto cuando las demás condiciones sean falsas.
En esta estructura si Condición1 es cierta, entonces se ejecuta sólo Instrucciones1. En general, si Condicióni es verdadera, entonces sólo se ejecuta Instruccionesi
Selectiva múltiple-Casos Una construcción similar a la anterior (equivalente en algunos casos) es la que se muestra a continuación.
En este caso hay un Indicador es una variable o una función cuyo valor es comparado en cada caso con los valores "Valori", si en algún caso coinciden ambos valores, entonces se ejecutarán las Instruccionesi correspondientes. La sección en otro caso es análoga a la sección si no del ejemplo anterior.
Estructuras iterativas Las instrucciones iterativas representan la ejecución de instrucciones en más de una vez.
Bucle mientras El bucle se repite mientras la condición sea cierta, si al llegar por primera vez al bucle mientras la condición es falsa, el cuerpo del bucle no se ejecuta ninguna vez.
Bucle repetir Existen otras variantes que se derivan a partir de la anterior. La estructura de control repetir se utiliza cuando es necesario que el cuerpo del bucle se ejecuten al menos una vez y hasta que se cumpla la condición:
La estructura anterior equivaldría a escribir:
Bucle hacer El Bucle hacer se utiliza para repetir un bloque de código mientras se cumpla cierta condición.
Bucle para Una estructura de control muy común es el ciclo para, la cual se usa cuando se desea iterar un número conocido de veces, empleando como índice una variable que se incrementa (o decrementa): La cual se define como:
Bucle para cada Por último, también es común usar la estructura de control para cada. Esta sentencia se usa cuando se tiene una lista o un conjunto y se quiere iterar por cada uno de sus elementos:
Si asumimos que los elementos de
son
, entonces esta sentencia equivaldría a:
Que es lo mismo que:
Sin embargo, en la práctica existen mejores formas de implementar esta instrucción dependiendo del problema. Es importante recalcar que el pseudocódigo no es un lenguaje estandarizado. Eso significa que diferentes autores podrían dar otras estructuras de control o bien usar estas mismas estructuras, pero con una notación diferente. Sin embargo, las funciones matemáticas y lógicas toman el significado usual que tienen en matemática y lógica, con las mismas expresiones.
El anidamiento Cualquier instrucción puede ser sustituida por una estructura de control. El siguiente ejemplo muestra el pseudocódigo del ordenamiento de burbuja, que tiene varias estructuras anidadas. Este algoritmo ordena de menor a mayor los elementos de una lista
.
anidamiento
En general, las estructuras anidadas se muestran indentadas, para hacer más sencilla su identificación a simple vista. En el ejemplo, además de la indentación, se ha conectado con flechas los pares de delimitadores de cada nivel de anidamiento.
Desarrollo de algoritmos
Con este pseudocódigo se puede desarrollar cualquier algoritmo que:
Tenga un único punto de inicio.
Tenga un número finito de posibles puntos de término.
Haya un número finito de caminos, entre el punto de inicio y los posibles puntos de término.
Funciones y procedimientos
Muchas personas prefieren distinguir entre funciones y procedimientos. Una función, al igual que una función matemática, recibe uno o varios valores de entrada y regresa una salida mientras que un procedimiento recibe una entrada y no genera ninguna
salida aunque en algún caso podría devolver resultados a través de sus parámetros de entrada si estos se han declarado por referencia (ver formas de pasar argumentos a una función o procedimiento).
En ambos casos es necesario dejar en claro cuáles son las entradas para el algoritmo, esto se
hace comúnmente colocando estos valores entre paréntesis al principio o bien declarándolo explícitamente con un enunciado. En el caso de las funciones, es necesario colocar una
palabra como regresar o devolver para indicar cuál es la salida generada por el algoritmo. Por ejemplo, el pseudocódigo de una función que permite calcular potencia ).
(un número
elevado a
Un ejemplo de procedimiento seria el algoritmo de Ordenamiento de burbuja, por el que
partiendo de una lista de valores estos se ordenan, nótese que en un procedimiento, no se
calcula el valor de una función, sino que se realiza una acción, en este caso ordenar la lista.
Ventajas del pseudocódigo sobre los diagramas de flujo Los pseudocódigos presentan los siguientes beneficios:
Ocupan mucho menos espacio en el desarrollo del problema.
Permite representar de forma fácil operaciones repetitivas complejas.
Es más sencilla la tarea de pasar de pseudocódigo a un lenguaje de programación formal.
Si se siguen las reglas de atentación se puede observar claramente los niveles en la estructura del programa.
En los procesos de aprendizaje de los alumnos de programación, éstos están más cerca del paso siguiente (codificación en un lenguaje determinado, que los que se inician en esto con la modalidad Diagramas de Flujo).
Mejora la claridad de la solución de un problema.
Una de las dos herramientas más comunes
en el diseño de algoritmos es el diagrama de flujo.
Un diagrama de flujo es la representación
gráfica de un algoritmo. También se puede decir que es la representación detallada en
forma gráfica de cómo deben realizarse los pasos en la computadora para producir resultados.
Esta representación gráfica se da cuando
varios símbolos (que indican diferentes procesos en la computadora), se relacionan entre sí mediante líneas que indican el orden en que se deben ejecutar los procesos. Los símbolos
utilizados han sido normalizados por el instituto norteamericano de normalización (ANSI): Símbolo
Descripción Indica el inicio y el final de nuestro diagrama de flujo. Indica la entrada y salida de datos. Símbolo de proceso y nos indica la asignación de un valor en la memoria y/o la ejecución de una operación aritmética.
Indica la salida de información por impresora. Conector dentro de página. Representa la continuidad del diagrama dentro de la misma página. Conector fuera de página. Representa la continuidad del diagrama en otra página. Indica la salida de información en la pantalla o monitor.
Símbolo de decisión. Indica la realización de una comparación de valores.
Símbolo de Selección Múltiple. Dada una expresión permite escoger una opción de muchas.
Símbolo del Mientras. Dada una expresión al principio de la iteración esta es evaluada; si la condición es verdadera realizará el ciclo, si es falsa la repetición cesará.
Símbolo del Para. Esta estructura de control repetitiva se usa generalmente cuando se conoce de antemano el número de iteraciones.
Símbolo Repita Hasta. Funciona igual que la estructura Mientras, con la diferencia que al menos una vez hará el grupo de instrucciones y luego evaluará una condición. Si la condición evaluada es falsa continua dentro del ciclo y si es verdadera termina la iteración.
Líneas de flujo o dirección. Indican la secuencia en que se realizan las operaciones.
Recomendaciones para el diseño de Diagramas de Flujo Se deben usar solamente líneas de flujo horizontal y/o vertical. Se debe evitar el cruce de líneas utilizando los conectores. Se deben usar conectores sólo cuando sea necesario. No deben quedar líneas de flujo sin conectar.
Se deben trazar los símbolos de manera que se puedan leer de arriba hacia abajo y de izquierda a derecha.
Todo texto escrito dentro de un símbolo deberá ser escrito claramente, evitando el uso de muchas palabras.
En síntesis, el Diagrama de Flujo de Datos describe:
ð
los lugares de origen y destino de los datos (los límites del sistema),
ð
las transformaciones a las que son sometidos los datos (los procesos internos),
ð
los lugares en los que se almacenan los datos dentro del sistema, y
ð
los canales por donde circulan los datos.
Características:
ð
Relevante: Ya que posibilitar comunicar diferentes modelos para así facilitar el
entendimiento entre el usuario y el analista de sistemas.
ð
Lógico: Ya que no identifica soporte físico.
ð
Descendente: Se construye en forma descendente, de lo general a lo particular.
El DFD posee niveles de desagregación o explosión o apertura de burbujas. El Nivel 0 o
Diagrama de Contexto es aquel que muestra una sola burbuja y las entidades externas o terminadoras con los que interactúa el sistema.
Simbología: Entidad Externa: Son generalmente clases lógicas de cosas o de personas, las cuales representan una fuente o
destino de transacciones, como por ejemplo clientes, empleados, proveedores, etc., con las que
el sistema se comunica. También pueden ser una fuente o destino específico, como por ejemplo Departamento Contable. Como el sistema que está bajo análisis acepta datos de otro sistema o bien se los provee, este otro sistema es una Entidad Externa. Mediante la designación de alguna cosa o de algún sistema como Entidad Externa estamos
estableciendo implícitamente que se encuentra fuera de los límites del sistema que estamos
considerando por lo cual no nos interesa la transformación o proceso que se realiza dentro de ellos, es decir que están fuera del control del sistema que se está modelando. Son sólo proveedores o requeridores de datos del sistema bajo consideración. Por todo ello, ni el analista ni el diseñador pueden cambiar ni los contenidos ni la forma de trabajo de un terminador.
Proceso:
Indican aquellos lugares dentro del sistema en donde la información (flujos de datos) que
ingresan se procesa o transforman. Es decir, son las funciones o procesos que transforman entradas de datos en salidas de información. Su nombre deberá ponerse mediante una frase imperativa, que consistirá idealmente de un
verbo activo seguido por una clausula objeto, cuanto más simple mejor. Al analista le servirá pensar que la descripción de la función es "una orden a un empleado sin conocimiento del tema". Estas frases imperativas no tienen sujeto; tan pronto como se introduce un sujeto se
habrá indicado como deberá realizarse físicamente la función ("El operador ingresará los datos del alumno"). Un proceso puede ser físicamente una oficina repleta de empleados, un procedimiento, o una combinación de actividades manuales y automatizadas.
Flujo de datos:
Representa un transporte de paquetes de datos desde su origen hasta su destino, es decir que representa una estructura de datos en movimiento de una parte del sistema a otro. Un flujo muestra las interfaces entre los elementos del DFD. Puede imaginarse como una tubería por donde se envían paquetes de datos, pero deberá tener una descripción de su contenido la cual deberá elegirse de forma que sea lo más útil posible a los usuarios que revisen el DFD.
La flecha indica la dirección del flujo. Puede estar contenido físicamente en una nota, una factura, una llamada telefónica, de
programa a programa, etc. Es decir, en cualquier medio por el cual los datos pasan de una entidad o proceso a otra. Almacén o archivo:
Representa un archivo lógico en donde se agregan o de donde se extraen datos. Es una estructura de datos, pero estática.
Puede ser físicamente un archivo de tarjetas, una microficha, un archivo, o un archivo en cinta o diskette.
Deberá elegirse el nombre que sea más descriptivo para el usuario, que identifique los paquetes de datos que contiene.
Implica escritura, actualización o borrado de datos. Implica lectura o recuperación de información almacenada.
Guías para construir un DFD:
Primero se deberán identificar las entidades externas ya que ello implica definir los límites del sistema.
Se deberán elegir nombres con significado tanto para procesos como también para
flujos de datos, almacenes y entidades externas. Si es posible a partir del vocabulario del usuario evitando terminologías técnicas.
Identificar el papel del proceso del sistema, no quien lo realiza.
Numerar los procesos, mediante un esquema de numeración consistente que implique, para los lectores del DFD, una cierta secuencia de ejecución.
Se deberán, en la medida de lo posible, evitar los DFD excesivamente complejos. Deberán ser comprensibles, digeribles y agradables a la vista sin demasiados elementos.
Todos los elementos se relacionan entre sí a través de flujos de datos.
Procesos: Se relacionarán con:
ð
Almacenes
ð
Entidades externas
ð
Otros procesos
ð
Deberán tener al menos una Entrada y una Salida, no son manantiales de datos.
Almacenes: Se relacionarán solamente con Procesos.
Entidades Externas: Se relacionarán solamente con Procesos.
En todos los niveles del Diagrama de Flujo de Datos deberá haber igual cantidad de Entradas y de Salidas.
Niveles del DFD:
ð
Nivel de Partida: Diagrama de Contexto:
o
ð
No existirán almacenes o archivos.
o
ð
Se representarán las entidades externas que son fuente y destino de los datos.
o
ð
El sistema será representado como un proceso simple.
o
ð
Se dibujarán sólo los flujos de datos de comunicación exterior-sistema.
ð
o
ð
Deberá haber igual cantidad de archivos. Aunque podrá existir mayor cantidad de
ð
En el último nivel, cada proceso realizará una función específica y concreta.
Nivel 1 y subsiguientes:
almacenamientos en el nivel 2 debido a la explosión de algún proceso. o
Cada proceso en el DFD de alto nivel de un sistema puede ser "explotado" para convertirse en un DFD en si mismo.
Cada proceso en el nivel inferior deberá estar relacionado, inversamente, con el proceso
del nivel superior. Es decir que, cada proceso “padre” que se detalla en el DFD, ha de estar
balanceado. La regla del balanceo consiste en que cada proceso debe tener exactamente los mismos datos de entrada/salida netos que el DFD hijo.
Los flujos de datos pueden descomponerse en la “explosión” del proceso en un DFD hijo.
No se deberá prestar atención a las condiciones de tiempo, excepto a las naturales
precedencias lógicas y a los almacenamientos de datos necesarios desde el punto de vista lógico. Se deberá dibujar un sistema que nunca comience ni pare.
Para evitar el cruzamiento de las líneas de flujo de datos, la misma entidad (o el mismo
almacén) se podrá dibujar más de una vez en el mismo diagrama; las dos (o más) casillas por entidad pueden identificarse con dos líneas inclinadas en el ángulo superior izquierdo de las mismas.
Diagramas de Flujo de Datos Al mirar un DFD típico para un sistema chico se nota lo siguiente:
Requiere poca explicación.
Cabe fácilmente en una página.
Se dibujó con computadora. os componentes de un DFD Proceso
Círculo.
Muestra una parte del sistema que transforma entradas en salidas.
Se nombra con una frase u oración sencilla (preferentemente frase verbo-objeto).
Diagramas de Flujo de Datos Flujo de datos
Flecha que llega o sale de un proceso.
Describe el movimiento de bloques o paquetes de información de una parte del sistema a otro.
El nombre representa el significado del paquete (un solo tipo de paquetes) que se mueve por el flujo de datos.
Tiene dirección.
Flujos divergentes (copias o división en paquetes más simples) y convergentes (unión para formar paquetes más complejos). No los usamos.
No responde a dudas de procedimiento.
Diagramas de Flujo de Datos 1.3. Almacén
Dos líneas paralelas.
Modeliza una colección de paquetes en reposo.
Puede ser requerimiento fundamental o aspecto conveniente de la realización del sistema.
Ejemplos de aspectos convenientes de interponer un almacén entre dos procesos: algún otro recurso de hardware)
ramadores implementen los dos procesos
Un flujo que viene de un sistema se interpreta como una lectura o un acceso a la información del almacén (no destructiva)
Un flujo hacia un almacén se describe como una escritura, una actualización o una eliminación
Diagramas de Flujo de Datos 1.4. Terminador
Rectángulo.
Representan entidades externas con las cuales el sistema se comunica.
Persona, Organización externa, Organismo gubernamental, grupo o departamento dentro de la organización.
Las relaciones que existan entre los terminadores no se muestran en el DFD
Diagramas de Flujo de Datos Guía para la construcción de DFD do para todos los componentes
Para los procesos: Identificar las funciones que el sistema está llevando a cabo. Usar un verbo y un objeto. Evitar verbos ambiguos: hacer, manejar, procesar, etc.
Como forma abreviada de identificar las burbujas.
Base para la numeración jerárquica.
Para que sea:
Técnicamente correcto
Aceptable para el usuario
Estar lo suficientemente bien dibujado para mostrarlo a la dirección de la organización Para mejorarlo estéticamente:
Tamaño y forma de las burbujas
Flujos curvos vs. rectos. Cruces de flujos.
Diagramas hechos a mano vs. diagramas generados por computadora
Diagramas de Flujo de Datos 2.4. Evitar los DFD demasiado complejos
Deben ser leídos y comprendidos.
7±2 de cada componente o sea debe caber en una hoja normal.
Excepción: Diagrama de contexto. 2.5. Asegurarse la consistencia
Evitar sumideros infinitos
Evitar las burbujas de generación espontánea
Todos los flujos y procesos deben estar etiquetados
Tener cuidado con los almacenes de “sólo lectura” o “sólo escritura”
Diagramas de Flujo de Datos DFD por niveles Organizar el DFD global en una serie de niveles de modo que cada uno proporcione más detalle sobre una porción del nivel anterior. El primer nivel consta de una sola burbuja que representa la totalidad del sistema (diagrama
de contexto). El DFD que sigue se conoce como nivel 0 y representa la vista de más alto nivel de las principales funciones del sistema. Los números de las burbujas sirven para relacionar una burbuja con el nivel siguiente del DFD.
Diagramas de Flujo de Datos 3. DFD por niveles Cuestiones a tener en cuenta:
¿Cuántos niveles? Seguir “bajando” hasta llegar a burbujas de poca complejidad. Agregar niveles superiores para respetar la regla 7±2. En sistemas típicos, simples 2 o 3 niveles, medianos 3 a 6, grande 5 a 8.
¿Deben partirse todas las partes del sistema al mismo nivel de detalle? No, pero cuidado con los extremos.
¿Cómo se muestran estos diagramas al usuario? De forma descendente.
¿Cómo asegurar que los distintos niveles sean consistentes entre sí? Los flujos de datos que entran y salen de una burbuja en el nivel i deben corresponder con los que entran y salen de toda la figura correspondiente del nivel i+1 que la describe.
Diagramas de Flujo de Datos Cuestiones a tener en cuenta:
¿Cómo se muestran los almacenes en los diversos niveles? Un almacén que aparece en un nivel i se puede repetir en los niveles sucesivos de refinamiento i+1, i+2, etc. Pero un almacén local al nivel i no aparecía en los niveles anteriores i-1, i-2, etc.
¿Cómo se realiza la partición de los DFD en niveles? Pese a que se leen en forma descendente, no es necesario desarrollarlos de esa manera. Un enfoque que tiene más éxito es identificar los acontecimientos externos a los cuales debe responder el sistema y utilizarlos para crear un primer borrador del DFD. De ahí puede partirse hacia arriba (para crear DFD de mayor nivel de abstracción) y hacia abajo.
1. CONCEPTOS BASICOS PARA TRABAJAR CON DFD a) ¿Que es Dfd? Dfd es un software diseñado para construir y analizar algoritmos. Usted puede crear diagramas de flujo de datos para la representación de algoritmos de programación
estructurada a partir de las herramientas de edición que para éste propósito suministra el programa. Después de haber ingresado el algoritmo representado por el diagrama, podrá
ejecutarlo, analizarlo y depurarlo en un entorno interactivo diseñado para éste fin. La interfaz gráfica de Dfd, facilita en gran medida el trabajo con diagramas ya que simula la representación estándar de diagramas de flujo en hojas de papel. b) Algoritmo Un algoritmo es un procedimiento para la resolución de problemas de cualquier tipo por
medio de determinada secuencia de pasos simples y no ambiguos. El concepto fue utilizado
originalmente para el cálculo matemático pero ahora es ampliamente usado en programación de computadoras. c) Diagrama de Flujo de Datos Un diagrama de flujo de datos es una descripción gráfica de un procedimiento para la
resolución de un problema. Son frecuentemente usados para describir algoritmos y programas
de computador. Los diagramas de flujo de datos están conformados por figuras conectadas con flechas. Para ejecutar un proceso descrito por un diagrama de flujo de datos se comienza por el INICIO y se siguen las flechas de figura a figura, ejecutándose las acciones indicadas por cada figura; el tipo de figura indica el tipo de paso que representa.
Los diagramas de flujo son frecuentemente usados debido a que pueden suprimir detalles innecesarios y tener un significado preciso, si son usados correctamente. d) Tipos de Datos Real: Valores numéricos que van desde -1*10 ^ 2000 hasta 1*10 ^ 2000 . Los valores más cercanos a 0 que se pueden manejar son 1*10 ^ -2000 y -1*10 ^ -2000. Ejemplo: 1998, 1.0007, 0, 328721, -3242781 Cadena de Caracteres: Secuencia de caracteres encerrada entre comillas simples. Ejemplo: `Diagramar es fácil' , `París' , `1955' Lógico: La letra V ó F encerrada entre puntos, para indicar verdadero ó falso respectivamente. Ejemplo: .V. , .F. , .v. , .f. e) Campos de Datos Constantes: Con su nombre muestran su valor y éste no se puede cambiar. Ejemplo: 1996 , `Los algoritmos son útiles' , .V. Variables: Es posible modificar su valor. El nombre de una variable debe comenzar por una letra seguida de letras, números o el carácter ( _ ). Ejemplo: Valor, Contador, año, Valor_1 No se tiene en cuenta la diferencia entre mayúsculas y minúsculas para el nombre de una
variable; es decir, CASA equivale a casa. Cuando una variable recibe un valor por primera vez, el tipo de dato de ésta será igual al tipo de dato del valor. f) Arreglos Dfd soporta arreglos n-dimensionales de cualquier tipo de dato. El nombre de un arreglo debe comenzar por una letra seguida de letras, números o el carácter ( _ ). Ejemplo: Vector ( 2 ) , Matriz ( i , j ) , v ( 1, j, ñ, p ) No se tiene en cuenta la diferencia entre mayúsculas y minúsculas para el nombre de un vector; es decir, VECTOR(2) equivale a vector(2). g) Interfaz de Usuario Dfd posee una ventana principal que proporciona el ambiente de trabajo en donde se pueden
construir y analizar algoritmos. Los componentes básicos de la ventana principal son: La barra de menú, barras de herramientas, barras de desplazamiento y el área de trabajo.
h) Acción Actual Es el estado en el que se encuentra Dfd. La acción actual puede ser: Edición Ejecución Depuración La barra de estado ubicada en la parte inferior de la ventana de Dfd muestra la acción actual. i) Subprograma Actual En Dfd, solo un subprograma (incluyendo el principal) puede ser visualizado a la vez, considerándose éste el Subprograma Actual. j) Errores de Sintaxis Estos errores son detectados en tiempo de revisión cuando se intenta ejecutar un algoritmo que contiene expresiones incorrectas. El mensaje de error correspondiente será mostrado y se indicara el objeto en el que se produjo el error.
2. SISTEMA DE MENÚS a) Menú Archivo Archivo | Nuevo El comando Nuevo inicia la sesión de trabajo con un nuevo diagrama. Otras formas de acceder al comando: Barra de herramientas: Teclado: CTRL + N Dfd da como nombre temporal al nuevo diagrama “Sin nombre.dfd”, hasta que éste sea guardado con un nombre de archivo único. Al ejecutar este comando quedará seleccionada la opción Ángulos en Grados del menú Opciones. Archivo | Abrir Inicia la sesión de trabajo con un diagrama ya existente, con este comando puede abrir un archivo de Dfd y comenzar a trabajar sobre él.
Otras formas de acceder al comando:
Barra de Herramientas Teclado CTRL + A Al abrir un archivo de Dfd, las opciones del menú Opciones, tomarán el estado que tenían en el momento en que fue guardado el archivo. Archivo | Guardar Guarda en disco el diagrama que se está editando (principal y subprogramas) y el estado del menú Opciones, como un archivo de extensión “dfd”. A medida que Usted trabaja va haciendo cambios en el diagrama original, por lo cual es conveniente guardar con frecuencia el diagrama. Otras formas de acceder al comando: Barra de herramientas Teclado CTRL + G Archivo | Guardar Como El comando Guardar Como guarda en disco permite colocar un nombre al diagrama en edición. Se despliega un cuadro de diálogo donde se selecciona el nombre y la ubicación (unidad y directorio) del archivo en cual se va a guardar el diagrama. Otra forma de acceder el comando: Teclado ALT + A , C Archivo | Imprimir Este comando despliega el cuadro de diálogo de impresión del sistema, el tamaño del diagrama a imprimir será proporcional al tamaño del diagrama que se visualiza en pantalla. Otras formas de acceder al comando: Barra de herramientas Teclado CTRL + P Archivo | Salir El comando Salir termina una sesión de trabajo con Dfd .
Otras formas de acceder al comando: Teclado ALT + A , S Si el diagrama en edición no ha sido guardado desde la última modificación, Dfd le preguntará si desea guardar antes de salir. b) Menú Edición Edición | Cortar Este comando se usa para eliminar un objeto seleccionado de un diagrama y colocarlo en el portapapeles de Dfd . El comando Cortar estará disponible cuando un objeto eliminable se encuentre seleccionado y la acción actual sea Edición. Otras formas de acceder el comando: Barra de herramientas Teclado CTRL + X Cuando se cortan objetos, estos reemplazan el contenido del portapapeles de Dfd . Los objetos que conforman estructuras de control serán cortados junto con su cuerpo. Edición | Copiar Este comando se usa para obtener una copia del objeto seleccionado en el portapapeles de Dfd.
El objeto seleccionado queda intacto; es decir, no se remueve del diagrama. El comando Copiar estará disponible cuando exista un objeto eliminable seleccionado y la acción actual sea Edición. Otras formas de acceder el comando: Barra de herramientas Teclado CTRL + C Cuando se copian objetos, estos reemplazan el contenido del portapapeles de Dfd. Los objetos que conforman estructuras de control serán copiados juntos con su cuerpo. Edición | Pegar Use este comando para insertar una copia del contenido del portapapeles de Dfd a
continuación del objeto seleccionado. El comando Pegar estará disponible cuando el portapapeles de Dfd no esté vacío, exista un objeto seleccionado y la acción actual sea Edición.
Otras formas de acceder al comando: Barra de herramientas Teclado CTRL + V Después de haber sido pegado, el objeto permanece en el portapapeles de Dfd, de manera que puede pegarlo las veces que desee. Edición | Eliminar Este comando elimina el objeto seleccionado del diagrama sin colocarlo en el portapapeles de Dfd . Se encontrará disponible cuando un objeto eliminable se encuentre seleccionado y la acción actual sea Edición. Otras formas de acceder al comando: Barra de herramientas Teclado SUPR Los objetos que conforman estructuras de control serán eliminados junto con su
cuerpo. En caso de que el objeto seleccionado sea de tipo subprograma, entonces se ejecutará el comando Eliminar Subprograma.
Edición | Eliminar Subprograma Este comando se usa para eliminar todos los objetos que conforman un subprograma. El
comando estará disponible cuando esté visualizado un subprograma (no el principal) y la acción actual sea Edición. Otras formas de acceder el comando: Barra de herramientas Teclado ALT + E, S Edición | Insertar Objeto Este comando se utiliza para insertar a continuación del objeto seleccionado un objeto del tipo que indique el ítem seleccionado en el menú Objeto; es decir, el último objeto seleccionado en la barra de herramientas. El comando estará disponible cuando exista un objeto seleccionado, el ítem seleccionado en el menú Objeto sea diferente de Cursor y la acción actual sea Edición.
Otra forma de acceder al comando: Teclado INS Mouse Clic sobre la zona de inserción Edición Objeto | Editar Este comando se utiliza para editar el contenido de un objeto seleccionado. Estará disponible cuando se encuentre seleccionado un objeto editable y la acción actual sea Edición. Otra forma de acceder al comando: Teclado ENTER Mouse Doble clic sobre el objeto c) Menú Objeto Objeto | Cursor Este comando selecciona el cursor normal del Mouse, el cual se puede usar para: o
Seleccionar y quitar la selección de objetos.
-
Abrir los cuadros de diálogo para la edición de objetos.
Otras formas de acceder al comando: Barra de herramientas Teclado ALT + O, C Cuando la acción actual es diferente de Ejecución, el cursor normal puede cambiar dependiendo de la posición del apuntador del Mouse. Es la flecha de cursor que se presenta cuando el apuntador del Mouse no está sobre
ningún objeto. La forma de este puntero depende de las propiedades del Mouse que maneja el sistema.
El cursor en forma de mano señalando se presenta cuando el apuntador del Mouse se sitúa sobre un objeto que se puede seleccionar, éste indica que se puede seleccionar, quitar la selección de otro objeto ó editar el objeto Hacer clic con el botón izquierdo del Mouse dentro de un objeto selecciona el objeto y quita la selección a cualquier otro que se encuentre seleccionado en el subprograma
actual. Hacer clic con el botón izquierdo del Mouse sobre un área vacía del diagrama quita la selección del objeto. Hacer doble clic con el botón izquierdo del Mouse sobre un objeto editable invoca al correspondiente cuadro de diálogo para la edición.
Objeto | Asignación Este comando se utiliza para indicar que el siguiente objeto a ser insertado en el diagrama es de tipo Asignación. Otras formas de acceder al comando: Barra de herramientas Teclado ALT + O, A
Qué es el pseudocódigo y sus ventajas frente a los diagramas de flujos y las definiciones de los diagramas estructurados y las estructuras algorítmicas. Pseudocódigo Mezcla de lenguaje de programación y español (o ingles o cualquier otro idioma) que se
emplea, dentro de la programación estructurada, para realizar el diseño de un programa. En esencial, el Pseudocódigo se puede definir como un lenguaje de especificaciones de algoritmos.
En esencial, el Pseudocódigo se puede definir como un lenguaje de especificaciones de algoritmos.
Es la representación narrativa de los pasos que debe seguir un algoritmo para dar solución a
un problema determinado. El Pseudocódigo utiliza palabras que indican el proceso a realizar. Ventajas de utilizar un Pseudocódigo a un Diagrama de Flujo
Ocupa menos espacio en una hoja de papel
Permite representar en forma fácil operaciones repetitivas complejas
Es muy fácil pasar de Pseudocódigo a un programa en algún lenguaje de programación.
Si se siguen las reglas se puede observar claramente los niveles que tiene cada operación.
Diagramas estructurados (Nassi-Schneiderman)
El diagrama estructurado N-S también conocido como diagrama de chapin es como un
diagrama de flujo en el que se omiten las flechas de unión y las cajas son contiguas. Las
acciones sucesivas se pueden escribir en cajas sucesivas y como en los diagramas de flujo, se pueden escribir diferentes acciones en una caja. Un algoritmo se represente en la siguiente forma:
Estructuras Algorítmicas
Las estructuras de operación de programas son un grupo de formas de trabajo, que
permiten, mediante la manipulación de variables, realizar ciertos procesos específicos que nos lleven a la solución de problemas. Estas estructuras se clasifican de acuerdo con su complejidad en:
Explicamos las estructuras secuenciales, cómo se representan en pseudocódigo y algunos ejemplos prácticos de las mismas. La estructura secuencial es aquella en la que una acción (instrucción) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso. En Pseudocódigo una Estructura Secuencial se representa de la siguiente forma:
Observe el siguiente problema de tipo cotidiano y sus respectivos algoritmos representados en Pseudocódigo y en diagramas de flujos: • Tengo un teléfono y necesito llamar a alguien pero no sé cómo hacerlo.
o El anterior ejemplo es un sencillo algoritmo de un problema cotidiano dado
como muestra de una estructura secuencial. Ahora veremos los componentes que pertenecen a ella: Asignación La asignación consiste, en el paso de valores o resultados a una zona de la
memoria. Dicha zona será reconocida con el nombre de la variable que recibe el valor. La asignación se puede clasificar de la siguiente forma:
o Simples: Consiste en pasar un valor constante a una variable (a
15)
o Contador: Consiste en usarla como un verificador del numero de veces que se realiza un proceso (a
a + 1)
o Acumulador: Consiste en usarla como un sumador en un proceso (a
a + b)
o De trabajo: Donde puede recibir el resultado de una operación matemática que involucre muchas variables (a
c + b*2/4).
En general el formato a utilizar es el siguiente: < Variable > El símbolo
<valor o expresión >
debe leerse “asigne”.
Escritura o salida de datos
Consiste en mandar por un dispositivo de salida (p.ej. monitor o impresora) un resultado o mensaje. Esta instrucción presenta en pantalla el mensaje escrito entre comillas o el contenido de la variable. Este proceso se representa así como sigue:
Lectura o entrada de datos
La lectura o entrada de datos consiste en recibir desde un dispositivo de entrada (p.ej.
el teclado) un valor o dato. Este dato va a ser almacenado en la variable que aparece a continuación de la instrucción. Esta operación se representa así:
DECLARACION DE VARIABLES Y CONSTANTES
La declaración de variables es un proceso que consiste en listar al principio del algoritmo todas las variables que se usarán, además de colocar el nombre de la variable se debe decir qué tipo de variable es. Contador: ENTERO Edad, I: ENTERO
Direccion : CADENA_DE_CARACTERES Salario_Basico : REAL
Opcion : CARACTER En la anterior declaración de variables Contador, Edad e I son declaradas de tipo
entero; Salario_Basico es una variable de tipo real, Opcion es de tipo carácter y la variable Direccion está declarada como una variable alfanumérica de cadena de caracteres. En el momento de declarar constantes debe indicarse que lo es y colocarse su respectivo valor. CONSTANTE Pi 3.14159
CONSTANTE Msg “Presione una tecla y continúe” CONSTANTE ALTURA 40 Cuando se trabaja con algoritmos por lo general no se acostumbra a declarar las variables ni tampoco constantes debido a razones de simplicidad, es decir, no es camisa de fuerza declarar las variables. Sin embargo en este curso lo haremos para todos los algoritmos que realicemos, con esto logramos hacerlos más entendibles y
organizados y de paso permite acostumbrarnos a declararlas ya que la mayoría de los lenguajes de programación (entre ellos el C++) requieren que necesariamente se declaren las variables que se van a usar en los programas.
Veamos algunos ejemplos donde se aplique todo lo que hemos visto hasta el momento sobre algoritmos:
Ejemplo 1: Escriba un algoritmo que pregunte por dos números y muestre como resultado la suma de estos. Use Pseudocódigo y diagrama de flujos.
Ejemplo 2: Escriba un algoritmo que permita conocer el รกrea de un triรกngulo a partir de la base y la altura. Exprese el algoritmo usando Pseudocรณdigo y diagrama de flujos.
Explicamos las distintas estructuras poniendo ejemplos tanto en diagrama de flujo como en pseudocódigo. Las estructuras condicionales comparan una variable contra otro(s) valor (es), para
que en base al resultado de esta comparación, se siga un curso de acción dentro del programa. Cabe mencionar que la comparación se puede hacer contra otra variable o contra una constante, según se necesite. Existen tres tipos básicos, las simples, las dobles y las múltiples. Simples: Las estructuras condicionales simples se les conocen como “Tomas de decisión”. Estas tomas de decisión tienen la siguiente forma:
Pseudocódigo:
Diagrama de flujo:
Dobles: Las estructuras condicionales dobles permiten elegir entre dos opciones o alternativas posibles en función del cumplimiento o no de una determinada condición. Se representa de la siguiente forma: Pseudocódigo:
Diagrama de flujo:
Donde: Si: Indica el comando de comparación
Condición: Indica la condición a evaluar Entonces: Precede a las acciones a realizar cuando se cumple la condición Instrucción(es): Son las acciones a realizar cuando se cumple o no la condición si no: Precede a las acciones a realizar cuando no se cumple la condición
Dependiendo de si la comparación es cierta o falsa, se pueden realizar una o más acciones. Múltiples: Las estructuras de comparación múltiples, son tomas de decisiones especializadas que permiten comparar una variable contra distinta posibles resultados, ejecutando para cada caso una serie de instrucciones específicas. La forma común es la siguiente: Pseudocódigo:
Múltiples (En caso de):
Diagrama de flujo:
Las estructuras de comparación múltiples, es una toma de decisión especializada que permiten evaluar una variable con distintos posibles resultados, ejecutando para cada caso una serie de instrucciones especificas. La forma es la siguiente: Pseudocódigo:
Diagrama de flujo:
Veamos algunos ejemplos donde se aplique todo lo anterior: Realizar un algoritmo en donde se pide la edad del usuario; si es mayor de edad debe aparecer un mensaje indicándolo. Expresarlo en Pseudocódigo y Diagrama de flujos. Pseudocódigo:
Diagrama de flujo:
Se pide leer tres notas del alumno, calcular su definitiva en un rango de 0-5 y enviar
un mensaje donde diga si el alumno aprobó o reprobó el curso. Exprese el algoritmo usando Pseudocódigo y diagrama de flujos. Pseudocódigo: INICIO Not1, Not2, Not 3 :REAL Def: REAL
LEA Nota1, Nota2, Nota3 Def ß (Not1 + Not2 + Not3) /3 Si Def < 3 entonces
Escriba “Reprobó el curso”
Sino
Escriba “Aprobó el curso” Fin-Si
FIN
Diagrama de flujo:
Se desea escribir un algoritmo que pida la altura de una persona, si la altura es menor o igual a 150 cm envíe el mensaje: “Persona de altura baja”; si la altura está entre 151 y 170 escriba el mensaje: “Persona de altura media” y si la altura es mayor al 171 escriba el mensaje: “Persona alta”. Exprese el algoritmo usando Pseudocódigo y diagrama de flujos. Pseudocódigo: INICIO
Altura: ENTERO
ESCRIBA “Cuál es tu altura? ” LEA Altura
Si Altura <=150 entonces ESCRIBA “persona de altura baja”
Sino
Si Altura <=170 entonces ESCRIBA “persona de altura media”
Sino
Si Altura>170 ENTONCES ESCRIBA “persona alta”
Fin-Si Fin-Si
Fin-Si FIN
¡Es importante ser ordenado en el código que se escribe!
Diagrama de flujo:
Dado un numero entre 1 y 7 escriba su correspondiente día de la semana así: 1- Lunes 2- Martes 3- Miércoles 4- Jueves 5- Viernes 6- Sábado 7- Domingo Exprese el algoritmo usando Pseudocódigo y diagrama de flujos. Pseudocódigo: Pseudocódigo: INICIO
Dia: ENTERO
ESCRIBA “Diga un número para escribir su día” LEA Dia
En-caso-de Dia haga
Caso 1: ESCRIBA “Lunes”
Caso 2: ESCRIBA “Martes”
Caso 3: ESCRIBA “Miércoles” Caso 4: ESCRIBA “Jueves”
Caso 5: ESCRIBA “Viernes” Caso 6: ESCRIBA “Sábado”
Caso 7: ESCRIBA “Domingo”
SINO: ESCRIBA “Escribió un numero fuera del rango 1-7”
Fin-Caso
FIN
Diagrama de flujo:
Explicamos las tres posibles estructuras cíclicas; Para, mientras, repetir.
Complementamos con tres ejemplos para la correcta asimilación de estas estructuras. Se llaman problemas repetitivos o cíclicos a aquellos en cuya solución es necesario utilizar un mismo conjunto de acciones que se puedan ejecutar una cantidad
específica de veces. Esta cantidad puede ser fija (previamente determinada por el programador) o puede ser variable (estar en función de algún dato dentro del programa). Los ciclos se clasifican en: Ciclos con un Número Determinado de Iteraciones
(Para): Son aquellos en que el número de iteraciones se conoce antes de ejecutarse el ciclo. La forma de esta estructura es la siguiente: Pseudocódigo
Diagrama de Flujos
Dado un valor inicial exp1 asignado a la variable esta se irá aumentando o disminuyendo de acuerdo a la exp3 hasta llegar a la exp2; si se omite el paso, significa que la variable aumentará de uno en uno Ciclos con un Número Indeterminado de Iteraciones Son aquellos en que el número de iteraciones no se conoce con exactitud, ya que esta dado en función de un dato dentro del programa.
Mientras Que: Esta es una estructura que repetirá un proceso durante “N” veces, donde “N” puede ser fijo o variable. Para esto, la instrucción se vale de una condición que es la que debe cumplirse para que se siga ejecutando. Cuando la condición ya no se cumple, entonces ya no se ejecuta el proceso. La forma de esta estructura es la
siguiente: Pseudocódigo
Diagrama de Flujos
Repita-Hasta: Esta es una estructura similar en algunas características, a la anterior. Repite un proceso una cantidad de veces, pero a diferencia del Mientras Que, el Repita-Hasta lo hace hasta que la condición se cumple y no mientras, como en el Mientras Que. Por otra parte, esta estructura permite realizar el proceso cuando menos una vez, ya que la condición se evalúa al final del proceso, mientras que en el Mientras Que puede ser que nunca llegue a entrar si la condición no se cumple desde un principio. La forma de esta estructura es la siguiente:
Pseudocódigo
Diagrama de Flujos
Ejemplo 1:
Realizar un algoritmo que muestre los números de uno en uno hasta diez usando una estructura Para. Exprese el algoritmo usando Pseudocódigo y diagrama de flujos. Pseudocódigo
Diagrama de Flujos
Ejemplo 2:
Usando una estructura Mientras, realizar un algoritmo que escriba los números de uno en uno hasta 20 Pseudocódigo
Diagrama de Flujos
Ejemplo 3:
Realizar un algoritmo que pregunte al usuario un número comprendido en el rango de 1 a 5. El algoritmo deberá validar el número, de manera que no continúe la ejecución del programa mientras no se escriba un número correcto. Pseudocódigo
Diagrama de Flujos
Tipos de algoritmos según su función
Algoritmo de ordenamiento
Algoritmo de búsqueda
Técnicas de diseño de algoritmos
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 sus problemas 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 determinanticos: el comportamiento del algoritmo es lineal: cada paso del algoritmo tiene únicamente un paso sucesor y otro antecesor.
Algoritmos no determinanticos: 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.
Meta heurí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 (back tracking): se construye el espacio de soluciones del problema en un árbol que se examina completamente, almacenando las soluciones menos costosas.
Explicamos las estructuras secuenciales, cómo se representan en pseudocódigo y algunos ejemplos prácticos de las mismas. La estructura secuencial es aquella en la que una acción (instrucción) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso. En Pseudocódigo una Estructura Secuencial se representa de la siguiente forma:
Observe el siguiente problema de tipo cotidiano y sus respectivos algoritmos representados en Pseudocódigo y en diagramas de flujos: • Tengo un teléfono y necesito llamar a alguien pero no sé cómo hacerlo.
El anterior ejemplo es un sencillo algoritmo de un problema cotidiano dado como muestra de una estructura secuencial. Ahora veremos los componentes que pertenecen a ella: Asignación
La asignación consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona será reconocida con el nombre de la variable que recibe el valor. La asignación se puede clasificar de la siguiente forma:
Simples: Consiste en pasar un valor constante a una variable (a
Contador: Consiste en usarla como un verificador del numero de veces que se realiza un proceso (a
15)
a + 1)
Acumulador: Consiste en usarla como un sumador en un proceso (a
De trabajo: Donde puede recibir el resultado de una operación matemática que involucre muchas variables (a
c + b*2/4).
En general el formato a utilizar es el siguiente: < Variable > El símbolo
debe leerse “asigne”.
<valor o expresión >
a + b)
Escritura o salida de datos
Consiste en mandar por un dispositivo de salida (p.ej. monitor o impresora) un resultado o mensaje. Esta instrucción presenta en pantalla el mensaje escrito entre comillas o el contenido de la variable. Este proceso se representa así como sigue:
Lectura o entrada de datos
La lectura o entrada de datos consiste en recibir desde un dispositivo de entrada (p.ej. el teclado) un valor o dato. Este dato va a ser almacenado en la variable que aparece a continuación de la instrucción. Esta operación se representa así:
DECLARACION DE VARIABLES Y CONSTANTES
La declaración de variables es un proceso que consiste en listar al principio del algoritmo todas las variables que se usarán, además de colocar el nombre de la variable se debe decir qué tipo de variable es. Contador: ENTERO Edad, I: ENTERO
Direccion : CADENA_DE_CARACTERES Salario_Basico : REAL Opcion : CARACTER En la anterior declaración de variables Contador, Edad e I son declaradas de tipo entero; Salario_Basico es una variable de tipo real, Opcion es de tipo carácter y la
variable Direccion está declarada como una variable alfanumérica de cadena de caracteres. En el momento de declarar constantes debe indicarse que lo es y colocarse su respectivo valor. CONSTANTE Pi 3.14159 CONSTANTE Msg “Presione una tecla y continúe” CONSTANTE ALTURA 40 Cuando se trabaja con algoritmos por lo general no se acostumbra a declarar las variables ni tampoco constantes debido a razones de simplicidad, es decir, no es
camisa de fuerza declarar las variables. Sin embargo en este curso lo haremos para todos los algoritmos que realicemos, con esto logramos hacerlos más entendibles y
organizados y de paso permite acostumbrarnos a declararlas ya que la mayoría de los lenguajes de programación (entre ellos el C++) requieren que necesariamente se declaren las variables que se van a usar en los programas. Veamos algunos ejemplos donde se aplique todo lo que hemos visto hasta el momento sobre algoritmos: Ejemplo 1: Escriba un algoritmo que pregunte por dos números y muestre como resultado la suma de estos. Use Pseudocódigo y diagrama de flujos.
Ejemplo 2: Escriba un algoritmo que permita conocer el รกrea de un triรกngulo a partir
de la base y la altura. Exprese el algoritmo usando Pseudocรณdigo y diagrama de flujos.
En computación y matemáticas un algoritmo de ordenamiento es un algoritmo que pone
elementos de una lista o un vector en una secuencia dada por una relación de orden, es decir, el resultado de salida ha de ser una permutación —o reordenamiento— de la entrada que
satisfaga la relación de orden dada. Las relaciones de orden más usadas son el orden numérico y el orden. Ordenamientos eficientes son importantes para optimizar el uso de otros
algoritmos (como los de búsqueda y fusión) que requieren listas ordenadas para una ejecución rápida. También es útil para poner datos en forma canónica y para generar resultados legibles por humanos.
Desde los comienzos de la computación, el problema del ordenamiento ha atraído gran
cantidad de investigación, tal vez debido a la complejidad de resolverlo eficientemente a pesar de su planteamiento simple y familiar. Por ejemplo, Bubble Short fue analizado desde
1956.1 Aunque muchos puedan considerarlo un problema resuelto, nuevos y útiles algoritmos de ordenamiento se siguen inventado hasta el día de hoy (por ejemplo, el ordenamiento de biblioteca se publicó por primera vez en el 2004). Los algoritmos de ordenamiento son
comunes en las clases introductorias a la computación, donde la abundancia de algoritmos
para el problema proporciona una gentil introducción a la variedad de conceptos núcleo de los algoritmos, como notación de O mayúscula, algoritmos divide y vencerás, estructuras de datos, análisis de los casos peor, mejor, y promedio, y límites inferiores.
Clasificación Los algoritmos de ordenamiento se pueden clasificar en las siguientes maneras: La más común es clasificar según el lugar donde se realice la ordenación o
Algoritmos de ordenamiento interno: en la memoria del ordenador.
o
Algoritmos de ordenamiento externo: en un lugar externo como un disco duro.
Por el tiempo que tardan en realizar la ordenación, dadas entradas ya ordenadas o inversamente ordenadas: o
Algoritmos de ordenación natural: Tarda lo mínimo posible cuando la entrada está ordenada.
o
Algoritmos de ordenación no natural: Tarda lo mínimo posible cuando la entrada está inversamente ordenada.
Por estabilidad: un ordenamiento estable mantiene el orden relativo que tenían
originalmente los elementos con claves iguales. Por ejemplo, si una lista ordenada por fecha se reordena en orden alfabético con un algoritmo estable, todos los elementos cuya clave alfabética sea la misma quedarán en orden de fecha. Otro caso sería
cuando no interesan las mayúsculas y minúsculas, pero se quiere que si una clave aBC estaba antes que AbC, en el resultado ambas claves aparezcan juntas y en el orden
original: aBC, AbC. Cuando los elementos son indistinguibles (porque cada elemento se ordena por la clave completa) la estabilidad no interesa. Los algoritmos de
ordenamiento que no son estables se pueden implementar para que sí lo sean. Una
manera de hacer esto es modificar artificialmente la clave de ordenamiento de modo
que la posición original en la lista participe del ordenamiento en caso de coincidencia.
Los algoritmos se distinguen por las siguientes características:
Complejidad computacional (peor caso, caso promedio y mejor caso) en términos de n, el
tamaño de la lista o arreglo. Para esto se usa el concepto de orden de una función y se usa
la notación O(n). El mejor comportamiento para ordenar (si no se aprovecha la estructura
de las claves) es O(n log n). Los algoritmos más simples son cuadráticos, es decir O(n²). Los algoritmos que aprovechan la estructura de las claves de ordenamiento (p. ej. bucket sort)
pueden ordenar en O(kn) donde k es el tamaño del espacio de claves. Como dicho tamaño es conocido a priori, se puede decir que estos algoritmos tienen un desempeño lineal, es decir O(n).
Uso de memoria y otros recursos computacionales. También se usa la notación O(n).
Estabilidad Los algoritmos de ordenamiento estable mantienen un relativo pre orden total. Esto significa que un algoritmo es estable solo cuando hay dos registros R y S con la misma clave y con R apareciendo antes que S en la lista original.
Cuando elementos iguales (indistinguibles entre sí), como números enteros, o más
generalmente, cualquier tipo de dato en donde el elemento entero es la clave, la estabilidad no es un problema. De todas formas, se asume que los siguientes pares de números están por ser ordenados por su primer componente: (4, 1)
(3, 7)
(3, 1)
(5, 6)
En este caso, dos resultados diferentes son posibles, uno de los cuales mantiene un orden relativo de registros con claves iguales, y una en la que no: (3, 7)
(3, 1)
(4, 1)
(5, 6)
(orden mantenido)
(3, 1)
(3, 7)
(4, 1)
(5, 6)
(orden cambiado)
Los algoritmos de ordenamiento inestable pueden cambiar el orden relativo de registros con
claves iguales, pero los algoritmos estables nunca lo hacen. Los algoritmos inestables pueden ser implementados especialmente para ser estables. Una forma de hacerlo es extender
artificialmente el cotejamiento de claves, para que las comparaciones entre dos objetos con claves iguales sean decididas usando el orden de las entradas original. Recordar este orden entre dos objetos con claves iguales es una solución poco práctica, ya que generalmente acarrea tener almacenamiento adicional.
Ordenar según una clave primaria, secundaria, terciara, etc., puede ser realizado utilizando cualquier método de ordenamiento, tomando todas las claves en consideración (en otras
palabras, usando una sola clave compuesta). Si un método de ordenamiento es estable, es posible ordenar múltiples ítems, cada vez con una clave distinta. En este caso, las claves necesitan estar aplicadas en orden de aumentar la prioridad.
Ejemplo: ordenar pares de nĂşmeros, usando ambos valores (4, 1)
(3, 7)
(3, 1)
(4, 6) (original)
(4, 1)
(3, 1)
(4, 6)
(3, 7) (despuĂŠs de ser ordenado por el segundo valor)
(3, 1)
(3, 7)
(4, 1)
(4, 6) (despuĂŠs de ser ordenado por el primer valor)
Por otro lado: (3, 7)
(3, 1)
(4, 1)
(4, 6) (despuĂŠs de ser ordenado por el primer valor)
(3, 1)
(4, 1)
(4, 6)
(3, 7) (despuĂŠs de ser ordenando por el segundo valor, el orden por el primer valor es perturbado)
Lista de algoritmos de ordenamiento Algunos algoritmos de ordenamiento agrupados según estabilidad tomando en cuenta la complejidad computacional.
Estables
Nombre traducido
Nombre original
Complejidad
Memoria
Método
Ordenamiento de burbuja
Bubblesort
O(n²)
O(1)
Intercambio
Cocktail sort
O(n²)
O(1)
Intercambio
Ordenamiento por selección
Selection Sort
O(n²)
O(1)
Intercambio
Ordenamiento por inserción
Insertion sort
O(n²)
O(1)
Inserción
Ordenamiento por casilleros
Bucket sort
O(n)
O(n)
Ordenamiento por cuentas
Counting sort
O(n+k)
O(n+k)
Ordenamiento por mezcla
Merge sort
O(n log n)
O(n)
Mezcla
Binary tree sort
O(n log n)
O(n)
Inserción
Pigeonhole sort
O(n+k)
O(k)
Radix sort
O(nk)
O(n)
Ordenamiento de burbuja bidireccional
Ordenamiento con árbol binario
Ordenamiento Radix
No comparativo
No comparativo
No
comparativo
Distribution sort
O(n³) versión recursiva
O(n²)
Gnome sort
O(n²)
O(1)
Inestables
Nombre traducido
Nombre original
Complejidad
Memoria
Método
Ordenamiento Shell
Shell sort
O(n1.25)
O(1)
Inserción
Comb sort
O(n log n)
O(1)
Intercambio
Ordenamiento por selección
Selection sort
O(n²)
O(1)
Selección
Ordenamiento por montículos
Heapsort
O(n log n)
O(1)
Selección
Smoothsort
O(n log n)
O(1)
Selección
O(log n)
Partición
Memoria
Método
Ordenamiento rápido
Quicksort
Several Unique Sort
Promedio: O(n log n), peor caso: O(n²)
Promedio: O(n u), peor caso: O(n²);
u=n; u = número único de registros
Cuestionables, imprácticos
Nombre traducido
Nombre original
Complejidad
Bogosort
O(n × n!), peor: no termina
Pancake sorting
Ordenamiento Aleatorio
Randomsort
O(n), excepto en
mรกquinas de Von Neumann
Promedio: O(n!) Peor: No termina
Un algoritmo de búsqueda es aquel que está diseñado para localizar un elemento con ciertas
propiedades dentro de una estructura de datos; por ejemplo, ubicar el registro correspondiente a cierta persona en una base de datos, o el mejor movimiento en una partida de ajedrez. La variante más simple del problema es la búsqueda de un número en un vector. Búsqueda dicotómica Elementos necesarios en una búsqueda: log2(n) donde n = elementos de la búsqueda Ejemplo: log2(1.000.000) ≈ 20
Búsqueda secuencial Se utiliza cuando el vector no está ordenado o no puede ser ordenado previamente. Consiste en buscar el elemento comparándolo secuencialmente (de ahí su nombre) con cada elemento del
vector hasta encontrarlo, o hasta que se llegue al final. La existencia se puede asegurar cuando el elemento es localizado, pero no podemos asegurar la no existencia hasta no haber analizado todos los elementos del vector. A continuación se muestra el pseudocódigo del algoritmo: Datos de entrada: vec: vector en el que se desea buscar el dato tam: tamaño del vector. Los subíndices válidos van desde 0 hasta tam-1 inclusive. Puede representarse así:
vec[0...tam) o vec[0...tam-1].
dato: elemento que se quiere buscar. Variables pos: posición actual en el vector pos = 0 while pos < tam: if vec[pos] == dato: Retorne
verdadero y/o pos,
else: pos = pos + 1 Fin (while)
Retorne falso,
C
int busquedaSimple(int
vector[n], int n, int dato) {
int i; for(i=0; i<n; i++){ if(dato==vector[i]) { return i; break; } } return -1; }
Búsqueda dicotómica (binaria) Se utiliza cuando el vector en el que queremos determinar la existencia de un elemento está previamente ordenado. Este algoritmo reduce el tiempo de búsqueda considerablemente, ya que disminuye exponencialmente el número de iteraciones necesarias.
Está altamente recomendado para buscar en arrays de gran tamaño. Por ejemplo, en uno
conteniendo 50.000.000 elementos, realiza como máximo 26 comparaciones (en el peor de los casos).
Para implementar este algoritmo se compara el elemento a buscar con un elemento cualquiera del array (normalmente el elemento central): si el valor de éste es mayor que el del elemento
buscado se repite el procedimiento en la parte del array que va desde el inicio de éste hasta el elemento tomado, en caso contrario se toma la parte del array que va desde el elemento
tomado hasta el final. De esta manera obtenemos intervalos cada vez más pequeños, hasta que se obtenga un intervalo indivisible. Si el elemento no se encuentra dentro de este último entonces se deduce que el elemento buscado no se encuentra en todo el array.
A continuación se presenta el pseudocódigo del algoritmo, tomando como elemento inicial el elemento central del array.
Datos de entrada: vec: vector en el que se desea buscar el dato tam: tamaño del vector. Los subíndices válidos van desde 0 hasta tam-1 inclusive. dato: elemento que se quiere buscar. Variables centro: subíndice central del intervalo inf: límite inferior del intervalo sup: límite superior del intervalo inf = 0 sup = tam-1 Mientras inf <= sup: centro = ((sup - inf) / 2) + inf // División entera: se trunca la fracción Si vec[centro] == dato devolver verdadero y/o pos, de lo contrario: Si dato < vec[centro] entonces: sup = centro - 1 En caso contrario: inf = centro + 1 Fin (Mientras) Devolver Falso
Se enfoca en algoritmos eficientes en optimización discreta, combinatoria y continua y online, en teoría de grafos, aplicaciones internet y análisis de ficheros de texto (stringología) y también para la evaluación de consultas particulares de bases de datos muy grandes en genómica, recuperación de imágenes búsquedas en la web y geometría elemental. Complejidad en computación científica (cotas superiores e inferiores de complejidad en el contexto numérico, seminumérico y simbólico). Campos: Teoría general de grafos, optimización lineal y no-lineal, local y global, algoritmos on- line, Knowledge Management, microeconomía y algorítmica de publicidad on-line, complejidad de Kolmogorov y azar, algoritmos para problemas de palabras (stringology) con aplicaciones en genómica, álgebra lineal numérica, sampling, teoría de números efectiva, criptografía, constraint data bases, geometría algebraica, semialgebraica y diofántica efectiva (Computer Algebra), teoría algebraica de la complejidad.
Grupos de Investigación/Temas: - Algoritmos sobre palabras/secuencias y aplicaciones
Nos dedicamos a problemas sobre palabras (secuencias, strings), especialmente en temas de aleatoriedad y combinatoria, con un enfoque que integra la teoría y la práctica. Diseñamos e implementamos algoritmos y estructuras de datos para volúmenes muy grandes de datos, donde la complejidad de representación, complejidad tiempo y complejidad memoria son cruciales. También trabajamos en la visualización, ideando e implementando interfaces para mostrar los resultados computacionales. Uno de los proyectos actuales, en colaboración con especialistas en genómica comparativa, trata sobre secuencias de ADN. Dimos una aproximación computable y eficientemente calculable de la función de complejidad de Kolmogorov, garantizando buenas propiedades matemáticas, como la sub aditivita. Usamos nuestra función para aproximar la cantidad de información de distintos genomas que los biólogos interpretan desde la perspectiva genómica y evolutiva. Este proyecto incluye temas de algorítmica, complejidad, cómputo de alta performance y diálogo interdisciplinario.
- Algoritmos y Herramientas computacionales para los motores búsqueda y la publicidad online La venta de publicidad asociada a los resultados de las búsquedas o a los contenidos de una página se ha convertido en la mayor fuente de ingresos de las principales empresas del sector, y su importancia relativa continúa creciendo. Las decisiones acerca de cuántos y cuáles avisos elegir, en qué orden mostrarlos, cómo y cuánto cobrarlos, abren un amplio campo de investigación que vincula distintas disciplinas, en la búsqueda de mecanismos que permitan satisfacer los intereses de los distintos actores involucrados (editores, anunciantes y usuarios), con propiedades de eficiencia y practicidad adecuadas a las características de la aplicación (masividad, velocidad de respuesta requerida, etc.). Se busca analizar tanto teórica como experimentalmente los mecanismos actualmente en uso y otros nuevos, con el objeto de proveer nuevas herramientas a los participantes de esta importante y novedosa actividad económica. Otra línea de investigación de este grupo consiste en el diseño de algoritmos y estructuras de datos más eficientes para la recuperación de información, en particular la construcción de índices distribuidos. - Criptografía El tema central de investigación es el desarrollo de algoritmos poligonales de factorización de enteros, esencial para la seguridad del método estándar de criptografía de clave pública (RSA).
- Investigación en Grafos y Optimización: Teoría y Aplicaciones Dentro del área de Teoría de Grafos, las principales líneas de investigación son: Coloreo de grafos; Caracterizaciones estructurales de clases de grafos; Complejidad computacional. Dentro de lo que es Optimización Combinatoria, las principales áreas abordadas son: Combinatoria poliedral; Problemas de scheduling deportivo; Aplicaciones a problemas reales (ruteo de vehículos, logística); Aplicaciones en teoría de juegos. Los profesores del DC que dirigen el grupo son Flavia Bonomo y Javier Marenco. El grupo está dirigido también por Guillermo Durán (DM, FCEN-UBA), y se completa con investigadores y tesistas del DC, el DM y del Instituto de Ciencias la UNGS. A su vez tiene una activa colaboración con investigadores de primer nivel internacional. Con respecto a los proyectos aplicados, entre los últimos se encuentran la segmentación de viviendas para el Censo Nacional 2010, la planificación de la recolección de residuos en contenedores en la zona sur de la Ciudad de Buenos Aires, el diseño del fixture de la liga de primera división de vóley masculino, el diseño de un modelo matemático para administrar la licitación de Internet para las escuelas públicas de la Ciudad de Buenos Aires y la implementación de modelos de simulación para el Sistema de Administración de Aportes de Productores en el ámbito de la Ciudad de Buenos Aires.
- Teoría de Grafos: Realiza investigaciones en el área de combinatoria, teoría de algoritmos y estructuras de datos complejas. Se estudian propiedades de diferentes clases de grafos, se caracterizan estas clases y se estudia el problema de reconocimiento de las mismas. Por otro lado, desarrollamos nuevos algoritmos que resuelven problemas ya resueltos en la literatura, intentando mejorar la "eficiencia" de las soluciones conocidas.
Modelos computacionales Un modelo computacional es un modelo matemático en las ciencias de la computación que
requiere extensos recursos computacionales para estudiar el comportamiento de un sistema complejo por medio de la simulación por computadora. El sistema bajo estudio es a menudo un sistema complejo no lineal para el cual las soluciones analíticas simples e intuitivas no
están fácilmente disponibles. En lugar de derivar una solución analítica matemática para el
problema, la experimentación es hecha con el modelo cambiando los parámetros del sistema en la computadora, y se estudian las diferencias en el resultado de los experimentos. Las teorías de la operación del modelo se pueden derivar/deducir de estos experimentos de computacionales.
Ejemplos de modelos de computacionales comunes son modelos de el pronóstico del tiempo, modelos del Earth Simulator, modelos de simulador de vuelo, modelos de plegamiento molecular de proteínas, y modelos de red neuronal.
Se considera a los algoritmos al conjunto de pasos ordenados, que permiten resolver un problema bajo una secuencia lógica, es decir, que tenga inicio y fin (sentido concreto).
Programas: Algoritmos para ser ejecutados por un ordenador Un ordenador o computadora está, desde que se enciende hasta que se apaga totalmente,
ejecutando un algoritmo. Por lo general, estos algoritmos, escritos para que los entienda una máquina, terminan siendo vagos y confusos para la mayoría de quienes no han estudiado
programación. Una máquina no puede entender "escribe Hola Mundo!" porque no sabe lo que es "escribe" ni lo que es una letra o un espacio, ni lo que es una pantalla. En cambio, puede
entender "mov eax, 0x23afb31" (escribir en el registro eax el número 0x23afb31), aunque nosotros no. Un ordenador es solo un circuito electrónico, no funciona a base de magia ni nada por el estilo.
Debido a lo dificil que es escribir en lenguaje máquina, e incluso en ensamblador, se crearon diferentes lenguajes de programación, más o menos parecidos al inglés actual y a cómo se
redacta un algoritmo. Estos lenguajes proveen de cosas tan complejas para una máquina como
los bucles for. Los compiladores se encargan de traducir esos ficheros al lenguaje ensamblador que corresponda, el ensamblador de traducirlos a lenguaje máquina y el enlazador de juntar
todo ese código máquina en un solo archivo, el programa. Y el microprocesador, se encarga de ir encendiendo o apagando transistores según lo que le diga el código máquina. Es facil
entender el lenguaje de alto nivel en comparacion al lenguaje maquina pero de la evolucion surgieron.
¿Qué instrucciones ejecuta un ordenador? Lenguaje de máquina Cada tipo de microprocesador contiene un conjunto de instrucciones que realizan ciertas
operaciones sobre una o más palabras de bits; las instrucciones van también codificadas en
bits. No queremos hacer aquí una discusión sobre arquitectura de ordenadores, por lo que con esto debe valer por ahora.
Se entiende que escribir sólo con dos teclas, el 0 y el 1, es incómodo. Históricamente, a la hora de diseñar un algoritmo para que el ordenador ejecutara, se escribía mediante unas etiquetas memotécnicas; éste fue el origen del lenguaje ensamblador. Por ejemplo quizás en una cierta
arquitectura la instrucción de borrado de memoria (Memory Clear, en inglés) corresponda al código 010. Pronto surgieron programas que leían, siguiendo el ejemplo, MC, y lo sustituían por 010.
Lenguaje ensamblador El código máquina tenía dos grandes inconvenientes para los programadores: las instrucciones eran difíciles de recordar, ya que no guardaban relación con la operación que se está realizando.
puede haber, y de hecho hay, diferencias entre las instrucciones de un procesador a otro.
Todo esto ha llevado a "poner nombre" a las instrucciones de código máquina de manera que a una secuencia concreta de bits que realiza una operación se le pone un nombre sencillo que
identifique la operación. Esta traducción a un lenguaje más sencillo para las personas resulta en una mayor comodidad para el programador, además el proceso de traducción inverso de lenguaje ensamblador a código máquina puede ser realizado por un sencillo programa.
Programación para seres humanos Lenguajes de alto nivel Sobre este lenguaje ensamblador inicial se fueron construyendo otros lenguajes de
programación de más alto nivel; esto significa que ocultan ciertos aspectos de manera que el programador no se ha de preocupar sobre si en la máquina que quiere que se ejecute el algoritmo el MC corresponde a la instrucción 101 o 010. Se produce, por tanto, una
abstracción de datos, muy deseable para poder utilizar el trabajo de otros para avanzar un
paso más en vez de tener que "reinventar la rueda", como se suele decir. Estos textos en los que se codifican los algoritmos son los códigos fuente; siguen las reglas sintácticas de un
determinado lenguaje de programación. Existen numerosos lenguajes de programación, y se
utiliza uno u otro según sus características se adecúen más o menos a la resolución de nuestro problema.
Traductores e intérpretes Tras la escritura del algoritmo, un compilador o un intérprete (otros programas)
transformarán el texto en código máquina que el procesador es capaz de ejecutar. Toda esta abstracción permite resolver problemas alejados de sumar números binarios, como pueden ser la consulta de esta misma enciclopedia o jugar a un videojuego en 3D.
Lenguajes interpretados vs. lenguajes compilados Los lenguajes interpretados son como respuesta a la dificultad de manejo de los compilados. Un lenguaje compilado es sólo apto para un sistema operativo o formato de ejecutable (en GNU/Linux y Unix System V es ELF, en Windows o incluso en BSD es muy diferente), y es tedioso de manejar: para comprobar bugs o errores el computador debe: Compilar cada uno de los ficheros de código. Ensamblarlos en ficheros objeto. Enlazar los ficheros objeto. Volverlos a ensamblar.
Todo eso no es gran derroche de recursos para un ordenador medio actualmente, pero dura sus 10 o 15 segundos. En cambio, con un lenguaje interpretado, el programa intérprete
analiza el fichero de código y lo va ejecutando en tiempo real, sin compilarlo ni ensamblarlo. Otra de las ventajas de los lenguajes interpretados es que son multiplataforma: un programa
en Perl, por ejemplo, no debe ser compilado dos veces (una para Unix y otra para Windows). Con que haya diferentes versiones del intérprete en cada uno de esos ordenadores, específicamente compilados para ellos, basta. Sus desventajas:
Consume muchos recursos de memoria, sobre todo RAM.
Se depende del intérprete: si no tienes instalado el intérprete que corresponda, no podrás ejecutar el programa.
Ejemplos de lenguajes interpretados son PHP, Perl, Python, Tcl/Tk, BASIC, LISP (en algunas de sus versiones)...
En conclusión diríamos que el algoritmo es de carácter general y puede aplicarse a cualquier operación matemática o a cualquier problema.
La formulación de algoritmos fue uno de los más grandes adelantos dentro de la ciencia matemática ya que a partir de ellos se pudieron resolver infinidad de problemas.
Los Algoritmos son una manera de expresar cualquier situación por medio de una secuencia de pasos ordenados y lógicos que buscan el aclaramiento de cualquier problema para así identificar lo que se necesita, como se hace y el resultado final, el cual debe ser igual siempre por lo que se busca que hayan alternativas para cualquier solución posible.
Los diagramas de flujo son la representación gráfica de un algoritmo y tiene como finalidad
lograr una mayor comprensión de este. Está compuesto por diversos símbolos que especifican
las diversas partes del algoritmo, como los componentes iniciales, los procedimientos, las diversas posibilidades y los resultados.
https://es.wikibooks.org/wiki/Fundamentos_de_programaci%C3%B3n/Algoritmos_y_programas http://www.rodolfoquispe.org/blog/que-es-un-algoritmo.php https://es.wikipedia.org/wiki/Algoritmo https://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento https://es.wikipedia.org/wiki/Algoritmo_de_b%C3%BAsqueda http://www.lcc.uma.es/~av/Libro/ http://webdiis.unizar.es/asignaturas/EDA/ http://dis.um.es/~domingo/alg.html http://www.carlospes.com/curso_de_algoritmos http://www.algoritmia.net/ http://www.monografias.com/trabajos71/word-power-ponit-excel-algoritmos/word-power-ponit-excelalgoritmos2.shtml#ixzz3fnvS7D00
http://www.dc.uba.ar/grupinv/invop http://www.dc.uba.ar/inv/grupos/grafos Kapow: http://kapow.dc.uba.ar https://es.wikipedia.org/wiki/Diagrama_de_flujo http://www.desarrolloweb.com/articulos/2225.php http://makeyna2.angelfire.com/Manual_DFD.pdf http://www.alegsa.com.ar/Dic/variable.php https://edgardobuelvas0407.wordpress.com/generalidades/anexo-3-fundamentos-de-un-algoritmo/partesy-elementos-para-la-construccion-de-un-algoritmo/variables-constantes-y-expresiones/formas-derepresentar-un-algoritmo/