-7753353860805606415386080INSTITUTO POLITECNICO NACIONALUNIDAD PROFESIONAL INTERDISCIPLINARIA DE INGENIERIA Y   CIENCIAS S...
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Unidad 3 Conceptos de Programación
Upcoming SlideShare
Loading in …5
×

Unidad 3 Conceptos de Programación

2,542 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,542
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
113
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Unidad 3 Conceptos de Programación

  1. 1. -7753353860805606415386080INSTITUTO POLITECNICO NACIONALUNIDAD PROFESIONAL INTERDISCIPLINARIA DE INGENIERIA Y CIENCIAS SOCIALES Y ADMINISTRATIVAS2 DE OCTUBRE DEL 2009THE BOOBS Secuencia: 1CM1“UNIDAD 3 “CONCEPTOS DE PROGRAMACIONLICENCIATURA EN CIENCIAS DE LA INFORMÁTICAIntegrantes:MENDOZA ESPINOSA DIANA CECILIA PAREDES CARRILLO NATALYTREJO SÀNCHEZ JESSICA DANIELAZAGAL DOÌINGUEZ GLORIA EVAFUNDAMENTOS DE LA COMPUTACIÓN<br />Tabla de contenidoINTRODUCCIÓN33.1 Como determinar que un problema sea resuelto por computadora63.1.1 La forma en que los programas resuelven problemas103.2 Soluciones lógicas13 3.2.1 Algoritmo133.2.2 Pseucódigo14 3.2.3 Compuertas o puertas lógicas 173.3 Diagrama lógico 183.3.1 Diagrama de flujo 193.3.2 Diagrama de Gantt 203.3.3 Diagrama de Pert 223.3.4 Diagrama de Venn 233.3.5 Diagrama de Procedimiento 243.3.6 Diagrama de Karnaugh- Simplificación 253.3.7 Diagrama de lluvia de ideas 273.4 Lenguaje de programación28 3.4.1 Programa30 3.4.2 Fases de creación de un programa 323.5 Lenguaje máquina363.6 Traductor de lenguajes38 3.6.1 Traductores42 3.6.2 Compiladores43 3.6.3 Ensamblador 483.6.4 Clasificación de compiladores513.7 Elementos de programación523.7.1 Tipos de datos523.7.1.1 Estáticos 523.7.1.2 Dinámicos 553.7.1.3 Simples 553.7.1.4 Estructurados 563.7.1.5 Ordinales 573.7.2 Operadores lógicos 603.8 Programación estructurada 603.8.1 Técnicas de programación 603.8.1.1 Programación modular 603.8.1.2 Programación estructurada 613.8.3 Visión moderna de un programa estructurado 64CONCLUSION67BIBLIOGRAFIA69<br />INTRODUCCIÓN<br />Desde que la computadora tuvo la capacidad de realizar tareas por si sola se vio en la necesidad de seguir reglas que regularan el uso de sus funciones utilizando diversos métodos para su comprensión...<br />Se baso en instrucciones que se vieron apoyadas por una serie de métodos que permitieron agrupar información. <br />Esta información debía de ser comprendida por el ordenador ya que las computadoras no usan un lenguaje como el del humano, si no que este debe de ser interpretado para llegar a un nivel en el que las instrucciones sean entendidas por el ordenador. Introduciendo así el uso de medios tales como algoritmos, diagramas de diversos tipos, pseucódigo, etc. Que permitieron organizar ideas para la información que tenía que ser interpretada.<br />De aquí que surgen los lenguajes de programación, mediante los cuales se desarrollan instrucciones que nos permiten llegar a un fin especifico. <br />Con el tiempo, estos fueron evolucionando en complejidad y en uso, debido a esto se sentaron bases para el desarrollo de programas marcando una pauta y división en su uso, surgiendo así distintos tipos de programación que satisfacían diferentes requerimientos.<br />Al organizarse la forma en que trabajarían los programas surgieron especificaciones de diversa índole, creando instrucciones delimitadas que se seguirían como patrón en la elaboración de estos apareciendo así el uso de “palabras” universales en cada programa para su utilización individual. Dividiéndose también en complejidad unos de otros. <br />Para esta división se tomo en cuenta la clasificación de la información ya que no toda seria tratada con el mismo fin, si no que se agruparon datos similares, surgiendo grupos que tomarían un nombre de acuerdo a sus funciones y a la forma en que fuerana ser utilizados.<br />Cuando la programación ya estuvo definida se trato de que fuera lo más entendible tanto para el programador, como para una persona ajena a él, que quisiera consultar el programa. Para esto se estructuraron los programas. En ellos se trabajaría con un status sin olvidarse de las reglas de programación independientemente del programa en el que se estuviese trabajando, ordenando las instrucciones de una manera en la que se redujera el numero de procesos a realizar dentro del, agilizando el manejo de información para hacerla lo más breve y funcional dentro del programa.<br />3.1 CÓMO DETERMINAR QUE UN PROBLEMA SEA RESUELTO POR COMPUTADORA<br />El software proporciona las instrucciones que hacen funcionar el hardware de la computadora; sin este la computadora no puede funcionar, no es más que un montón de partes. Algunos comandos de software pueden estar integrados en piezas de de hardware especificas (por ejemplo los chips de CPU y ROM), peo incluso en estos casos la programación es simplemente una versión de “codificación dura” del software. Un ejemplo de este tipo de codificación se puede encontrar en algo tan común como un reloj digital. Aunque posiblemente nunca lo hayan considerado cierta entre clase de software está integrada en los circuitos del reloj los cuales le permiten funciona. Debido a que el software es una parte tan importante de cualquier sistema de computación, es importante entender que tipo de software es y donde proviene.<br />En termino software puede utilizarse en forma genérica, por ejemplo en la frase” El software le dice a la computadora que hacer”. El término también puede utilizarse de una manera más específica para describir un sistema operativo o aplicación. Por ejemplo: puede decir, “Windows XP es un producto de software” o “Photoshop es un producto de software”<br />Un programa de cómputo es un conjunto de instrucciones o declaraciones (también conocidas como código) que debe de utilizar el CPU de una computadora. Los programas, o software, tienen distintas formas. Éstas se pueden dividir en tres categorías principales: sistemas operativos, herramientas y aplicaciones. <br />Un programa normalmente está compuesto de un modulo principal y submódelos. Estos módulos están almacenados como un conjunto de archivos; los programas grandes pueden contener miles de archivos individuales, cada uno para un propósito especifico. Algunos de los archivos contienen instrucciones para la computadora mientras que otros contienen datos. Para las PC basadas en Windows, algunas extensiones comunes para los archivos de programas son las siguientes:<br />Archivos ejecutables: Un archivo ejecutable (.exe, .com) es parte de un programa que en realidad envía comandos al procesador. De hecho, cuando usted ejecuta un programa, está ejecutando un archivo ejecutable. El procesador ejecuta los comandos del archivo ejecutable. El procesador ejecuta dos comandos del archivo, de ahí proviene el nombre archivo ejecutable. Los archivos ejecutables normalmente (pero no siempre) tienen la extensión de nombre de archivo .exe.<br />Archivos de biblioteca dinámica de vínculos: Un archivo de biblioteca dinámica de vínculos (.dll) es un archivo .exe parcial. Un archivo .dll no puede ejecutarse por sí mismo; en lugar de esto, sus comandos son accedidos por otro programa que esta ejecutándose. Debido a que los archivos .dll pueden contener partes de un programa ejecutable, ofrecen a los programadores de manera efectiva de dividir programas grandes en componentes pequeños que son reemplazables. Esta característica hace que el programa completo sea fácil de actualizar. Además los archivos .dll también pueden ser compartidos por distintos programas al mismo tiempo.<br />Archivos de inicialización: Un archivo de inicialización (.ini) contiene información sobre co9nfiguraciones, por ejemplo, el tamaño y punto de inicio de una ventana, el color de fondo, el nombre del usuario y otros aspectos. Los archivos de inicialización ayudan a los programas a ejecutarse o contiene información que los programas pueden utilizar cuando se ejecutan. Aunque los archivos de inicialización se siguen utilizando, muchos programas nuevos almacenan las preferencias del usuario y otras variables del programa en el registro de Windows, una base de datos especial contiene información sobre el usuario del computador, los programas instalados y ciertos dispositivos de hardware.<br />Archivos de ayuda: Un archivo de ayuda (.hlp, .chm) contiene información a un formato indexado y con vínculos cruzados. Al incluir el archivo de ayuda, los programadores pueden proporcionar al usuario información de ayuda en línea.<br />Archivos de secuencia de comandos: (.bat) automatiza tareas comunes o repetitivas. Un archivo de secuencia de comandos es un programa simple que consiste en un archivo de texto sin formato que contiene uno o más comandos del sistema operativo. Si escribe el nombre de un archivo de secuencia de comandos es un símbolo de sistema, su sistema operativo ejecutara los comandos del sistema operativo.<br />La mayor parte de los archivos de programas se almacenan en una carpeta nombrada como la aplicación o una abreviatura de ella. Sin embrago, algunos archivos de programa se pueden encontrar en otras carpetas. Por ejemplo, los archivos .dll en Windows XP normalmente están almacenados en las carpetas c:windowssystem 32. Para ver una lista de la mayoría de os archivos necesarios para ejecutar una aplicación puede abrir la carpeta de esa aplicación.<br />El proceso de resolución de problemas con computadoras conduce a la escritura de un programa y su ejecución en la misma. Aunque el proceso de diseñar programas es esencialmente un proceso creativo, se puede considerar una serie de fases o pasos comunes que generalmente deben seguir los programadores. Estas fases son las siguientes:<br />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. <br />Análisis del Problema: Una vez que se ha comprendido lo que se desea de la computadora, es necesario definir: <br />Los datos de entrada. <br />Cuál es la información que se desea producir (salida). <br />Los métodos y fórmulas que se necesitan para procesar los datos. <br />Una recomendación muy práctica es el que nos pongamos en el lugar de la computadora y analicemos que es lo que necesitamos que nos ordenen y en que secuencia para producir los resultados esperados.<br />Codificación.<br />La codificación es la operación de escribir la solución del problema (de acuerdo a la lógica del diagrama de flujo o pseudocódigo), en una serie de instrucciones detalladas, en un código reconocible por la computadora, la serie de instrucciones detalladas se le conoce como código fuente, el cual se escribe en un lenguaje de programación o lenguaje de alto nivel.<br />Prueba y Depuración:<br />Los errores humanos dentro de la programación de computadoras son muchos y aumentan considerablemente con la complejidad del problema. El proceso de identificar y eliminar errores, para dar paso a una solución sin errores se le llama depuración. La depuración o prueba resulta una tarea tan creativa como el mismo desarrollo de la solución, por ello se debe considerar con el mismo interés y entusiasmo.<br />Documentación:<br />Es la guía o comunicación escrita es sus variadas formas, ya sea en enunciados, procedimientos, dibujos o diagramas. A menudo un programa escrito por una persona, es usado por otra. Por ello la documentación sirve para ayudar a comprender o usar un programa o para facilitar futuras modificaciones.<br />La documentación se divide en tres partes:<br />Documentación Interna: son los comentarios o mensajes que se añaden al código fuente para hacer más claro el entendimiento de un proceso. <br />Documentación Externa: se define en un documento escrito los siguientes puntos: <br />Descripción del Problema. <br />Nombre del Autor. <br />Algoritmo (diagrama de flujo o pseudocódigo). <br />Diccionario de Datos. <br />Código Fuente (programa). <br />Manual del Usuario: describe paso a paso la manera cómo funciona el programa, con el fin de que el usuario obtenga el resultado deseado. <br />Mantenimiento:<br />Se lleva a cabo después de terminado el programa, cuando se detecta que es necesario hacer algún cambio, ajuste o complementar al programa para que siga trabajando de manera correcta. Para poder realizar este trabajo se requiere que el programa este correctamente documentado.<br />3.1.1 La forma en que los programas resuelven problemas.<br />Un programa es un conjunto de pasos que controlan una computadora, pero es probable que no sepa que apariencia tiene estos pasos. Su apariencia o estructura depende un poco del lenguaje de programación, pero el concepto general es el mismo sin importar que lenguajes se utiliza. Cada paso del código es una instrucción que realiza una sola tarea en una secuencia en una secuencia de pasos que llevan a cabo una tarea más compleja.<br />Control de flujo de un programa:<br />Cuando inicia un programa, la computadora comienza a leer y llevar a cabo declaraciones en el punto de entrada del principal archivo ejecutado. Normalmente este punto de entrada es la primera línea (o declaración) del archivo, aunque puede estar ubicado en otro lugar. Después de la ejecución de la primera declaración, el programa pasa al control (o flujo) a otra declaración y así en adelante hasta que se ejecuta la última declaración del programa; entonces el programa termina. El orden en el cual se ejecutan las declaraciones de un programa se conoce como control de flujo del programa.<br />Pseudocódigo <br />Mezcla de lenguaje de programación y español (o inglés 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. <br />En esencial, el Pseudocódigo se puede definir como un lenguaje de especificaciones de algoritmos. <br />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. <br />Ventajas de utilizar un Pseudocódigo a un Diagrama de Flujo <br />Ocupa menos espacio en una hoja de papel <br />Permite representar en forma fácil operaciones repetitivas complejas <br />Es muy fácil pasar de Pseudocódigo a un programa en algún lenguaje de programación. <br />Si se siguen las reglas se puede observar claramente los niveles que tiene cada operación. <br />412115247650Ejemplo de un pseucódigo<br />Diagramas estructurados (Nassi-Schneiderman) <br />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.<br />Algoritmos<br />Los pasos que se presentan en un diagrama IPO normalmente conducen hacia un resultado deseado. En conjunto, estos pasos se conocen como algoritmos. Un algoritmo es una serie de instrucciones paso a paso que, se siguen, producen un resultado conocido o esperado. Los pasos para encontrar una solución son los mismos sin importar que se encuentre la solución con una computadora o a mano, por lo cual se puede tener un programa y un diagrama IPO hecho a mano parta realizar la misma tarea.<br />3.2 SOLUCIONES LOGICAS<br />Son aquellas que tienen operaciones lógicas.<br />La solución a cualquier problema de cómputo involucra la ejecución de una serie de acciones en un orden específico. Al procedimiento para resolver un problema en término de: <br />Acciones a ejecutar.<br />El orden en el cual se llevan a cabo dichas acciones. <br />3.2.1 ALGORITMO<br /> Es un diseño de una serie de pasos a seguir y procesos lógicos encaminados a resolver un problemas. <br />Características: <br />Lógica <br />Secuencia <br />Detallada<br />Acciones<br />Pedir datos <br />Desplegar datos <br />Evaluar condiciones <br />Ejecutar operaciones <br />SOLUCION DE UN PROBLEMA<br />¿Qué debo hacer?<br />¿Qué debo tener?<br />¿Cómo hacerlo?<br />NOTA: Información proporcionada al algoritmo = Entrada <br />Información producida por el algoritmo = Salida<br />El siguiente ejemplo demuestra que es importante especificar correctamente el orden en que se debe ejecutar las acciones: <br />Considere el algoritmo “levantarse y arreglarse” que sigue un joven para salir de la cama e ir a su trabajo:<br />Levantarse de la cama <br />Quitarse la pijama <br />Bañarse <br />Vestirse <br />Desayunar manejar hacia el trabajo <br />Esta rutina hace el ejecutivo vaya al trabajo bien preparado para tomar decisiones criticas. A la especificación del orden en el cual se ejecutan las instrucciones dentro de un programa de computadora se le llama control de programa.<br />3.2.2 PSEUDOCODIGO<br />El pseudocódigo en un lenguaje artificial e informal que ayuda a los programadores a desarrollar algoritmos. El pseudocódigo es similar al inglés; es conveniente y sencillo, aunque no es un lenguaje de programación real. <br />Los programas en pseudocódigo no se ejecutan en las computadoras, sino que solo ayudan al programador a “resolver” un programa antes de intentar escribirlo en un lenguaje de programación como C. <br />El pseudocódigo solo consiste en caracteres, de manera que los programadores pueden introducir los programas en pseudocódigo a la computadora mediante un programa de edición. La computadora puede desplegar o imprimir una copia reciente del pseudocódigo cuando sea necesario. Un programa cuidadosamente cuidado preparado puede convertirse fácilmente en su correspondiente programa. <br />Es tan claro como el diagrama y es una herramienta útil para el seguimiento de la lógica de un algoritmo y, sobretodo, facilita la transcripción a un lenguaje de programación. Tiene la desventaja de que el programador trata de transcribir los pasos del algoritmo utilizando palabras reservadas, propias del lenguaje en el cual está acostumbrado a trabajar.<br />No existe un pseudocódigo estándar, por este motivo hay una notación y una serie de reglas correspondientes al pseudocódigo. <br />Algunas instrucciones que generalmente componen a un pseudocódigo son:<br />Instrucciones declarativas:<br />Son aquellas expresiones que definen las variables y demás objetos del programa, así como el tipo de los mismos.<br />Ejemplo: Enteros A, B…<br />Instrucciones de asignación:<br />Asigna a ala variable que se encuentra a ala izquierda del símbolo de asignación utilizando (generalmente el signo =) el valor de la constante, variable o expresión que se encuentra a la derecha del mismo.<br />Ejemplos:<br />X=0 asignan el valor cero a la variable x<br />Instrucciones de entrada:<br />Introducen los datos desde un dispositivo o periférico de entrada a la memoria del ordenador, depositándolos en las variables como paso previo para su tratamiento en el programa. Ejemplo:<br />Si el dispositivo es de entrada es el teclado, se utilizara una de las siguientes expresiones<br />Introducir variable o leer variable.<br />Instrucciones de salida:<br />Graban, imprimen o visualizan en el dispositivo de salida correspondiente los datos contenidos en las variables especificadas. Dependiendo de los dispositivos a utilizar, los verbos empleados serán visualizar, imprimir o grabar.<br />Si el dispositivo es por pantalla;<br />Visualizar apellidos muestra en pantalla el contenido de la variable apellidos.<br />REGLAS GENERALES EN LA CONFECCIÓN DE UN PSEUDOCODIGO<br />El conjunto de instrucciones que forman parte de un programa o procedimiento va incluido entre las palabras “inicio” y “fin]” que delimitan su contenido.<br />Los verbos se escribirán la primera letra con mayúscula y el resto con minúscula.<br />Los nombres de variables se escribirán con mayúsculas.<br />Se identificaran los procedimientos o subrutinas del programa principal encerrado entre los símbolos “<” y “>” el nombre de cada uno de ellos. El nombre dado al procedimiento y las instrucciones que lo componen será especificado aparte.<br />Para mejorar la legibilidad del programa se utilizara el sangrado o tabulación de los márgenes que indique la subordinación de unas instrucciones respecto a otras.<br />Cuando se considere necesario se incluirán comentarios explicativos en el pseudocódigo precedidos del símbolo asterisco (*).<br />En algunos pseudocódigos se especifica un entorno donde se describen las variables auxiliares utilizadas, indicando su nombre, significado, tipo y valor inicial.<br />3.2.3 COMPUERTAS O PUERTAS LÓGICAS<br />Los símbolos lógicos que se usan para representar las puertas lógicas están de acuerdo con el estándar ANSI/IEEE 91-1984.<br />La lógica es la parte del razonamiento humano que nos dice que una determinada proposición (sentencia de asignación) es cierta si se cumplen ciertas condiciones. Las proposiciones se pueden clasificar como verdaderas o falsas. <br />Cuando se combinan varias proposiciones se forman funciones lógicas o proposicionales.<br />Hacia 1859 el matemático y lógico irlandés George Boole desarrollo un sistema matemático para formular proposiciones lógicas con símbolos, de manera que los problemas puedan formularse y resolverse de forma similar a como se hace en el algebra ordinaria. <br />El término lógico se aplica a los circuitos digitales que se utilizan para implementar funciones lógicas. Existen varios tipos de circuitos lógicos que son los elementos básicos que constituyen los bloques sobre los que se construyen los sistemas digitales más complejos como por ejemplo una computadora. <br />41014652374902148840208280205740237490<br />Cualquier número de entradasANDANDNOT<br />Las líneas conectadas a cada símbolo son las entradas y las salidas. Las entradas son las líneas situadas a la izquierda de cada símbolo y la salida es la línea derecha. Un circuito que realiza una operación lógica determina (NOT, AND, OR) se denomina puerta lógica. Las puertas AND y OR pueden tener cualquier número de entradas <br />En las operaciones lógicas, las condiciones mencionadas anteriormente de: Verdadero (ALTO) /falso (BAJO). Cada una de las tres operaciones básicas da lugar a una respuesta para un determinado conjunto de condiciones.<br />3.3 DIGRAMAS LÓGICOS<br />INTRODUCCION<br />La representación del sistemas de control por diagramas lógicos se basa en el empleo de símbolos normalizados (puertas) que representan funciones lógicas directas del algebra de Boole (AND, OR, etc.) o sistemas lógicos más complejos (biestables, registros, contadores etc.). <br />El conjunto de todos los símbolos con sus interrelaciones forman el loligrama del sistema de control, representación compacta e independiente de la tecnología de construcción del mismo (eléctrica, neumática, etc.). <br />Desgraciadamente el diagrama es una herramienta característica del técnico del software o del ingeniero de diseño, muy alejado de muchos usuarios finales del autómata, por lo que su empleo queda en la práctica casi circunscrito en la representación del sistema en alto nivel, efectos de especificaciones y documentación.<br />Figura 19. Representación de un circuito Lógico<br />3.3.1 DIAGRAMA DE FLUJO<br />Un diagrama de flujo es una representación grafica de un algoritmo o de una porción de un algoritmo. Los diagramas de flujo se dibujan mediante símbolos de propósito especial tales como rectángulos, rombos, óvalos y pequeños círculos; estos símbolos se conectan mediante flechas llamadas líneas de flujo. <br />Como el pseudocódigo, los diagramas de flujo son útiles para desarrollar, representar algoritmos, aunque la mayoría de los programadores prefieren el pseudocódigo. Los diagramas de flujo muestran claramente la manera en que opera las estructuras de control: esto es lo único para lo que los utilizaremos.<br />3.3.2 DIAGRAMA DE GANTT<br />El diagrama de Gantt consiste en una representación gráfica sobre dos ejes; en el vertical se disponen las tareas del proyecto y en el horizontal se representa el tiempo.<br />Los cronogramas de barras o “gráficos de Gantt” fueron concebidos por el ingeniero norteamericano Henry L. Gantt, uno de los precursores de la ingeniería industrial contemporánea de Taylor. Gantt procuro resolver el problema de la programación de actividades, es decir, su distribución conforme a un calendario, de manera tal que se pudiese visualizar el periodo de duración de cada actividad, sus fechas de iniciación y terminación e igualmente el tiempo total requerido para la ejecución de un trabajo. El instrumento que desarrolló permite también que se siga el curso de cada actividad, al proporcionar información del porcentaje ejecutado de cada una de ellas, así como el grado de adelanto o atraso con respecto al plazo previsto.<br /> Este gráfico consiste simplemente en un sistema de coordenadas en que se indica:<br /> En el eje Horizontal: un calendario, o escala de tiempo definido en términos de la unidad más adecuada al trabajo que se va a ejecutar: hora, día, semana, mes, etc. En el eje Vertical: Las actividades que constituyen el trabajo a ejecutar. A cada actividad se hace corresponder una línea horizontal cuya longitud es proporcional a su duración en la cual la medición efectúa con relación a la escala definida en el eje horizontal conforme se ilustra. <br />Símbolos Convencionales: En la elaboración del gráfico de Gantt se acostumbra utilizar determinados símbolos, aunque pueden diseñarse muchos otros para atender las necesidades específicas del usuario. Los símbolos básicos son los siguientes: <br />· Iniciación de una actividad.<br /> · Término de una actividad <br />· Línea fina que conecta las dos “L” invertidas. Indica la duración prevista de la actividad.<br /> · Línea gruesa. Indica la fracción ya realizada de la actividad, en términos de porcentaje. Debe trazarse debajo de la línea fina que representa el plazo previsto.<br /> · Plazo durante el cual no puede realizarse la actividad. Corresponde al tiempo improductivo puede anotarse encima del símbolo utilizando una abreviatura.<br /> · Indica la fecha en que se procedió a la última actualización del gráfico, es decir, en que se hizo la comparación entre las actividades previstas y las efectivamente realizadas. <br />Figura. Representación de un diagrama de gant<br />3.3.3 DIAGRAMA DE PERT<br />El diagrama PERT es una representación gráfica de las relaciones entre las tareas del proyecto que permite calcular los tiempos del proyecto de forma sencilla.<br />Puede organizar tareas, establecer marcos de tiempo e ilustrar dependencias al inicio de un proyecto con los diagramas de Técnica de programación, evaluación y revisión (PERT) en Microsoft Office Visio.<br />También puede usar diagramas de PERT para ilustrar los pasos que encaminan a una meta específica. Por ejemplo, un diagrama PERT puede servir para definir los pasos que un departamento necesita para alcanzar sus objetivos de ingresos cada dos años.<br />En un diagrama PERT, cada rectángulo o nodo representa una tarea, y las conexiones entre tareas, dependencias.<br />3.3.4 DIAGRAMAS DE VENN<br />Una figura útil que puede ser usada para visualizar las relaciones entre las variables del algebra de Boole es el diagrama de Venn<br />En el cual se dibujan círculos traslapados para cada una de las variables. <br />Cada círculo es designado por una variable. Se asignan todos los puntos dentro de cada circulo es designado por una variable. Se asignan todos los puntos de cada círculo como pertenecientes a dichas variables y todos los puntos por fuera del círculo como no pertenecientes a la variable. <br />Ahora bien con dos círculos traslapados se forman cuatro áreas distintas dentro del rectángulo: el área que no pertenece ni a x ni a y (x’y’), el área dentro del circulo y pero por fuera de x (x’y’), el área dentro del circulo y pero por fuera de y (xy’) y el área dentro de ambos círculos (xy). De la figura19<br />1979295248920YX<br />X’YXY’<br />X’Y’<br /> Figura 20. Diagrama de Venn de dos los variables<br />Los diagramas de Venn se usan para demostrar los postulados del algebra de Boole y para demostrar la validez de los teoremas. <br /> 3.3. 5 DIAGRAMA DE PROCEDIMIENTO<br />La multiplicidad de funciones y el crecimiento de las operaciones, tanto en empresas del sector oficial como del privado, inciden en la proliferación de procesos funcionales (crecimientos acelerados) que requieren grandes cantidades de recursos humanos, materiales y financieros que generalmente conducen a zonas de empautamiento para el mejoramiento de la capacidad de producción de bienes o servicios frente a los consumidores y los clientes.<br />La permanente revisión de los sistemas, estructuras y procedimientos por las unidades responsables del mejoramiento administrativo permitirá conocer de manera integral la operación de la institución o de cualquier unidad administrativa. La presentación de procedimientos aislados no permiten conocer de manera integral la operación de la empresa o de una de sus partes (unidad administrativa) y el reconocer la deficiencia en la calidad de los servicios prestados, y la necesidad de identificar problemas y dificultades administrativas que se presentan en el cotidiano que hacer institucional, en mucho obedece a la ausencia de procedimientos redactados y a su representación (graficación); de aquí la necesidad de agrupar- los en forma ordenada en un solo documento denominado " Manual de procedimientos" .<br />El estudio de procedimientos tiene diferentes matices, tema que es tratado ampliamente en otro capítulo de la obra; sin embargo, es importante destacar que una vez que se ha recabado, integrado y analizado la información materia del estudio, se procederá a la graficación de los procedimientos. La representación de los procedimientos sujetos a estudio, puede ser más o menos compleja, según sea la técnica de diagramación y el objeto o ámbito de aplicación de los mismos<br />3.3.6 DIGRAMAS DE KARNAUGH-SIMPLIFICACION<br />La complejidad de las compuertas lógicas digitales con que se llevan a cabo las funciones de Boole se relacionan directamente con la complejidad de la expresión algebraica de la cual se desprenden la función. Aunque la representación de la tabla de verdad de una función única, puede aparecer de muchas formas diferentes. Las funciones de Boole pueden ser simplificadas por medios algebraicos <br />Sin embargo el proceso de minimización es un tanto raro ya que carece de reglas especificas para predecir cada paso sucesivo en el proceso de manipulación. El método del mapa presenta un procedimiento simple y directo para minimizar las funciones de Boole. Este método puede ser tratado no solamente en la forma pictórica de una tabla de verdad, sino como una extensión del diagrama de Venn. El método del mapa, propuesto primero por Veitch y modificado por Karnaugh se conoce como el “diagrama de Veitch” o el “mapa de Karnaugh”.<br />Un mapa de Karnaugh proporciona un método sistemático de simplificación de expresiones booleanas y, si se aplica adecuadamente, genera las expresiones suma de productos y producto de sumas simples posibles, conocidas como expresiones mínimas. <br />Un mapa de Karnaugh es similar a una tabla de verdad, ya que muestra todos los valores posibles de las variables de entrada y la salida resultante para cada valor. En lugar de organizar en filas y columnas como una tabla de verdad, el mapa de Karnaugh es una matriz de celdas en la que cada celda representa un valor binario de las variables de entrada. Las celdas organizan de manera que la simplificación de una determinada expresión consiste en agrupar adecuadamente las celdas. Los mapas de karnaugh se pueden utilizar para expresiones de dos hasta cinco variables. <br />El número de celdas de un mapa de Karnaugh es igual a número total de posibles combinaciones de las variables de entrada, al igual que el número de filas de una tabla de verdad. Para tres variables, el numero de celdas necesarias es de 23 =8. <br />Mapa de Karnaugh de tres variables<br />Ejemplo<br />El mapa de Karnaugh de tres variables es una matriz de ocho celdas, como se muestra en la figura 26. En este caso se emplea A, B, y C se emplea para denominar a las variables, aunque podían haberse usado cualquier letra. Los valores binarios de A y B se encuentran en lado izquierda (observe la secuencia) y los valores C se colocan en la parte superior. El valor de una determinada celda es el valor binario de A y B, en la parte izquierda de la misma fila superior izquierda tiene un valor binario de 0000 y la Elda inferior derecha tiene un valor de 101. <br />ABC ABC ABCABCABCABC ABCABCC 0 1AB00011110<br />AB00011110C 0 1<br />Figura 36. Mapa de Karnaugh de tres variables que muestra los termino producto<br />3.3.7 DIAGRAMAS DE LLUVIA DE IDEAS<br />Los diagramas de lluvia de ideas constituyen un método eficaz para generar ideas y resolver problemas de forma creativa. Pueden ayudarle a desarrollar cualquier sistema de información o ideas, como nuevas estrategias empresariales, esquemas de libros, órdenes del día para reuniones o planes de viajes.<br />Los diagramas de lluvia de ideas muestran las relaciones entre temas en una jerarquía. Puede considerarlos como una representación gráfica de un esquema de texto.<br />Existen dos métodos conocidos para crear diagramas de este tipo. El primero consiste en empezar con una idea principal y generar a partir de ella temas y temas secundarios relacionados jerárquicamente. Sin embargo, durante una reunión de lluvia de ideas, en la que todo el mundo aporta ideas constantemente, las jerarquías no siempre están claras y es necesario captar las ideas rápidamente. El segundo método, por tanto, consiste en captar todas esas ideas tal y como se expresan y, posteriormente, organizarlas, revisarlas, ajustarlas y compartir los resultados.<br />3.4 LENGUAJE DE PROGRAMACIÓN<br />Para que un computador (hardware) funcione es necesario utilizar programas (software), los cuales le indican cuál es la tarea que se tiene que hacer. Un lenguaje de programación es el que se utiliza para escribir dichos programas. Posteriormente estos se introducirán en la memoria del computador y éste último ejecutará todas las operaciones que se incluyen.<br />Los lenguajes de programación constan de:<br />Un conjunto de símbolos y un conjunto de reglas válidas para componerlos, de forma que formen un mensaje con significado para el computador.<br />La principal función de un lenguaje de programación es proporcionar instrucciones al sistema de la computadora para que pueda realizar una actividad de procesamiento.<br />La programación incluye la traducción de lo que quiere lograr un usuario a un código que pueda comprender y ejecutar la computadora.<br />Es el modo de expresión que nos permite dar una serie de instrucciones al ordenador en un formato lo más parecido al humano.<br />Hay que distinguir dos partes en el lenguaje de programación, lo que se denomina sintaxis del lenguaje y la semántica. Por sintaxis entendemos el conjunto de las construcciones del lenguaje que consideramos correctas en cuanto a su forma, mientras que la semántica es ese mismo conjunto de construcciones que consideramos correctas en cuanto a su significado.<br />La manera de realizar una buena sintaxis en un lenguaje de programación es deduciendo propiedades a partir de la hipótesis, es decir, utilizando la lógica y teniendo en cuenta que la lógica de los programas es un ampliación o desarrollo de la lógica de predicados clásica. En lenguajes las formas lógicas más utilizadas han sido: el cálculo lógico de Hoare, la lógica algorítmica, la lógica dinámica y la lógica temporal.<br />Si el significado o semántica del programa, es una secuencia de cálculo nos encontramos frente a la semántica operacional. Si por el contrario el significado de un programa es el objeto matemático que esa construcción denota, estamos ante una semántica denotacional. Por último, cuando los modelos que utilizamos para definir el significado de un programa se basan en construcciones algebraicas, estamos frente a la semántica algebraica. Por lo tanto estas son las tres formas utilizadas para construir un lenguaje de programación.<br />El lenguaje tipo maquina fue el primero que se creó. Este está basado en la combinación de un código binario (0 y 1). Estos programas solo podían utilizarse en la maquina que habían sido creados, sus errores de sintaxis eran difíciles de corregir y solo unos pocos sabían utilizarlos.<br />Después surgen los lenguajes simbólicos que se basan en la aplicación de una serie de reglas mnemotécnicas para identificar los órdenes. Los símbolos empleados salen del inglés. Estos programas no son comprendidos por la maquina por lo que hay que traducirlos en lenguaje maquina. Surgiendo de ahí los lenguajes ensamblados.<br />El lenguaje ensamblador sustituye cada orden del lenguaje maquina por un símbolo o una palabra anglosajona, dando lugar a otro programación el mismo número de instrucciones.<br />Pero en la programación con este tipo de lenguajes se vio que había una enorme cantidad de operaciones que había que hacer de forma reiterada al confeccionar un programa por lo que se pensó en desarrollar un lenguaje que incluyera unas macro estructuras que englobaran a todas las operaciones reiterativas, naciendo así los lenguajes compilados. Estos lenguajes traducen una instrucción simbólica y pueden representar a varias órdenes en el código maquina.<br />Otro tipo de lenguaje que surge es el lenguaje interpretado, el cual a la hora de ejecutar instrucciones en un programa va leyendo línea por línea y dando las equivalencias de las instrucciones en lenguaje simbólico a instrucciones maquina.<br />Se puede decir que los lenguajes de programación pueden ser de tres clases:<br />Lenguaje de alto nivel<br />Lenguaje tipo maquina<br />Lenguaje de bajo nivel<br />El lenguaje de bajo nivel es también llamado ensamblador. El tipo maquina es el binario. El lenguaje de alto nivel es el que más se asemeja al humano.<br />Dentro del lenguaje de alto nivel podemos encontrar varios grupos:<br />Para la enseñanza, BASIC y PASCAL<br />Científico, ALGOL, FORTRAN, APL<br />Gestión comercial, COBOL<br />4GL o de 4° Generación, son una serie de lenguajes que se alejan cada vez mas del lenguaje máquina para acercarse cada vez más al lenguaje natural. Por esta razón son los más usados al crear software de bases de datos. Entre otros existen el ADAVAS y el NATURAL<br />5GL, son los lenguajes utilizados en inteligencia artificial y son casi iguales al lenguaje humano, como el LISP.<br />3.4.1 PROGRAMA<br />Definición<br />Se define como un conjunto de instrucciones en secuencia que, aplicado a un conjunto de datos, y ejecutado por un ordenador, permite resolver un problema.<br />Los elementos a tratar por el ordenador son los datos, que serán introducidos desde un medio externo hasta la memoria interna del ordenador, donde se almacenan para su posterior proceso por parte del programa. Como consecuencia de ello se obtienen resultados. <br />Componentes de un programa<br />La información que maneja el ordenador está compuesto básicamente de datos e instrucciones. Los datos constituyen la parte de la información que procesa e programa en función de las instrucciones especificadas. Las instrucciones indican las acciones a realizar por el ordenador.<br />3.4.2 FASE DE CREACIÓN DE UN PROGRAMA<br />Esta fase comprende desde el planteamiento del problema hasta la codificación de un algoritmo que lo resuelve, en un lenguaje de programación correcto.<br />Las etapas de esta fase generan una documentación que se engloba en un documento denominado cuaderno de carga. Sus etapas son:<br /> FASE DE CONSTRUCCIÓN DEL PROGRAMA <br />Planteamiento del problema: También llamada definición del problema. Aquí se determina cual es la situación de partida, el conjunto de datos de entrada, que resultados desean obtenerse y donde deben registrarse. Todos estos estudios se incluyen en la documentación del programa.<br />Análisis del problema: Se divide el problema en apartados para revisar las condiciones de problemas.<br />Diseño y codificación del algoritmo: El diseño de algoritmo consiste en formular este utilizando alguna de las herramientas previstas para ello. La información citada se escribe en un pseucódigo o mediante un organigrama. La codificación del programa es la traducción del algoritmo al lenguaje de programación elegido, dando como resultado el programa codificado.<br />FASE DE EDICIÓN Y PRUEBAS<br />La edición consiste en introducir el programa ya codificado en un fichero, mediante un editor de textos propio del lenguaje (utilidades suministradas generalmente con el lenguaje de programación ajeno a él El resultado se denomina programa fuente.<br />En esta fase se proponen las pruebas que se llevaran a cabo durante la puesta a punto de cada uno de los programas desarrollados.<br />FASE DE DOCUMENTACIÓN<br />A los documentos del programa ya obtenidos se añaden los formularios de datos específicos del programa y las instrucciones de operación y grabación de datos relativos a este.<br />FASE DE EXPLOTACIÓN<br />Consiste en el normal funcionamiento y aprovechamiento del programa para cumplir los objetivos para el que fue escrito.<br />LENGUAJE MAQUINA<br />10101010101010101001000100101111010101011El lenguaje maquina es el lenguaje de primera generación. Es un lenguajes natural de una computador en particular y está definido por el diseño de hardware de dicha computadora. Por lo general los lenguajes maquinas consisten en cadenas de números [que finalmente se reducen a unos (1) y ceros (0) que instruyen a las computadoras para realizar sus operaciones más elementales una por una. Los lenguajes maquina son independientes de las maquinas ( es decir un lenguaje maquina en particular solo se puede usar en la computadora). Dichos lenguajes son difíciles de comprender para los humanos.<br />Este era una serie de 1 (unos) y 0 (ceros) que la CPU podía interpretar y ejecutar . El lenguaje maquina es importante por quien es el único lenguaje que la computadora entiende. Sin embargo el lenguaje maquina es difícil de usar y los científicos en computación desarrollaron lenguajes de programación que se parecen más a la comunicación humana.<br />Lenguaje de máquina de una computadora consta de cadenas de números binarios (ceros y unos) y es el único que " entienden" directamente los procesadores. Todas las instrucciones preparadas en cualquier lenguaje de máquina tienen por lo menos dos partes. La primera es el comando u operación, que dice a la computadora cuál es la función que va a realizar. Todas las computadoras tienen un código de operación para cada una de sus funciones. La segunda parte de la instrucción es el operando, que indica a la computadora donde hallar o almacenar los datos y otras instrucciones que se van a manipular; el número de operandos de una instrucción varía en las distintas computadoras. <br />En el principio de la computación este era el lenguaje que tenía que " hablar" el ser humano con la computadora y consistía en insertar en un tablero miles de conexiones y alambres y encender y apagar interruptores. <br />Aunque en la actualidad ya no se emplea, es importante reconocer que ya no es necesario que nos comuniquemos en este lenguaje de " unos" y " ceros" , pero es el que internamente una computadora reconoce o " habla" . <br />El programa se escribe en lenguaje escogido por el programador y se traduce a lenguaje maquina antes de ejecutarse. El programa escrito por el programador se denomina programa fuente y la versión en lenguaje máquina se denomina programa objeto.<br />El software de sistemas que traduce el programa fuente al programa objeto se denomina traductor <br />Se denomina lenguaje máquina a la serie de datos que la parte física de la computadora o hardware, es capaz de interpretar. <br />Una computadora digital o, mejor dicho, su parte física, sólo distingue datos de tipo binario, es decir, constituidos por dos únicos valores a los que se denomina valor 0 y valor 1 y que, físicamente, se materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Para representar datos que contengan una información se utilizan una serie de unos y ceros cuyo conjunto indica dicha información. <br />La información que hace que el hardware de la computadora realice una determinada actividad de llama instrucción. Por consiguiente una instrucción es un conjunto de unos y ceros. Las instrucciones así formadas equivalen a acciones elementales de la máquina, por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la máquina se denomina lenguaje máquina. <br />El lenguaje máquina fue el primero que empleo el hombre para la programación de las primeras computadoras. Una instrucción en lenguaje máquina puede representarse de la siguiente forma: <br />011011001010010011110110.<br />Esta secuencia es fácilmente ejecutada por la computadora, pero es de difícil interpretación, siendo aun más difícil la interpretación de un programa (conjunto de instrucciones) escrito de esta forma. Esta dificultad hace que los errores sean frecuentes y la corrección de los mismos costosa, cuando no imposible, al igual que la verificación y modificación de los programas. <br />La anterior secuencia de dígitos binarios (bits) puede indicar a la computadora que: <br /><<Traslade el contenido de la posición de memoria X a la posición de memoria Y. >><br />Si lo vemos escrito de esta forma, lo entenderemos fácilmente, ya que está en nuestro lenguaje natural, pero la máquina elemental será incapaz de entender nada. Vemos, pues, que la forma de indicar a la máquina lo que debe hacer es totalmente diferente de la indicar a un ser humano lo mismo, por lo que deben emplearse sistemas de traducción de una forma a otra. <br />Ya se ha dicho que en un principio el programador empleaba directamente el lenguaje máquina. En este caso el traductor era el programador; pero vimos también los problemas que esto causaba. <br />Con la práctica en el manejo de la máquina se cayó en la cuenta de que se podría utilizar la propia máquina para ayudar en la traducción de estos programas. Es decir, que si a una máquina elemental se le dotaba de un programa, también elemental, que tradujera un número determinado de caracteres de caracteres alfabéticos en una secuencia de unos y ceros, se podría escribir un programa constituido por una secuencia de grupos de caracteres alfabéticos, en la que cada uno de los grupos indicaría una acción a realizar por el ordenador y, una vez escrito el programa, sería la propia máquina la que pasaría los grupos de caracteres a bits. <br />Las ventajas de esto son evidentes, ya que para el hombre resulta más fácil manipular grupos de caracteres y la traducción se haría de manera automática. Por ejemplo, se podría escribir: <br />TRASLADAR 11010110, 00011101.<br />Esto indicaría que el contenido de la posición 11010110 había que pasarlo a la posición 00011101 si se sabe que al grupo alfabético TRASLADAR le corresponde la secuencia de bits 11110101. La máquina traduciría la anterior instrucción como: <br />11110101 11010110 00011101<br />Al grupo alfabético se le denomina mnemotécnico, y existirá un mnemotécnico por cada instrucción. Se le da este nombre porque sirve para recordar con mayor facilidad el conjunto de instrucciones de una determinada máquina. De esta forma aparecieron los lenguajes ensambladores (Assembler, en inglés). Poco a poco, con el avance de la programación (Software), estas primeras y sencillas ayudas se fueron haciendo más complejas, permitiendo que, además de los mnemotécnicos correspondientes a la operación a realizar, se pudieran emplear otros para indicar, por ejemplo, los operandos. La anterior instrucción se podría escribir de la siguiente forma: <br />La programación en lenguaje maquina era demasiada lenta y tediosa para la mayoría de los programadores. En vez de utilizar las cadenas de números que las computadoras podían entender directamente los programadores empezaron a utilizar abreviaturas del inglés para representar las operaciones elementales. Estas abreviaturas fueron la base de los lenguajes ensambladores <br /> Los lenguajes maquina se llaman de bajo nivel porque están muy cercanos al hardware del ordenador. Es necesario conocer a fondo la arquitectura de la máquina para la que se va a programar.<br /> En la primera generación se utilizó fue el lenguaje máquina, que consiste en un conjunto de instrucciones en binario, es decir, con ceros y unos, con los cuales se indica al ordenador qué hacer. Este lenguaje es muy complicado y la posibilidad de cometer errores es muy alta, por lo que ya no se utiliza.<br />El lenguaje maquina se considera un lenguaje de nivel bajo ya que solo maneja un lenguaje binario pues no existe un programa de codificación menos complicado.<br /> Para solventar estas dificultades apareció el lenguaje ensamblador, que consiste en asignar una abreviatura a cada instrucción en binario, de forma que sea más fácil recordarla y más difícil equivocarse. Sin embargo, con este lenguaje sigue siendo necesario conocer muy bien el hardware del ordenador.<br />3.6 TRADUCTOR DE LENGUAJES<br />Par que un lenguaje de programación sea útil debe de tener un traductor es decir un programa, que acepta a otros programas escritos en el lenguaje en cuestión y que, los ejecuta directamente, o los transforma en una forma adecuada para su ejecución. Un traductor que ejecuta un programa directamente se conoce como intérprete y un traductor que produce un programa equivalente a una forma adecuada para su ejecución se conoce como compilador.<br />3.6.1 Traductores<br />Los procesadores de lenguajes son aquellos programas destinados a trabajar sobre una entrada, por la forma como ha sido elaborada, pertenece a un lenguaje particular. Los procesadores de lenguajes se clasifican como traductores o interpretes. El traductor es un programa que recibe una entrada escrita en un lenguaje (el lenguaje fuente) a una salida perteneciente a otro lenguaje (el lenguaje objeto).<br />Un intérprete, no lleva a cabo tal transformación, en su lugar obtiene los resultados conforme se van analizando las entradas. Los traductores son clasificados en compiladores, ensambladores y preprocesadores.<br />La interpretación es un proceso que consta de un paso, en donde tanto el programa como la entrada le son dados al intérprete y se obtiene una salida.<br />.Un intérprete se puede considerar como un simulador para maquina cuyo”lenguaje de máquina” es el lenguaje que se está traduciendo.<br />3.6.2 Compilador<br />Es cualquier programa que toma como entrada un texto escrito en un lenguaje, llamado fuente y da como salida otro texto en un lenguaje denominado objeto. Este programa objetivo puede ser entonces ejecutado, si esta en forma adecuada para la ejecución directa (es decir, en lenguaje de maquina). Lo más común es que el lenguaje objetivo sea un lenguaje ensamblador y el programa objetivo deba ser traducido por un ensamblador en un programa objeto y posteriormente ligado con otros programas objeto y cargado en localizaciones de memoria apropiadas antes de que pueda ser ejecutado. Algunas veces el lenguaje objetivo es incluso, otro lenguaje de programación, en cuyo caso deberá utilizarse un compilador para dicho lenguaje que pueda obtener un lenguaje objeto ejecutable.<br />El proceso de compilación puede ejecutarse de la siguiente forma:<br />También es posible tener traductores intermedios entre intérpretes y compiladores: un traductor puede traducir un programa frente a un lenguaje intermedio y después interpretarlo. Estos traductores podrían llamarse pseudointerpretes, ya que ejecutan el programa sin producir un programa frente antes de que se inicie la ejecución.<br />Tanto los compiladores como los intérpretes deben de llevar a cabo operaciones similares al traducir un programa fuerte. Primero un analizador léxico, es decir un rastreador, debe convertir la representación textual del programa como una secuencia de caracteres en una forma más fácil de procesar, usualmente agrupando caracteres en tokens que representan identidades básicas del lenguaje, como palabras clave, identificadores y constantes. <br />El analizador sintáctico o analizador gramatical debe terminar la estructura de la secuencia de los tokens proporcionados por el rastreador. Finalmente un analizador semántico debe terminar lo suficiente del significado de un programa objetivo. <br />Un lenguaje pudiera también requerir de un procesador, que es ejecutado antes d la traducción para transformar un programa en alguna forma adecuada para su traducción.<br />Las propiedades de un lenguaje de programación que pueden ser determinadas antes de la ejecución se conocen como propiedades dinámicas. Esta distinción no resulta muy útil para los intérpretes, pero sí lo es para los compiladores: un compilador puede utilizar solo las propiedades estáticas d un lenguaje. Las propiedades estáticas típicas de un lenguaje son el léxico y su estructura sintáctica. En algunos lenguajes, como en C y en Ada también son estáticas algunas propiedades semánticas importantes: un ejemplo significativo son los tipos de datos de las variables.<br />Un lenguaje de programación puede ser diseñado para ser más adecuado para la interpretación o para la compilación. Por ejemplo un lenguaje que sea más dinámico, es decir, que tenga menos propiedades estáticas, es, más adecuado para la interpretación y es más probable que sea interpretado. Por otra parte un lenguaje con una poderosa estructura estática, lo más probable es que sea compilado.<br />También pueden existir situaciones en las que se prefiera un intérprete en lugar d un compilador. Los intérpretes usualmente tienen un modo interactivo, de modo que el usuario pueda introducir directamente programas desde una terminal y suministrar también entrada al programa y recibir salida solamente mediante el intérprete. Por ejemplo un intérprete Scheme puede utilizarse para obtener entrada inmediata a un procedimiento tal y como sigue:<br /> <br />> (gcd 8 18); ; calls gcd with the values 8 and 18<br />2 ; ; the interpreter prints the returnet<br />En contraste, en un lenguaje complicado como C, Ada, o Java, el programador deberá escribir a mano la entrada y salida interactiva.<br />Una propiedad importante de un traductor de lenguajes es su respuesta a errores contenidos en un programa fuente. Lo ideal sería que un traductor debería intentar corregir<br />Un programa C completo con una función gcd.<br />3.6.3 Ensamblador<br />Es el programa encargado de llevar a cabo un proceso denominado de ensamble o ensamblado, este proceso consiste en que a partir de un lenguaje máquina, este sea utilizado en lenguaje ensamblador:<br />· La integración de los diversos módulos que conforman al programa<br />La resolución de las direcciones de memoria designadas en el área de datos para el almacenamiento de variables, constantes y estructuras complejas.<br />· La identificación de las direcciones de memoria en la sección del código correspondientes a los puntos de entrada en saltos condicionales o incondicionales junto con los puntos de arranque de las subrutinas<br />· La resolución de los diversos llamados a los servicios o rutinas del sistema operativo código dinámico y bibliotecas de tiempo de ejecución<br />· Las especificaciones de la cantidad de memoria destinadas para las áreas de datos, el código, la pila, la cantidad o monto otorgados para su ejecución<br />· La incorporación de datos y código necesarios para la carga de un programa para su ejecución.<br />Históricamente con la escasez de memoria de las primeras computadoras, se puso de moda el uso de interpretes frente a los compiladores, pues el programa fuente sin traducir y el interprete juntos daban una ocupación de memoria menor que la resultante de los compiladores. Por ello los primeros ordenadores iban siempre acompañados de un intérprete Basic (XT, Commodore, Spectrum).<br />La mejor información sobre los errores se daba por parte del compilador así como una mayor velocidad de ejecución del código resultante hizo que poco a poco se impusieran los compiladores. Hoy en día y con el problema de memoria resuelto, se puede hablar de un gran predominio de los compiladores frente a los intérpretes, aunque interpretes como los incluidos en los navegadores de Java son la gran excepción.<br />La diferencia entre un compilador y un traductor es: En el compilador se recibe un programa escrito en un lenguaje de alto nivel, medio o bajo y lo transforma a su equivalente en un lenguaje ensamblador e inclusive el lenguaje máquina pero sin ejecutar el programa. Un compilador en un traductor la forma de cómo llevará la traducción es el objetivo central en el diseño de compilador.<br />Ventajas de compilador frente a un intérprete<br />· Se compila una vez, se ejecuta n−veces<br />· En bucles, la compilación genera código equivalente al bucle pero un interpretándolo se traduce tantas veces una línea como veces se repite el bucle<br />El compilador tiene una visión global del programa, por lo que la información de mensajes de errores es más detallada.<br />Ventajas de un intérprete frente a compilador<br />· Un intérprete necesita menos memoria que un compilador<br />· Permite una mayor interactividad con el código en tiempo de desarrollo.<br />Un compilador, no es programa que funciona de manera aislada sino que necesita otro programa para conseguir su objetivo, obtener un programa ejecutable a partir de un programa fuente en un lenguaje de alto nivel.<br />3.6.4 Clasificación de compiladores<br />El programa compilador traduce las instrucciones en un lenguaje de alto nivel a instrucciones que la computadora pueda interpretar y ejecutar. Para cada lenguaje de programación se requiere un compilador separado, el compilador traduce todo el programa antes de ejecutarlo.<br />En otras palabras un compilador traduce programas insertados en la memoria por el sistema operativo para convertirlos en pulsaciones electrónicas ejecutables (lenguaje máquina). Los compiladores pueden ser de:<br />· Una sola pasada: Examina el código fuente una vez, generando el código o programa objeto.<br />Pasadas múltiples: Requiere pasos intermedios para producir un código en otro lenguaje y una pasada final para producir y optimizar el código producido durante los pasos anteriores.<br />· Optimización: Lee un código fuente, lo analiza y descubre errores potenciales sin ejecutar el programa.<br />Compiladores incrementales: Generan un código objeto, instrucción por instrucción, cuando el usuario teclea cada orden individual. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente.<br />· Ensamblador: Es un lenguaje fuente y posee una estructura sencilla.<br />Compilador cruzado: Se genera código en un lenguaje objeto para una máquina diferente de la que se está utilizando para compilar. U compilador cruzado nos permite programar, por ejemplo en Windows para un ambiente como Linux.<br />· Compiladores con montador: Ese tipo de compilador compila distintos módulos de forma independiente y después es capaz de enlazarlos.<br />· Auto compilador: Compilador que está escrito en el mismo lenguaje que se va a compilar, evidentemente no<br />Se puede ejecutar la primera vez. Sirve para hacer ampliaciones de lenguaje, mejorar el código generado,<br />etc.<br />· Meta compilador: Es sinónimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones de lenguaje, para el que desea obtener un compilador y genera como salida un compilador de ese lenguaje.<br />· Descompilador: Es un programa que acepta como entrada código máquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilación.<br />Funciones de un compilador<br />Agrandes rasgos un compilador que lee un programa escrito en un lenguaje, el lenguaje fuente y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de este proceso de traducción, el compilador informa al usuario de la presencia de errores en el programa fuente. A primera vista, la diversidad de compiladores puede parecer abrumadora. Hay miles de lenguajes fuente, desde los lenguajes tradicionales como FORTRAN o PASCAL hasta los lenguajes especializados que han surgido en todas las áreas de aplicación en la informática. <br />Un lenguaje objeto puede ser otro lenguaje de programación o el lenguaje máquina de cualquier computadora entre un microprocesador y un supercomputador. Se pueden construir compiladores para una gran diversidad de lenguajes fuente y máquina utilizando las mismas técnicas básicas. Los primeros compiladores de los años 50's, estaban relacionados con la traducción de formulas aritméticas a código de máquina. En las 50's se considero a los compiladores como programas notablemente difíciles de escribir. El primer compilador FORTRAN necesito para su implantación 18 años (Backus Fortran).<br />Partes en las que trabaja un compilador<br />Conceptualmente FORTRAN diseño un compilador que trabajaba en fases. Es decir, las fases de un compilador transforman el programa fuente de una representación a otra, en la práctica se agrupan fases y las representaciones intermedias entre las fases no necesitan ser construidas explícitamente.<br />Análisis léxico<br />Es la primera fase de un compilador. Su principal función consiste en leer los caracteres de entrada y elaborar como salida una secuencia de componentes léxicos que utiliza el analizador sintáctico para hacer el análisis.<br />Aspectos del análisis léxico<br />Hay varias razones para dividir en fases el análisis de la compilación. El análisis léxico y análisis sintáctico:<br />Un diseño sencillo es la consideración más importante, separar a estos dos tipos de análisis a menudo permite simplificar una u otra de dichas fases.<br />· Se mejora la eficiencia del compilador además de permitir construir un procesador especializado y potencialmente más eficiente para esa función. Con algunas técnicas de manejo de buffers para la lectura de caracteres de entrada y procesamiento de componentes léxicos se pueden mejorar significativamente el rendimiento de un compilador.<br /> <br />Errores léxicos<br />Son pocos los errores simplemente en el nivel léxico ya que tiene una visión muy restringida de un programa fuente. El analizador léxico debe devolver el componente léxico de un identificador y dejar a otra fase se ocupe de los errores.<br />Suponga que una situación en la cual el analizador léxico no puede continuar porque ninguno de los patrones concuerda con un prefijo de la entrada. Tal vez la estrategia de recuperación más sencilla sea recuperación EN MODO PANICO (este método de recuperación es donde se borra caracteres sucesivos de la entrada hasta que el analizador léxico pueda encontrar un componente léxico bien formado).<br />Administrador de entradas<br />Utilizar 2 buffer de entrada resulta útil cuando es necesario un pre−análisis en la entrada para identificar los componentes léxicos después se introducen algunas técnicas básicas para encontrar la velocidad del analizador léxico, como es el uso de centinelas que sirven para marcar el final de buffer, hay tres métodos generales de implantar un léxico:<br />Utilizar un generador de analizadores léxicos, como el compilador LEX para producir el analizador léxico a partir de una especificación basada en expresiones regulares, en este caso el generador proporciona rutinas para leer la entrada y manejarla con buffers.<br />Escribir el analizador léxico en un lenguaje convencional de programación de sistemas utilizando las posibilidades de entrada y salida de este lenguaje para leer la entrada.<br />· Escribir el analizador léxico en lenguaje ensamblador y manejar explícitamente la lectura de la entrada.<br />Parejas de buffers<br />Se utiliza un buffer dividido en dos mitades de n−caracteres cada una.<br />Texto lenguaje fuente<br />Traductor<br />Texto lenguaje objeto<br />Programa objeto<br />Compilador<br />Programa fuente<br />Mensajes de error<br />Programa fuente<br />Analizador léxico<br />Analizador sintáctico<br />Análisis semántico<br />Generación de código intermedio<br />Optimización de código<br />Generador de código<br />Programa objeto<br />Manejo de errores<br />Manejo de tabla de símbolos<br />Analizador léxico<br />Analizador sintáctico<br />Tabla de símbolos<br />Componente léxico<br />Obtén el siguiente componente léxico<br />Programa fuente<br />Buffer = espacio en memoria<br />3.7 ELEMENTOS DE PROGRAMACIÓN<br />7620058420En los temas anteriores ya definimos un programa como un par formado por algoritmos y estructuras de datos. En este tema vamos a describir los elementos que constituyen a estos dos componentes de un programa bajo el enfoque de los lenguajes estructurados. <br />Se llama “dato” a la información que procesan las sentencias de un programa. En programación estructurada, todos los datos que maneje nuestro programa deben especificarse explícitamente indicando la clase de información que va almacenar. A la especificación de los atributos de un dato en un programa, siguiendo la sintaxis concreta de un lenguaje, se le denomina “declaración”.<br />3808095776605Los atributos que se especifican de un dato son los siguientes; hay que especificar que no todos los atributos son especificados por el programador si no que algunos van implícitos en la declaración. Señalaremos con un (*) los atributos que se especifica formalmente el programador.<br />Nombre (*): Es una etiqueta formada por caracteres alfanuméricos que identifica un dato. La referencia al dato en el programa se hace usualmente a través del nombre. El nombre no es suficiente para referenciar una variable.<br />Espacio de memoria: Es el lugar que se le asigna en la memoria RAM para contener al valor de la variable en el momento de la declaración. El tamaño de este espacio viene determinado por el tipo de dato y se le llama normalmente celda. El espacio de memoria es único y diferente para cada dato y es la característica que lo identifica unívocamente.<br />Valor (*): Normalmente el valor de un dato suele asignarse en la declaración del mismo. A este acto se le llama “Inicialización del dato”. Es normalmente incorrecto utilizar en el programa un dato no inicializado ya que contiene como valor algo desconocido.<br />411670540640Tipo (*): La naturaleza de los datos que manejamos en un computador es matemática, lógica o simbólica; de este modo, hay datos numéricos, lógicos y caracteres que tienen un significado en un lenguaje. Los datos numéricos se caracterizan por su forma de escribirlos .Cualquier dato tiene una representación y unas operaciones que podemos hacer sobre ellos (sumar, restar, etc.). <br />522605911860Ámbito: Es la región del código de un programa sobre la cual un dato está definido. Los datos cuyos ámbitos sea todo el código de un programa se denominan “datos globales”. Su declaración se realiza en la cabecera del programa. Los datos con una región de validez menor se denominan “datos locales”. El ámbito de una variable local es el código del subprograma (función o procedimiento) donde está definida, y su declaración como variable está en la cabecera del código correspondiente al subprograma. El ámbito de un dato implementa la idea de encapsulación de los datos dentro de los módulos.<br />Dirección: Todo dato de tipo simple tiene una dirección que es la dirección del primer byte que forma la celda de memoria preparada para contener el valor del dato. Esto es cierto al menos mientras la sentencia que se ejecuta pertenece al conjunto de sentencias del ámbito de dicha variable.<br />Persistencia: Es el tiempo que una variable está presente en la memoria respecto del tiempo de ejecución del programa. Así hay variables que sólo existen mientras está en ejecución la función que las declaró y otras como las globales o las locales estáticas que existen mientas el programa está en ejecución.<br />3.7.1 Tipos de Datos.<br />629285152400<br />El tipo de un dato es el conjunto de valores que puede tomar durante el programa. Si se le intenta dar un valor fuera del conjunto se producirá un error.<br />Existen gran variedad y cantidad de tipos de datos, así como también clasificaciones para los tipos de datos. A continuación se tiene una de las posibles clasificaciones:<br />Dinámicos <br />Estáticos <br />El tipo cadena <br />Estructurados <br />Simples <br />Ordinales <br />3.7.1.1 Tipos estáticos<br />Casi todos los tipos de datos son estáticos, la excepción son los punteros y no se tratarán debido a su complejidad. <br />Que un tipo de datos sea estático quiere decir que el tamaño que ocupa en memoria no puede variar durante la ejecución del programa. Es decir, una vez HYPERLINK " http://teleformacion.edu.aytolacoruna.es/PASCAL/document/estruct.htm" l " vars" declarada una variable de un tipo determinado, a ésta se le asigna un trozo de memoria fijo, y este trozo no se podrá aumentar ni disminuir. <br />3.7.1.2 Tipos Dinámicos.<br />Dentro de esta categoría entra solamente el tipo puntero. Este tipo te permite tener un mayor control sobre la gestión de memoria en tus programas. Con ellos puedes manejar el tamaño de tus variables en tiempo de ejecución, o sea, cuando el programa se está ejecutando.<br />3.7.1.3 Tipos simples<br />34290767715Los tipos simples más básicos son: HYPERLINK " http://teleformacion.edu.aytolacoruna.es/PASCAL/document/tipos.htm" l " entero" entero, lógico, carácter y real. Y la mayoría de los lenguajes de programación los soportan, no como ocurre con los estructurados que pueden variar de un lenguaje a otro. <br />El tipo integer (entero)<br />399669051435El tipo de dato “entero” es de tipo simple, y dentro de estos, es ordinal. Al declarar una variable de tipo entero, se crea una variable numérica que puede tomar valores positivos o negativos, y sin parte decimal. <br />Este tipo de variables, se pueden utilizar en asignaciones, comparaciones, expresiones aritméticas, etc. Algunos de los papeles más comunes que desarrollan son: <br />Controlar un bucle <br />Usarlas como contador, incrementando su valor cuando sucede algo <br />Realizar operaciones enteras, es decir, sin parte decimal.<br />El tipo boolean (lógico)<br />4307840968375El tipo de datos lógico (boolean) es el que permite usar variables que disponen sólo de dos posibles valores: cierto o falso. Debido a esto, su utilidad no es otra que variables de chequeo. Nos sirven para mantener el estado de un objeto mediante dos valores: <br />si/no <br />cierto/falso <br />funciona/no funciona <br />on/off <br />etc. <br />El tipo real (float)<br />143510225425El tipo de datos real es el que se corresponde con los números reales. Este es un tipo importante para los cálculos. Por ejemplo en los estadísticos, ya que se caracterizan por tratar fundamentalmente con valores decimales. <br />Por ejemplo: 3.1416 <br />Los tipos char y string (carácter y cadena)<br />Con el tipo carácter puedes tener objetos que representen una letra, y con el tipo string una cadena de caracteres tales como letras, números y signos de puntuación.<br />3680460420370Por ejemplo, puedes tener en una variable tu nombre (“Diana”), que sería de tipo “string”, y una “A” seria de tipo “char”.<br />3.7.1.4 Tipos estructurados<br />280860589535Mientras que una variable de un tipo simple sólo referencia a un elemento, los estructurados se refieren a colecciones de elementos. <br />Las colecciones de elementos que aparecen al hablar de tipos estructurados son muy variadas: tenemos colecciones ordenadas que se representan mediante el tipo array, colecciones sin orden mediante el tipo conjunto, e incluso colecciones que contienen otros tipos, son los llamados registros. <br />3.7.1.5 Tipos ordinales<br />2808605318135Dentro de los tipos simples, los ordinales son los más abundantes. De un tipo se dice que es ordinal porque el conjunto de valores que representa se puede contar, es decir, podemos establecer una relación uno a uno entre sus elementos y el conjunto de los números naturales. <br />Dentro de los tipos simples ordinales, los más importantes son: <br />El tipo entero ( HYPERLINK " http://teleformacion.edu.aytolacoruna.es/PASCAL/document/tipos.htm" l " entero" integer) <br />El tipo lógico (boolean) <br />El tipo carácter (char) <br />3.7.2 OPERADORES LÓGICOS.<br />Son aquellos que sirven para operar términos numéricos. Estos operadores podemos clasificarlos a su vez como: <br />UNARIOS <br />BINARIOS <br />3563620-38735Los operadores UNARIOS son aquellos que trabajan con UN OPERANDO. <br />Pascal permite el manejo de un operador unario llamado: <br />MENOS UNARIO <br />Este operador denota la negación del operando, y se representa por medio del signo menos (-) colocado antes del operando. <br />Por ejemplo: <br />Si x tiene asignado el valor 100, -x dará como resultado -100; esto es que el resultado es el inverso aditivo del operando. <br />Los operadores BINARIOS, son los que combinan DOS OPERANDOS, dando como resultado un valor numérico cuyo tipo será igual al mayor de los tipos que tengan los operandos. <br />La siguiente tabla muestra los símbolos de los operadores binarios:<br />OperadorOperaciónResultado++Sumasuma de a y b- RestaDiferencia de a y b* MultiplicaciónProducto de a por b/DivisiónCociente de a por bDivDivisión enteraCociente entero de a por bModMóduloResto de a por bShlDesplazamiento a la izquierdaDesplazar a la izquierda b bitsShrDesplazamiento a la derechaDesplazar a la derecha b bits<br />3.8 PROGRAMACIÓN ESTRUCTURADA<br />INTRODUCCION<br />ESTRUCTURAS DE CONTROL<br />Por lo general, las instrucciones dentro de un programa se ejecutan una a una en el orden que está escrito. A esto se le llama ejecución secuencial. <br />Durante la década de los sesentas, se hizo claro que el uso indiscriminado de transferencias de control era el origen de un gran número de dificultades que experimentaban los grupos de desarrollo del software. El dedo de la culpa apunto hacia la instrucción goto, que permite al programador especificar una transferencia de control a un amplio margen de destinos posibles dentro de un programa. La idea de “programación estructurada” se convirtió casi en un sinónimo de la “eliminación del goto”. <br />Las investigaciones de Bohm y Jacopini demostraron que los programas se pueden escribir sin instrucción goto alguna. El reto para los programadores de la época era modificar sus estilos hacia una “programación con menos instrucciones goto”. No fue sino hasta la década de los sesenta que los profesionales de la programación comenzaron a tomar en serio a la programación estructurada. Los resultados fueron impresionantes, los grupos de desarrollo de software reportaron una reducción en los tiempos de desarrollo, la entrega más oportuna d los sistemas y el apego más frecuente al presupuesto de los proyectos del software. La calve de el éxito fue simplemente que los programas producidos mediante técnicas estructuradas eran más claros, más fáciles de mantener y depurar y tenían más probabilidades de estar libres de errores desde el principio. <br />El trabajo de Bohm y jacopini demostró que todos los programas se podían escribir en términos de solo tres estructuras de control, a saber, la estructura secuencial. La estructura de selección, y la estructura de repetición. La estructura de secuencia se encuentra esencialmente dentro de C. La computadora ejecuta de manera automática las instrucciones en C, en una, en el orden en que están escritas, <br />La programación estructurada es una teoría de programación que consiste en construir programas de fácil comprensión.<br />La programación estructurada es especialmente útil, cuando se necesitan realizar correcciones o modificaciones después de haber concluido un programa o aplicación. Al haberse utilizado la programación estructurada, es mucho más sencillo entender la codificación del programa, que se habrá hecho en diferentes secciones.<br />La programación estructurada se basa en una metodóloga de desarrollo de programas llamada refinamiento sucesivo: Se plantea una operación como un todo y se divide en segmentos más sencillos o de menor complejidad. Una vez terminado todos los segmentos del programa, se procede a unificar las aplicaciones realizadas por el pool de programadores. Si se ha utilizado adecuadamente la programación estructurada, esta integración debe ser sencilla y no presentar problemas al integrar la misma, y de presentar algún problema, será rápidamente detectable para su corrección. <br />La representación grafica de la programación estructurada se realiza a través de diagramas de flujo o flor chart, el cual representa el programa con sus entradas, procesos y salidas.<br />La programación estructurada propone segregar los procesos en estructuras lo más simple posibles, las cuales se conocen como secuencia, selección e interacción. Ellas están disponibles en todos los lenguajes modernos de programación imperativa en forma de sentencias. Combinando esquemas sencillos se pueden llegar a construir sistemas amplios y complejos pero de fácil entendimiento.<br /> La programación estructurada permite la escritura de programas fáciles de leer y modificar. En un programa estructurado el flujo lógico se gobierna por tres estructuras de control básicas: secuenciales, repetitivas y selectivas.<br />3.8.1 Técnicas de Programación.<br />Algunas teorías de la programación se centran en las técnicas de programación modular y programación estructurada. El diseño de un programa entraña la descomposición del problema en módulos o partes independientes – programación modular –, la programación de cada módulo mediante métodos estructurados – programación estructurada – y su unión posterior.<br />3.8.1.1 Programación Modular.<br />En la programación modular un programa se divide en módulos, cada uno de los cuales ejecuta una única actividad o tarea, y se codifican independientemente de otros módulos. Cada uno de estos módulos se analiza, codifican y " optimizan" por separado. Cada programa contiene un módulo llamado programa principal (módulo controlador) que controla todo lo que sucede. Cuando es necesario, se transfiere el control a sus módulos de modo que éstos puedan ejecutar sus funciones. Los módulos son independientes en el sentido en el que ningún módulo puede tener acceso directo a cualquier otro módulo, excepto el módulo al que llama y sus propios su módulos.<br />3.8.1.2 Programación Estructurada.<br />Se refiere a un conjunto de técnicas que han ido evolucionando. Estas técnicas aumentan considerablemente la productividad del programa reduciendo el tiempo requerido para escribir, verificar, depurar y mantener los programas. La programación estructurada utiliza un número limitado de estructuras de control que minimizan la complejidad de los problemas y que reducen los errores. Ésta incorpora entre otros elementos: el<br />diseño descendente, <br />recursos abstractos <br />estructuras básicas.<br />Recursos abstractos.<br />Consiste en descomponer una determinada acción compleja en términos de un número de acciones más simples capaces de resolverla.<br />Diseño descendente.<br />Consiste en efectuar una relación entre las sucesivas etapas de estructuración. Es decir, se descompone el problema en etapas o estructuras jerárquicas, de modo que se puede considerar cada estructura desde dos puntos de vista: lo que hace y cómo lo hace<br />Teorema de la programación estructurada.<br />Se ha demostrado que un programa propio puede ser escrito utilizando solamente tres tipos de estructuras de control: —secuenciales, selectivas y repetitivas. Un programa es propio si posee un sólo punto de entrada y uno de salida, si existen caminos desde el inicio hasta el fin que se pueden seguir y que pasan por todas las partes del programa, y si todas las instrucciones son ejecutables sin que hayan bucles infinitos.<br />Estructura secuencial.<br />Es aquella en que una acción sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente.<br />Estructura selectiva.<br />Se utilizan para tomar decisiones lógicas. En éstas se evalúa una condición y en función del resultado de la misma se realiza una opción u otra. Las condiciones se especifican usando expresiones lógicas. En pseudocódigo estas palabras son ir, ten, ese. Las estructuras selectivas pueden ser: – simples, dobles o múltiples.<br />Selectivas simples.<br />Ejecuta una determinada acción cuando se cumple una determinada condición. La selección ir – ten (si – entonces) evalúa la condición y si es verdadera ejecuta la acción de lo contrario no hará nada.<br />Selectiva doble.<br />Permite elegir entre dos opciones posibles en función del cumplimiento o no de una determinada condición. Si la condición es verdadera, se ejecuta la acción 1, si es falsa, se ejecuta la acción 2. La selectiva en pseudocódigo es if – ten – else.<br />Selectivas múltiples.<br />La estructura de selección múltiple (case en pseudocódigo) evaluará una expresión que podrá tomar n valores distintos 1, 2, 3, 4,…..n. Según sea el valor en la condición, se realizará una de las n acciones.<br />Estructuras repetitivas.<br />Las estructuras que repiten una secuencia de instrucciones un número determinado de veces se llaman bucles, e iteración al hecho de repetir la ejecución de una secuencia de acciones.<br />Estructura mientras (while).<br />La estructura repetitiva mientras es aquella en que el cuerpo del bucle se repite mientras se cumple una determinada condición. Cuando se ejecuta esta instrucción, la primera cosa que sucede es que se evalúa la condición. Si la expresión es verdadera, entonces se ejecuta el cuerpo del bucle. Este proceso se repite una y otra vez mientras la condición sea verdadera.<br />Estructura repetir hasta (do/while).<br />Se ejecuta hasta que se cumpla una condición determinada que se comprueba al final del bucle, esto permite que la iteración se ejecute al menos una vez antes de que la condición sea evaluada.<br />Estructuras desde/para (for).<br />Se utilizan las estructuras for cuando se conocen con certeza el número de veces que desea repetir un bucle, es decir, cuando es un número fijo de veces.<br />Estructura de decisión anidada.<br />Se tiene una estructura de decisión anidada cuando una estructura if – ten – else contiene otra dentro de sí, y ésta a su vez contiene otra dentro de sí. Estas estructuras contendrán varios si - entonces dentro de otros. Debido a que este tipo de estructuras pueden ser confusas, se implementa la identación para evitar perder el hilo de dónde comienza y dónde termina cada estructura.<br />Identación.<br />El uso de la identacion es importante debido a que, cuando se es consistente en su utilización, facilita la lectura del programa al mostrar en una forma gráfica las relaciones existentes entre las distintas instrucciones.<br />Ventajas de la programación estructurada.<br />Con la programación estructurada elaborar programas de computador sigue siendo un albor que demanda esfuerzo, creatividad, habilidad y cuidado. Sin embargo, con este nuevo estilo podemos obtener las siguientes ventajas:<br />Los programas son más fáciles de entender. Un programa estructurado puede ser leído en secuencia, de arriba hacia abajo, sin necesidad de estar saltando de un sitio a otro en la lógica, lo cual es típico de otros estilos de programación. La estructura del programa es más clara puesto que las instrucciones están más ligadas o relacionadas entre sí, por lo que es más fácil comprender lo que hace cada función. <br />Reducción del esfuerzo en las pruebas. El programa se puede tener listo para producción normal en un tiempo menor del tradicional; por otro lado, el seguimiento de las fallas (debugging) se facilita debido a la lógica más visible, de tal forma que los errores se pueden detectar y corregir más fácilmente. <br />Reducción de los costos de mantenimiento. <br />Programas más sencillos y más rápidos. <br />Aumento de la productividad del programador. <br />Se facilita la utilización de las otras técnicas para el mejoramiento de la productividad en programación. <br />Los programas quedan mejor documentados internamente. <br />3.8.3 Visión moderna de un programa estructurado<br />Así, la visión moderna de un programa estructurado es un compuesto de segmentos, los cuales puedan estar constituidos por unas pocas instrucciones o por una página o más de código. Cada segmento tiene solamente una entrada y una salida, asumiendo que no poseen bucles infinitos y no tienen instrucciones que jamás se ejecuten. <br />Encontramos la relación entre ambas visiones en el hecho de que los segmentos se combinan utilizándolas tres estructuras básicas de control mencionadas anteriormente y, por tanto, el resultado es también un programa estructurado.<br />Cada una de estas partes englobará funciones y datos íntimamente relacionados semántica o funcionalmente. En una correcta partición del programa deberá resultar fácil e intuitivo comprender lo que debe hacer cada módulo.<br />En una segmentación bien realizada, la comunicación entre segmentos se lleva a cabo de una manera cuidadosamente controlada. Así, una correcta partición del problema producirá una nula o casi nula dependencia entre los módulos, pudiéndose entonces trabajar con cada uno de estos módulos de forma independiente. Este hecho garantizará que los cambios que se efectúen a una parte del programa, durante la programación original o su mantenimiento, no afecten al resto del programa que no ha sufrido cambios.<br />Esta técnica de programación conlleva las siguientes ventajas:<br />a) El coste de resolver varios subproblemas de forma aislada es con frecuencia menor<br />Que el de abordar el problema global.<br />b) Facilita el trabajo simultáneo en paralelo de distintos grupos de programadores.<br />c) Posibilita en mayor grado la reutilización del código (especialmente de alguno de<br />Los módulos) en futuras aplicaciones.<br />Aunque no puede fijarse de antemano el número y tamaño de estos módulos, debe intentarseun compromiso entre ambos factores. Si nos encontramos ante un módulo con un tamaño excesivo, podremos dividir éste a su vez en partes (nuevos módulos) más manejables, produciéndose la sucesiva división siempre desde problemas generales a problemas cada vez menos ambiciosos y, por tanto, de fácil desarrollo y seguimiento<br />. Así, esta división toma la forma de un árbol cuya raíz es el programa principal que implementa la solución al problema que afrontamos utilizando uno o varios módulos que realizan partes de dicha solución por sí solos o invocando a su vez otros módulos que solución a subproblemas más específicos. A esta aproximación se la denomina diseño descendente o top-down, como queda esquematizado.<br />.<br />El carácter auto contenido de los módulos o librerías hace que pueda ocultarse el funcionamiento interno de las funciones contenidas en un módulo, ya que para utilizarlas basta con saber con qué nombre y argumentos se invocan y qué tipo de valores devuelven.<br />Al reunirlas en un módulo, se realza la relación entre las mismas separándolas del<br />Resto del programa.<br />Esta ocultación de los detalles se denomina encapsulación y se alcanza dividiendo el<br />Código del programa en dos ficheros diferenciados: un fichero (con extensión " .h" ) que<br />Incluye la declaración de los tipos de datos y de las funciones gracias a lo cual se sabe<br />Cómo acceder y utilizar cada una de las mismas y otro (con extensión " .c" ) que contiene el código de cada una de las funciones declaradas en el .h.<br />Al compilar este último queda transformado en código objeto (al cual ya no se puede<br />Acceder para su lectura o modificación) y puede distribuirse conjuntamente con el<br />Fichero de declaración (el que acaba en .h), para su uso por parte de terceros sin riesgo alguno de alteración de la funcionalidad original (ésta quedó encapsulada u oculta).<br />Esto es así porque para hacer uso de las funciones incluidas en el módulo únicamente<br />Necesitaremos conocer la información que nos proporciona el fichero de declaración: el nombre, tipos de datos de los argumentos y valores de retorno de las funciones. No es necesario conocer los detalles de implementación (sentencias que se ejecutan dentro de una función).<br />388747060960<br />1951990109830<br />1010110110111010100010101010100101011010101010101010101010Ejemplo práctico<br />231<br />1. Lenguaje maquina<br />Encapsulación dividiendo el código del programa en dos ficheros diferenciados: un fichero (con extensión " .h" ) y otro (con extensión " .c" )<br />Código objeto.<br />CONCLUSIÓN<br />Al llevar a cabo el desarrollo de esta unidad pudimos conocer el proceso para la creación de programas, sus fases y lo que va implicado en ellos.<br />Para esto se utilizaron varias herramientas que nos ayudaron a su creación y más que nada a la administración del programa en sí, logrando con esto dividirlo en una serie de etapas.<br />Vimos nacer al programa desde la idea en si de lo que quería ser, hasta su denominación formal.<br />Para esto el programa tuvo que sufrir una serie de modificaciones a lo largo de su avance y se tuvo que documentar toda la información que se llevaba a cabo en estos.<br />De esto se puede deducir que; los programas tienen un lenguaje propio, mediante el cual el programador se comunica con el sistema. <br />Esta comunicación se rige por lo que podríamos llamar reglas pero más que nada son estatutos que debe contener.<br />Para esto se han creado las palabras para cada lenguaje, que nos permiten crear o modificar estructuras dentro de él.<br />Tomando en cuenta que estas instrucciones no las entiende por completo la maquina se han creado medios que permiten interpretar o convertir este lenguaje a uno entendible por la computadora. Con esto los programas son ejecutados de una manera propia, lo cual permite generar resultados entendibles y utilizables por las computadoras. Y también por los usuarios que manejan el programa.<br />BIBLIOGRAFÍA<br />INTRODUCCIÓN A LA COMPUTACIÓN<br />R. PETER NORTON<br />6TA EDICION MC GRAW HILL 1995, USA.<br />C/C++, JAVA COMO PROGRAMAR<br />DEITEL<br />PEARSON PRETINCEL HALL<br />4ª EDICION <br />FUNDAMENTOS DE SISTEMAS DIGITALES <br />PEARSON PRETICE HALL <br />THOMAS L. FLOYD, 9 ED <br />AUTOMATAS PROGRAMABLES<br />JOSEP BALCELLS Y JOSE LUIS ROMERAL<br />SERIE MUNDO ELECTRONICO <br />LÓGICA DIGITAL Y DISEÑO DE COMPUTADORAS<br />M. MORRIS MANO<br />EDITORIAL. PRENTICE HALL.<br />1994, 3ª .ED. 790 P. USA<br />office.microsoft.com/es-es/visio/HA101474483082.asp<br />www.gestiopolis.com/recursos/documentos/fulldocs/ger/diaggantaleja.htm<br />

×