SlideShare una empresa de Scribd logo
1 de 30
El diagrama de flujo es la representación gráfica del algoritmo o proceso. Se utiliza en
disciplinas como la programación, la economía, los procesos industriales y la psicología
    cognitiva. Estos diagramas utilizan símbolos con significados bien definidos que
representan los pasos del algoritmo, y representan el flujo de ejecución mediante flechas
                  que conectan los puntos de inicio y de fin de proceso.
Característica


                                                       
    Un diagrama de flujo siempre tiene un único punto de inicio y un único punto de término.
   Las siguientes son acciones previas a la realización del diagrama de flujo:
   Identificar las ideas principales a ser incluidas en el diagrama de flujo. Deben estar presentes el dueño o responsable
    del proceso, los dueños o responsables del proceso anterior y posterior y de otros procesos interrelacionados, otras
    partes interesadas.
   Definir qué se espera obtener del diagrama de flujo.
   Identificar quién lo empleará y cómo.
   Establecer el nivel de detalle requerido.
   Determinar los límites del proceso a describir.
   Los pasos a seguir para construir el diagrama de flujo son:
   Establecer el alcance del proceso a describir. De esta manera quedará fijado el comienzo y el final del diagrama.
    Frecuentemente el comienzo es la salida del proceso previo y el final la entrada al proceso siguiente.
   Identificar y listar las principales actividades/subprocesos que están incluidos en el proceso a describir y su orden
    cronológico.
   Si el nivel de detalle definido incluye actividades menores, listarlas también.
   Identificar y listar los puntos de decisión.
   Construir el diagrama respetando la secuencia cronológica y asignando los correspondientes símbolos.
   Asignar un título al diagrama y verificar que esté completo y describa con exactitud el proceso elegido.
Ventajas de los diagramas
          de flujos
                                     
 Favorecen la comprensión del proceso al mostrarlo como un dibujo. El
  cerebro humano reconoce muy fácilmente los dibujos. Un buen diagrama
  de flujo reemplaza varias páginas de texto.
 Permiten identificar los problemas y las oportunidades de mejora del
  proceso. Se identifican los pasos, los flujos de los re-procesos, los conflictos
  de autoridad, las responsabilidades, los cuellos de botella, y los puntos de
  decisión.
 Muestran las interfaces cliente-proveedor y las transacciones que en ellas
  se realizan, facilitando a los empleados el análisis de las mismas.
 Son una excelente herramienta para capacitar a los nuevos empleados y
  también a los que desarrollan la tarea, cuando se realizan mejoras en el
  proceso.
 Al igual que el pseudocódigo, el diagrama de flujo con fines de análisis de
  algoritmos de programación puede ser ejecutado en un ordenador, con un
  Ide como Free DFD.
Tipos de diagramas de
              flujos
                                   
 Formato vertical: En él, el flujo o la secuencia de las operaciones, va de
  arriba hacia abajo. Es una lista ordenada de las operaciones de un proceso
  con toda la información que se considere necesaria, según su propósito.
 Formato horizontal: En él, el flujo o la secuencia de las operaciones, va de
  izquierda a derecha.
 Formato panorámico: El proceso entero está representado en una sola carta
  y puede apreciarse de una sola mirada mucho más rápido que leyendo el
  texto, lo que facilita su comprensión, aún para personas no familiarizadas.
  Registra no solo en línea vertical, sino también horizontal, distintas
  acciones simultáneas y la participación de más de un puesto o
  departamento que el formato vertical no registra.
 Formato Arquitectónico: Describe el itinerario de ruta de una forma o
  persona sobre el plano arquitectónico del área de trabajo. El primero de los
  flujogramas es eminentemente descriptivo, mientras que los utilizados son
  fundamentalmente representativos.
Simbologia y significado

   Círculo: Procedimiento estandarizado.
                                              
   Cuadrado: Proceso de control.
   Línea ininterrumpida: Flujo de información vía formulario o documentación en soporte de papel
    escrito.
   Línea interrumpida: Flujo de información vía formulario digital.
   Rectángulo: Formulario o documentación. Se grafica con un doble de ancho que su altura.
   Rectángulo Pequeño: Valor o medio de pago (cheque, pagaré, etcétera).Se grafica con un
    cuádruple de ancho que su altura, siendo su ancho igual al de los formularios.
   Triángulo (base inferior): Archivo definitivo.
   Triángulo Invertido (base superior): Archivo Transitorio.
   Semi-óvalo: Demora.
   Rombo: División entre opciones.
   Trapezoide: Carga de datos al sistema.
   Elipsoide: Acceso por pantalla.
   Hexágono: Proceso no representado.
   Pentágono: Conector.
   Cruz de Diagonales: Destrucción de Formularios.
   Según la normativa, el flujo presupuesto es de izquierda a derecha y de arriba hacia abajo, siendo
    optativo el uso de flechas. Cuando el sentido es invertido (de derecha a izquierda o de arriba hacia
    abajo), es obligatorio el uso de la flecha.
historia

                                            
    La paternidad del diagrama de flujo es en principio algo difusa. El método estructurado para documentar
    graficamente un proceso como un flujo de pasos sucesivo y alternativos, el "proceso de diagrama de flujo", fue
    expuesto por Frank Gilbreth, en la Sociedad Americana de Ingenieros Mecánicos (ASME), en 1921, bajo el enunciado
    de "Proceso de Gráficas-Primeros pasos para encontrar el mejor modo". Estas herramientas de Gilbreth rápidamente
    encontraron sitio en los programas de ingeniería industrial. Al principio de los 30, un ingeniero industrial, Allan H.
    Mogensen comenzó la formación de personas de negocios en Lake Placid, Nueva York, incluyendo el uso del
    diagrama de flujo. Art Spinanger, asistente a las clases de Mogesen, utilizó las herramientas en su trabajo en Procter
    & Gamble, donde desarrolló su “Programa Metódico de Cambios por Etapas”. Otro asistente al grupo de graduados
    en 1944, Ben S. Graham, Director de Ingeniería de Formcraft Standard Register Corporation, adaptó la Gráfica de
    flujo de procesos al tratamiento de la información en su empresa. Y desarrolló la Gráfica del proceso de múltiples
    flujos en múltiples pantallas, documentos, y sus relaciones. En 1947, ASME adoptó un conjunto de símbolos
    derivados de la obra original de Gilbreth como Norma ASME para los gráficos de procesos (preparada Mishad,
    Ramsan y Raiaan).
   Sin embargo, según explica Douglas Hartree fueron originalmente Herman Goldstine y John von Neumann quienes
    desarrollaron el diagrama de flujo (inicialmente llamado "diagrama") para planificar los programas de ordenador.
    Las tablas de programación original de flujo de Goldstine y von Neumann, aparecen en un informe no publicado,
    "Planificación y codificación de los problemas de un instrumento de computación electrónica, la Parte II, Volumen 1
    "(1947), reproducido en las obras completas de von Neumann. Inicialmente los diagramas de flujo resultaron un
    medio popular para describir algoritmos de computadora, y aún se utilizan con este fin. Herramientas como los
    diagramas de actividad UML, pueden ser considerados como evoluciones del diagrama de flujo.
   En la década de 1970 la popularidad de los diagramas de flujo como método propio de la informática disminuyó,
    con el nuevo hardware y los nuevos lenguajes de programación de tercera generación. Y por otra parte se
    convirtieron en instrumentos comunes en el mundo empresarial. Son una expresión concisa, legible y práctica de
    algoritmos. Actualmente se aplican en muchos campos del conocimiento, especialmente como simplificación y
    expresión lógica de procesos, etc.
programación
                  
 La programación es el proceso de
  diseñar, codificar, depurar y mantener el código fuente de
  programas computacionales. El código fuente es escrito
  en un lenguaje de programación. El propósito de la
  programación es crear programas que exhiban un
  comportamiento deseado. El proceso de escribir código
  requiere frecuentemente conocimientos en varias áreas
  distintas, además del dominio del lenguaje a
  utilizar, algoritmos especializados y lógica formal.
  Programar no involucra necesariamente otras tareas tales
  como el análisis y diseño de la aplicación (pero sí el
  diseño del código), aunque sí suelen estar fusionadas en
  el desarrollo de pequeñas aplicaciones.
historia

                                      
    Para crear un programa, y que la computadora interprete y ejecute las instrucciones escritas en él,
    debe usarse un Lenguaje de programación.
   En sus inicios las computadoras interpretaban sólo instrucciones en un lenguaje específico, del
    más bajo nivel, conocido como código máquina, siendo éste excesivamente complicado para
    programar. De hecho sólo consiste en cadenas de números 1 y 0 (Sistema binario).
   Para facilitar el trabajo de programación, los primeros científicos que trabajaban en el área
    decidieron reemplazar las instrucciones, secuencias de unos y ceros, por palabras o letras
    provenientes del inglés; codificándolas así y creando un lenguaje de mayor nivel, que se conoce
    como Assembly o lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra
    inglesa add (sumar). En realidad escribir en lenguaje ensamblador es básicamente lo mismo que
    hacerlo en lenguaje máquina, pero las letras y palabras son bastante más fáciles de recordar y
    entender que secuencias de números binarios.
   A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo
    necesario disponer de un método sencillo para programar. Entonces, se crearon los lenguajes de
    alto nivel. Mientras que una tarea tan trivial como multiplicar dos números puede necesitar un
    conjunto de instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará con solo
    una.
   Una vez que se termina de escribir un programa, sea en ensamblador o en un lenguaje de alto
    nivel, es necesario compilarlo, es decir, traducirlo a lenguaje máquina
Lexico y programacion
            
 La programación se rige por reglas y un conjunto más o
  menos reducido de órdenes, expresiones, instrucciones y
  comandos que tienden a asemejarse a una lengua natural
  acotada (en inglés); y que además tienen la particularidad
  de una reducida ambigüedad. Cuanto menos ambiguo es
  un lenguaje de programación, se dice, es más potente.
  Bajo esta premisa, y en el extremo, el lenguaje más
  potente existente es el binario, con ambigüedad nula (lo
  cual lleva a pensar así del lenguaje ensamblador).
 En los lenguajes de programación de alto nivel se
  distinguen diversos elementos entre los que se incluyen el
  léxico propio del lenguaje y las reglas semánticas y
  sintácticas.
Programación y
                    algoritmo

                        
    Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de
    seguirse para resolver un problema. Un programa normalmente implementa (traduce a un
    lenguaje de programación concreto) uno o más algoritmos. Un algoritmo puede expresarse de
    distintas maneras: en forma gráfica, como un diagrama de flujo, en forma de código como en
    pseudocódigo o un lenguaje de programación, en forma explicativa, etc.
   Los programas suelen subdividirse en partes menores, llamadas módulos, de modo que la
    complejidad algorítmica de cada una de las partes sea menor que la del programa completo, lo
    cual ayuda al desarrollo del programa. Esta es una práctica muy utilizada y se conoce como
    "refino progresivo".
   Según Niklaus Wirth, un programa está formado por los algoritmos y la estructura de datos.
   Se han propuesto diversas técnicas de programación cuyo objetivo es mejorar tanto el proceso de
    creación de software como su mantenimiento. Entre ellas, se pueden mencionar las siguientes:
   Programación estructurada
   Programación modular
   Programación orientada a objetos (POO)
   Programación declarativa
complicacion

                          
    El programa escrito en un lenguaje de programación (fácilmente comprensible por el
    programador) es llamado programa fuente y no se puede ejecutar directamente en una
    computadora. La opción más común es compilar el programa obteniendo un módulo objeto,
    aunque también puede ejecutarse en forma más directa a través de un intérprete informático.
   El código fuente del programa se debe someter a un proceso de traducción para convertirlo en
    lenguaje máquina, código éste directamente ejecutable por el procesador. A este proceso se le
    llama compilación.
   Normalmente la creación de un programa ejecutable (un típico.exe para Microsoft Windows o
    DOS) conlleva dos pasos. El primer paso se llama compilación (propiamente dicho) y traduce el
    código fuente escrito en un lenguaje de programación almacenado en un archivo a código en bajo
    nivel (normalmente en código objeto, no directamente a lenguaje máquina). El segundo paso se
    llama enlazado en el cual se enlaza el código de bajo nivel generado de todos los ficheros y
    subprogramas que se han mandado compilar y se añade el código de las funciones que hay en las
    bibliotecas del compilador para que el ejecutable pueda comunicarse directamente con el sistema
    operativo, traduciendo así finalmente el código objeto a código máquina, y generando un módulo
    ejecutable.
   Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de
    compilación en archivos objetos (un típico.obj para Microsoft Windows, DOS o para Unix); para
    enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase de
    compilación se almacena sólo temporalmente. Un programa podría tener partes escritas en varios
    lenguajes (por ejemplo C, C++ y ensamblador), que se podrían compilar de forma independiente
    y luego enlazar juntas para formar un único módulo ejecutable.
Programación e ingeniera
          de software

                                                     
    Existe una tendencia a identificar el proceso de creación de un programa informático con la programación, que es
    cierta cuando se trata de programas pequeños para uso personal, y que dista de la realidad cuando se trata de
    grandes proyectos.
   El proceso de creación de software, desde el punto de vista de la ingeniería, incluye los siguientes pasos:
   Reconocer la necesidad de un programa para solucionar un problema o identificar la posibilidad de automatización
    de una tarea.
   Recoger los requisitos del programa. Debe quedar claro qué es lo que debe hacer el programa y para qué se necesita.
   Realizar el análisis de los requisitos del programa. Debe quedar claro cómo debe realizar el programa las cosas que
    debe hacer. Las pruebas que comprueben la validez del programa se pueden especificar en esta fase.
   Diseñar la arquitectura del programa. Se debe descomponer el programa en partes de complejidad abordable.
   Implementar el programa. Consiste en realizar un diseño detallado, especificando completamente todo el
    funcionamiento del programa, tras lo cual la codificación (programación propiamente dicha) debería resultar
    inmediata.
   Implantar (instalar) el programa. Consiste en poner el programa en funcionamiento junto con los componentes que
    pueda necesitar (bases de datos, redes de comunicaciones, etc.).
   La ingeniería del software se centra en los pasos de planificación y diseño del programa, mientras que antiguamente
    (programación artesanal) la realización de un programa consistía casi únicamente en escribir el código, bajo sólo el
    conocimiento de los requisitos y con una modesta fase de análisis y diseño.
Referencia historica
              
 La primera programadora de computadora conocida fue
  Ada Lovelace, hija de Anabella Milbanke Byron y Lord
  Byron. Anabella introdujo en las matemáticas a Ada
  quien, después de conocer a Charles Babbage, tradujo y
  amplió una descripción de su máquina analítica. Incluso
  aunque Babbage nunca completó la construcción de
  cualquiera de sus máquinas, el trabajo que Ada realizó
  con éstas le hizo ganarse el título de primera
  programadora de computadoras del mundo. El nombre
  del lenguaje de programación Ada fue escogido como
  homenaje a esta programadora.
 No olvidemos que este proceso está aplicado a todos los
  métodos científicos que actualmente se practican.
Objetivo de
                        programación

                             
    La programación debe perseguir la obtención de programas de calidad. Para ello se establece una serie de factores
    que determinan la calidad de un programa. Algunos de los factores de calidad más importantes son los siguientes:
   Corrección. Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su
    desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente qué debe
    hacer el programa antes de desarrollarlo y, una vez acabado, compararlo con lo que realmente hace.
   Claridad. Es muy importante que el programa sea lo más claro y legible posible, para facilitar así su desarrollo y
    posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, así
    como cuidar el estilo en la edición; de esta forma se ve facilitado el trabajo del programador, tanto en la fase de
    creación como en las fases posteriores de corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden
    ser realizadas incluso por otro programador, con lo cual la claridad es aún más necesaria para que otros
    programadores puedan continuar el trabajo fácilmente. Algunos programadores llegan incluso a utilizar Arte ASCII
    para delimitar secciones de código. Otros, por diversión o para impedir un análisis cómodo a otros
    programadores, recurren al uso de código ofuscado.
   Eficiencia. Se trata de que el programa, además de realizar aquello para lo que fue creado (es decir, que sea
    correcto), lo haga gestionando de la mejor forma posible los recursos que utiliza. Normalmente, al hablar de
    eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido
    creado y a la cantidad de memoria que necesita, pero hay otros recursos que también pueden ser de consideración al
    obtener la eficiencia de un programa, dependiendo de su naturaleza (espacio en disco que utiliza, tráfico de red que
    genera, etc.).
   Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea
    hardware o software, diferente a aquélla en la que se elaboró. La portabilidad es una característica muy deseable
    para un programa, ya que permite, por ejemplo, a un programa que se ha desarrollado para sistemas GNU/Linux
    ejecutarse también en la familia de sistemas operativos Windows. Esto permite que el programa pueda llegar a más
    usuarios más fácilmente.
Lenguaje de
                         programación

                              
    Para el libro, véase El lenguaje de programación C.
   Para otros usos de este término, véase C (desambiguación).
   C
   Desarrollador(es)
   Dennis Ritchie y Bell Labs
   Información general
   Paradigma                  Imperativo (Procedural), Estructurado
   Apareció en                1972
   Diseñado por               Dennis M. Ritchie
   Última versión estable C11 (diciembre de 2011)
   Tipo de dato               Débil, Estático
   Implementaciones           Múltiples
   DialectosCyclone, Unified Parallel C, Split-C, Cilk, C*
   Influido por               B (BCPL,CPL), ALGOL 68,1 Ensamblador, PL/I, Fortran
   Ha influido a              Vala, C#, Objective-C, C++, AWK, bc, Java, php, NXC, D
   Sistema operativo          Multiplataforma
   C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del
    anterior lenguaje B, a su vez basado en BCPL.
   Al igual que B, es un lenguaje orientado a la implementación de Sistemas Operativos, concretamente Unix. C es apreciado
    por la eficiencia del código que produce y es el lenguaje de programación más popular para crear software de sistemas,
    aunque también se utiliza para crear aplicaciones.
   Se trata de un lenguaje débilmente tipificado de medio nivel pero con muchas características de bajo nivel. Dispone de las
    estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un
    control a muy bajo nivel. Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar código en
    ensamblador con código C o acceder directamente a memoria o dispositivos periféricos.
filosofia
                                 
 Uno de los objetivos de diseño del lenguaje C es que sólo sean necesarias unas pocas
  instrucciones en lenguaje máquina para traducir cada elemento del lenguaje, sin que
  haga falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo
  nivel de abstracción; de hecho, C se usó como intermediario entre diferentes
  lenguajes.
 En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto
  de características, se pueden desarrollar compiladores de C fácilmente. En
  consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas
  (seguramente más que cualquier otro lenguaje). Además, a pesar de su naturaleza de
  bajo nivel, el lenguaje se desarrolló para incentivar la programación independiente
  de la máquina. Un programa escrito cumpliendo los estándares e intentando que sea
  portátil puede compilarse en muchos computadores.
 C se desarrolló originalmente (conjuntamente con el sistema operativo Unix, con el
  que ha estado asociado mucho tiempo) por programadores para programadores. Sin
  embargo, ha alcanzado una popularidad enorme, y se ha usado en contextos muy
  alejados de la programación de software de sistema, para la que se diseñó
  originalmente.
caracteristica
                         
 Uno de los objetivos de diseño del lenguaje C es que sólo sean necesarias unas pocas
  instrucciones en lenguaje máquina para traducir cada elemento del lenguaje, sin que
  haga falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo
  nivel de abstracción; de hecho, C se usó como intermediario entre diferentes
  lenguajes.
 En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto
  de características, se pueden desarrollar compiladores de C fácilmente. En
  consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas
  (seguramente más que cualquier otro lenguaje). Además, a pesar de su naturaleza de
  bajo nivel, el lenguaje se desarrolló para incentivar la programación independiente
  de la máquina. Un programa escrito cumpliendo los estándares e intentando que sea
  portátil puede compilarse en muchos computadores.
 C se desarrolló originalmente (conjuntamente con el sistema operativo Unix, con el
  que ha estado asociado mucho tiempo) por programadores para programadores. Sin
  embargo, ha alcanzado una popularidad enorme, y se ha usado en contextos muy
  alejados de la programación de software de sistema, para la que se diseñó
  originalmente.
historia
   Desarrollo inicial
                                            
   El desarrollo inicial de C se llevó a cabo en los Laboratorios Bell de AT&T entre 1969 y 1973; según Ritchie, el
    periodo más creativo tuvo lugar en 1972. Se le dio el nombre "C" porque muchas de sus características fueron
    tomadas de un lenguaje anterior llamado "B".
   Hay muchas leyendas acerca del origen de C y el sistema operativo con el que está íntimamente relacionado, Unix.
    Algunas de ellas son:
   El desarrollo de C fue el resultado del deseo de los programadores de jugar con Space Travel. Habían estado
    jugando en el mainframe de su compañía, pero debido a su poca capacidad de proceso y al tener que soportar 100
    usuarios, Thompson y Ritchie no tenían suficiente control sobre la nave para evitar colisiones con los asteroides. Por
    ese motivo decidieron portar el juego a un PDP-7 de la oficina que no se utilizaba; pero esa máquina no tenía
    sistema operativo, así que decidieron escribir uno. Finalmente decidieron portar el sistema operativo del PDP-11
    que había en su oficina, pero era muy costoso, pues todo el código estaba escrito en lenguaje ensamblador. Entonces
    decidieron usar un lenguaje de alto nivel y portátil para que el sistema operativo se pudiera portar fácilmente de un
    ordenador a otro. Consideraron usar B, pero carecía de las funcionalidades necesarias para aprovechar algunas
    características avanzadas del PDP-11. Entonces empezaron a crear un nuevo lenguaje, C.
   La justificación para obtener el ordenador original que se usó para desarrollar Unix fue crear un sistema que
    automatizase el archivo de patentes. La versión original de Unix se desarrolló en lenguaje ensamblador. Más tarde,
    el lenguaje C se desarrolló para poder reescribir el sistema operativo.
   En 1973, el lenguaje C se había vuelto tan potente que la mayor parte del kernel Unix, originalmente escrito en el
    lenguaje ensamblador PDP-11/20, fue reescrita en C. Éste fue uno de los primeros núcleos de sistema operativo
    implementados en un lenguaje distinto al ensamblador. (Algunos casos anteriores son el sistema Multics, escrito en
    PL/I, y Master Control Program para el B5000 de Burroughs, escrito en ALGOL en 1961).
Historia pt 2
   El C de Kernighan y Ritchie
                               
   En 1978, Ritchie y Brian Kernighan publicaron la primera edición de El lenguaje de programación C,
    también conocido como La biblia de C. Este libro fue durante años la especificación informal del lenguaje.
    El lenguaje descrito en este libro recibe habitualmente el nombre de "el C de Kernighan y Ritchie" o
    simplemente "K&R C" (La segunda edición del libro cubre el estándar ANSI C, descrito más abajo.)
   Kernighan y Ritchie introdujeron las siguientes características al lenguaje:
   El tipo de datos struct.
   El tipo de datos long int.
   El tipo de datos unsigned int.
   Los operadores =+ y =- fueron sustituidos por += y -= para eliminar la ambigüedad sintáctica de
    expresiones como i=-10, que se podría interpretar bien como i =- 10 o bien como i = -10.
   El C de Kernighan y Ritchie es el subconjunto más básico del lenguaje que un compilador debe de
    soportar. Durante muchos años, incluso tras la introducción del ANSI C, fue considerado "el mínimo
    común denominador" en el que los programadores debían programar cuando deseaban que sus
    programas fueran transportables, pues no todos los compiladores soportaban completamente ANSI, y el
    código razonablemente bien escrito en K&R C es también código ANSI C válido.
   En las primeras versiones del lenguaje, la definición de funciones se hacía mediante un 'prototipo de
    función' (function prototype), el cual indicaba al compilador el tipo de retorno de la función. Aunque este
    método tiene una gran desventaja respecto al nuevo, debido a que no comprueba el número ni el tipo en la
    lista de argumentos; en otras palabras, es mucho más fácil cometer errores al hacer un llamado a una
    función con argumentos incorrectos.
   Ejemplo del "viejo estilo":
Anis c o isos c
   A finales de la década de 1970, C empezó a sustituir a BASIC como lenguaje de programación de
    microcomputadores predominante. Durante la década de 1980 se empezó a usar en los IBM PC, lo


                                             
    que incrementó su popularidad significativamente. Al mismo tiempo, Bjarne Stroustrup empezó a
    trabajar con algunos compañeros de Bell Labs para añadir funcionalidades de programación
    orientada a objetos a C. El lenguaje que crearon, llamado C++, es hoy en día el lenguaje de
    programación de aplicaciones más común en el sistema operativo Microsoft Windows; mientras
    que C sigue siendo más popular en el entorno Unix. Otro lenguaje que se desarrolló en esa época,
    Objective C, también añadió características de programación orientada a objetos a C. Aunque hoy
    en día no es tan popular como C++, se usa para desarrollar aplicaciones Cocoa para Mac OS X.
   En 1983, el Instituto Nacional Estadounidense de Estándares organizó un comité, X3j11, para
    establecer una especificación estándar de C. Tras un proceso largo y arduo, se completó el
    estándar en 1989 y se ratificó como el "Lenguaje de Programación C" ANSI X3.159-1989. Esta
    versión del lenguaje se conoce a menudo como ANSI C, o a veces como C89 (para distinguirla de
    C99).
   En 1990, el estándar ANSI (con algunas modificaciones menores) fue adoptado por la
    Organización Internacional para la Estandarización (ISO) en el estándar ISO/IEC 9899:1990. Esta
    versión se conoce a veces como C90. No obstante, "C89" y "C90" se refieren en esencia al mismo
    lenguaje.
   Uno de los objetivos del proceso de estandarización del ANSI C fue producir una extensión al C
    de Kernighan y Ritchie, incorporando muchas funcionalidades no oficiales. Sin embargo, el
    comité de estandarización incluyó también muchas funcionalidades nuevas, como prototipos de
    función, y un preprocesador mejorado. También se cambió la sintaxis de la declaración de
    parámetros para hacerla semejante a la empleada habitualmente en C++:
c99

                                                    
    Tras el proceso de estandarización de ANSI, la especificación del lenguaje C permaneció relativamente estable
    durante algún tiempo, mientras que C++ siguió evolucionando. Sin embargo, el estándar continuó bajo revisión a
    finales de la década de 1990, lo que llevó a la publicación del estándar ISO 9899:1999 en 1999. Este estándar se
    denomina habitualmente "C99". Se adoptó como estándar ANSI en marzo de 2000.
   Las nuevas características de C99 incluyen:
   Funciones inline.
   Las variables pueden declararse en cualquier sitio (como en C++), en lugar de poder declararse sólo tras otra
    declaración o al comienzo de una declaración compuesta.
   Muchos tipos de datos, incluyendo long long int (para reducir el engorro de la transición de 32 bits a 64 bits), un
    tipo de datos booleano, y un tipo complex que representa números complejos.
   Arrays de longitud variable.
   Soporte para comentarios de una línea que empiecen con //, como en BCPL o en C++, característica para la que
    muchos compiladores habían dado soporte por su cuenta.
   muchas funciones nuevas, como snprintf()
   muchos headers nuevos, como stdint.h.
   Una consideración importante es que hasta la publicación de este estándar, C había sido mayormente un
    subconjunto estricto del C++. Era muy sencillo "actualizar" un programa de C hacia C++ y mantener ese código
    compilable en ambos lenguajes. Sin embargo, el nuevo estándar agrega algunas características que C++ no
    admite, como por ejemplo los inicializadores estáticos de estructuras. También define al tipo "bool" de una manera
    que no es exactamente la del C++.
   El compilador GCC, entre muchos otros, soportan hoy en día la mayoría de las nuevas características de C99. Sin
    embargo, este nuevo estándar ha tenido poca acogida entre algunos desarrolladores de compiladores, como
    Microsoft y Borland, que se han centrado en C++. Brandon Bray, de Microsoft, dijo a este respecto:
   "En general, hemos visto poca demanda de muchas características de C99. Algunas características tienen más
    demanda que otras, y consideraremos incluirlas en versiones futuras siempre que sean compatibles con C++."2
c11
                         
 C11
 C11 (antes conocido como C1X) es un nombre
  informal para ISO/IEC 9899:2011,3 el último
  estándar publicado para C. El borrador final,
  N1570,4 fue publicado en abril de 2011. El nuevo
  estándar superó su última revisión el 10 de octubre
  de 2011 y fue oficialmente ratificado por la ISO y
  publicado el 8 de diciembre de 2011.
ventajas
                    
 Lenguaje muy eficiente puesto que es posible utilizar
  sus características de bajo nivel para realizar
  implementaciones óptimas.
 A pesar de su bajo nivel es el lenguaje más portado
  en existencia, habiendo compiladores para casi todos
  los sistemas conocidos.
 Proporciona facilidades para realizar programas
  modulares y/o utilizar código o bibliotecas
  existentes.
invoquaciones

                          
    El mayor problema que presenta el lenguaje C frente a los lenguajes de tipo de dato dinámico es la
    gran diferencia en velocidad de desarrollo: es más lento programar en C, sobre todo para el
    principiante. La razón estriba en que el compilador de C se limita a traducir código sin apenas
    añadir nada. La gestión de la memoria es un ejemplo clásico: en C el programador ha de reservar
    y liberar la memoria explícitamente. En otros lenguajes (como BASIC, Matlab o C#) la memoria es
    gestionada de forma transparente para el programador. Esto alivia la carga de trabajo humano y
    en muchas ocasiones previene errores, aunque también supone mayor carga de trabajo para el
    procesador.
   El mantenimiento en algunos casos puede ser más difícil y costoso que con ciertos lenguajes de
    más alto nivel. El código en C se presta a sentencias cortas y enrevesadas de difícil interpretación.
    Aunque el lenguaje admite código escrito de forma fácilmente legible, si no se siguen normas en el
    equipo de programación algunos programadores pueden acabar escribiendo código difícil de leer.
    Esto complica la revisión y el mantenimiento. Aunque en realidad esto está más relacionado con
    el equipo de desarrollo que con el lenguaje en sí.
   Cabe destacar el contexto y época en la que fue desarrollado C. En aquellos tiempos existían muy
    pocos programadores, los cuales, a su vez, eran prácticamente todos expertos en el área. De esta
    manera, se asumía que los programadores eran conscientes de sus trabajos y capaces manejar
    perfectamente el lenguaje. Por esta razón es muy importante que los recién iniciados adopten
    buenas prácticas a la hora de escribir en C y manejar la memoria, como por ejemplo un uso
    intensivo de indentación y conocer a fondo todo lo que implica el manejo de punteros y
    direcciones de memoria.
variantes
                              
 Desde el inicio del lenguaje han surgido varias ramas de evolución que han generado
  varios lenguajes:
 Objective-C es un primer intento de proporcionar soporte para la programación
  orientada a objetos en C, de escasa difusión, pero actualmente usado en Mac OS X ,
  iOS y GNUstep.
 C++ (pronunciado C Plus Plus) diseñado por Bjarne Stroustrup fue el segundo
  intento de proporcionar orientación a objetos a C y es la variante más difundida y
  aceptada. Esta versión combina la flexibilidad y el acceso de bajo nivel de C con las
  características de la programación orientada a objetos como abstracción,
  encapsulación y ocultación.
 También se han creado numerosos lenguajes inspirados en la sintaxis de C, pero que
  no son compatibles con él:
 Java, que une una sintaxis inspirada en la del C++ con una orientación a objetos más
  similar a la de Smalltalk y Objective C.
 JavaScript, un lenguaje de scripting creado en Netscape e inspirado en la sintaxis de
  Java diseñado para dar a las páginas web mayor interactividad. A la versión
  estandarizada se la conoce como ECMAScript.
 C# (pronunciado C Sharp) es un lenguaje desarrollado por Microsoft derivado de
  C/C++ y Java.
Procesos de
               complicacion
                    
 La compilación de un programa C se realiza en varias fases que
  normalmente son automatizadas y ocultadas por los entornos
  de desarrollo:
 Preprocesado consistente en modificar el código fuente en C
  según una serie de instrucciones (denominadas directivas de
  preprocesado) simplificando de esta forma el trabajo del
  compilador. Por ejemplo, una de las acciones más importantes
  es la modificación de las inclusiones (#include) por las
  declaraciones reales existentes en el archivo indicado.
 Compilación que genera el código objeto a partir del código ya
  preprocesado.
 Enlazado que une los códigos objeto de los distintos módulos y
  bibliotecas externas (como las bibliotecas del sistema) para
  generar el programa ejecutable final.
Herramientas de
           programacion
                
 Al programar en C, es habitual usar algunas herramientas de
  programación de uso muy extendido, sobre todo en entorno de
  tipo unix:
 make: Herramienta para automatizar el proceso de
  compilación, enlazado, etc.
 lint: Herramienta utilizada para detectar código sospechoso,
  confuso o incompatible entre distintas arquitecturas
 valgrind: Herramienta utilizada para detectar posibles fugas de
  memoria.
 gdb : Debugger de GNU utilizado para seguir la ejecución del
  programa.
 dbx : Debugger que suele venir instalado con todos los UNIX.
 ddd : Interfaz gráfico para el depurador gdb o dbx.
aplicabilidad

                                 
    Hecho principalmente para la fluidez de programación en sistemas UNIX. Se usa también para el desarrollo de
    otros sistemas operativos como Windows o GNU/Linux. Igualmente para aplicaciones de escritorio como
    GIMP, cuyo principal lenguaje de programación es C.
   De la misma forma, es muy usado en aplicaciones científicas (para experimentos
    informáticos, físicos, químicos, matemáticos, entre otros, parte de ellos conocidos como modelos y
    simuladores), industriales (industria robótica, cibernética, sistemas de información y base de datos para la industria
    petrolera y petroquímica. Predominan también todo lo que se refiere a simulación de máquinas de
    manufactura), simulaciones de vuelo (es la más delicada, ya que se tienen que usar demasiados recursos tanto de
    hardware como de software para desarrollar aplicaciones que permitan simular el vuelo real de una aeronave. Se
    aplica por tanto, en diversas áreas desconocidas por gran parte de los usuarios noveles.
   Los ordenadores de finales de los 90 son varios órdenes de magnitud más potentes que las máquinas en que C se
    desarrolló originalmente. Programas escritos en lenguajes de tipo dinámico y fácil codificación
    (Ruby, Python, Perl...) que antaño hubieran resultado demasiado lentos, son lo bastante rápidos como para
    desplazar en uso a C. Aun así, se puede seguir encontrando código C en grandes desarrollos de
    animaciones, modelados y escenas en 3D en películas y otras aplicaciones multimedia.
   Actualmente, los grandes proyectos de software se dividen en partes, dentro de un equipo de desarrollo. Aquellas
    partes que son más "burocráticas" o "de gestión" con los recursos del sistema, se suelen realizar en lenguajes de tipo
    dinámico o de guión (script), mientras que aquellas partes "críticas", por su necesidad de rapidez de ejecución, se
    realizan en un lenguaje de tipo compilado, como C o C++. Si, después de hacer la división, las partes críticas no
    superan un cierto porcentaje del total (aproximadamente el 10%) entonces todo el desarrollo se realiza con lenguajes
    dinámicos. Si la parte crítica no llega a cumplir las expectativas del proyecto, se comparan las alternativas de una
    inversión en nuevo hardware frente a invertir en el coste de un programador para que reescriba dicha parte crítica.
Biblioteca c
                          
 Una biblioteca de C es una colección de funciones utilizadas en el lenguaje
  de programación C. Las bibliotecas más comunes son la biblioteca estándar
  de C y la biblioteca del estándar ANSI C, la cual provee las especificaciones
  de los estándares que son ampliamente compartidas entre bibliotecas. La
  biblioteca ANSI C estándar, incluye funciones para la entrada y salida de
  archivos, alojamiento de memoria y operaciones con datos comunes:
  funciones matemáticas, funciones de manejo de cadenas de texto y
  funciones de hora y fecha.
 Otras bibliotecas C son aquellas utilizadas para desarrollar sistemas Unix,
  las cuales proveen interfaces hacia el núcleo. Estas funciones son detalladas
  en varios estándares tales como POSIX y el Single UNIX Specification.
 Ya que muchos programas han sido escritos en el lenguaje C existe una
  gran variedad de bibliotecas disponibles. Muchas bibliotecas son escritas
  en C debido a que C genera código objeto rápido; los programadores luego
  generan interfaces a la biblioteca para que las rutinas puedan ser utilizadas
  desde lenguajes de mayor nivel, tales como Java, Perl y Python.
Aplicaciones embabidas
          
 C es el lenguaje común para programar sistemas
  embebidos.[cita requerida] El código ligero que un
  compilador C genera, combinado con la capacidad de
  acceso a capas del software cercanas al hardware son la
  causa de su popularidad en estas aplicaciones.
 Una característica donde C demuestra comodidad de uso
  particularmente valiosa en sistemas embebidos es la
  manipulación de bits. Los sistemas contienen registros
  mapeados en memoria (en inglés, MMR) a través de los
  cuales los periféricos se configuran. Estos registros
  mezclan varias configuraciones en la misma dirección de
  memoria, aunque en bits distintos. Con C es posible
  modificar fácilmente uno de estos bits sin alterar el resto

Más contenido relacionado

La actualidad más candente

Documentación de Software
Documentación de Software Documentación de Software
Documentación de Software waqoak
 
Topicos Avanzados de Programacion - Unidad 3 componentes y librerias
Topicos Avanzados de Programacion - Unidad 3 componentes y libreriasTopicos Avanzados de Programacion - Unidad 3 componentes y librerias
Topicos Avanzados de Programacion - Unidad 3 componentes y libreriasJosé Antonio Sandoval Acosta
 
Producto medio para generar números aleatorios.
Producto medio para generar números aleatorios.Producto medio para generar números aleatorios.
Producto medio para generar números aleatorios.Leopoldo N. Chavez
 
Diseño de software modelo lineal (presentacion)
Diseño de software   modelo lineal (presentacion)Diseño de software   modelo lineal (presentacion)
Diseño de software modelo lineal (presentacion)Marco Antonio Perez Montero
 
Proyecto de pasteleria
Proyecto de pasteleriaProyecto de pasteleria
Proyecto de pasteleriaMonica Rmz M
 
3-Modelamiento de Procesos usando BPMN.ppt
3-Modelamiento de Procesos usando BPMN.ppt3-Modelamiento de Procesos usando BPMN.ppt
3-Modelamiento de Procesos usando BPMN.pptJuan Pino
 
Diagrama De Secuencia
Diagrama De SecuenciaDiagrama De Secuencia
Diagrama De SecuenciaRafael
 
Computacion grafica
Computacion graficaComputacion grafica
Computacion graficaangel martin
 
1.3 lenguajes de simulacion y simuladores
1.3 lenguajes de simulacion y simuladores1.3 lenguajes de simulacion y simuladores
1.3 lenguajes de simulacion y simuladoresJoOsee Kette
 
Unidad 4 graficación
Unidad 4 graficaciónUnidad 4 graficación
Unidad 4 graficaciónAndhy H Palma
 
Introducción a TypeScript
Introducción a TypeScriptIntroducción a TypeScript
Introducción a TypeScriptPablo Bouzada
 

La actualidad más candente (20)

Documentación de Software
Documentación de Software Documentación de Software
Documentación de Software
 
Topicos Avanzados de Programacion - Unidad 3 componentes y librerias
Topicos Avanzados de Programacion - Unidad 3 componentes y libreriasTopicos Avanzados de Programacion - Unidad 3 componentes y librerias
Topicos Avanzados de Programacion - Unidad 3 componentes y librerias
 
Pruebas de autocorrelacion yule
Pruebas de autocorrelacion yulePruebas de autocorrelacion yule
Pruebas de autocorrelacion yule
 
Ejemplo de Proyecto de Software
Ejemplo de Proyecto de SoftwareEjemplo de Proyecto de Software
Ejemplo de Proyecto de Software
 
Producto medio para generar números aleatorios.
Producto medio para generar números aleatorios.Producto medio para generar números aleatorios.
Producto medio para generar números aleatorios.
 
Casos De Uso
Casos De UsoCasos De Uso
Casos De Uso
 
Roles desarrollo del software
Roles desarrollo del softwareRoles desarrollo del software
Roles desarrollo del software
 
Diseño de software modelo lineal (presentacion)
Diseño de software   modelo lineal (presentacion)Diseño de software   modelo lineal (presentacion)
Diseño de software modelo lineal (presentacion)
 
Proyecto de pasteleria
Proyecto de pasteleriaProyecto de pasteleria
Proyecto de pasteleria
 
Programación 1: modularización
Programación 1: modularizaciónProgramación 1: modularización
Programación 1: modularización
 
3-Modelamiento de Procesos usando BPMN.ppt
3-Modelamiento de Procesos usando BPMN.ppt3-Modelamiento de Procesos usando BPMN.ppt
3-Modelamiento de Procesos usando BPMN.ppt
 
Bases de datos NoSQL en entornos Big Data
Bases de datos NoSQL en entornos Big DataBases de datos NoSQL en entornos Big Data
Bases de datos NoSQL en entornos Big Data
 
Diagrama De Secuencia
Diagrama De SecuenciaDiagrama De Secuencia
Diagrama De Secuencia
 
Computacion grafica
Computacion graficaComputacion grafica
Computacion grafica
 
1.3 lenguajes de simulacion y simuladores
1.3 lenguajes de simulacion y simuladores1.3 lenguajes de simulacion y simuladores
1.3 lenguajes de simulacion y simuladores
 
Unidad 4 graficación
Unidad 4 graficaciónUnidad 4 graficación
Unidad 4 graficación
 
Introducción a TypeScript
Introducción a TypeScriptIntroducción a TypeScript
Introducción a TypeScript
 
control de concurrencia
control de concurrenciacontrol de concurrencia
control de concurrencia
 
Documento vision
Documento visionDocumento vision
Documento vision
 
Modelos uml compras v4
Modelos uml compras v4Modelos uml compras v4
Modelos uml compras v4
 

Destacado

Diagrama de flujo gabriel cornejo 4 to b
Diagrama de flujo gabriel cornejo 4 to bDiagrama de flujo gabriel cornejo 4 to b
Diagrama de flujo gabriel cornejo 4 to bgabuxitopcornejo
 
Modulo estudio de trabajo
Modulo estudio de trabajoModulo estudio de trabajo
Modulo estudio de trabajoRosyl
 
Procesos metacognitivos
Procesos metacognitivosProcesos metacognitivos
Procesos metacognitivosSERCARBONE
 
Diagramas de flujo
Diagramas de flujoDiagramas de flujo
Diagramas de flujobhylenia
 
Operadores y Expresiones
Operadores y ExpresionesOperadores y Expresiones
Operadores y ExpresionesCarlos Pes
 
Algoritmos Y Programas Unidad1
Algoritmos Y  Programas Unidad1Algoritmos Y  Programas Unidad1
Algoritmos Y Programas Unidad1Silvanac
 
Operadores aritméticos, lógicos, relacionales.
Operadores aritméticos, lógicos, relacionales.Operadores aritméticos, lógicos, relacionales.
Operadores aritméticos, lógicos, relacionales.Raul Ortega
 
gestión de procesos industriales
gestión de procesos industriales gestión de procesos industriales
gestión de procesos industriales Lili Borbor
 
El texto descriptivo
El texto descriptivoEl texto descriptivo
El texto descriptivounp
 
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...Marcelo Vilela Pardo
 
Reglas Para Diagramas
Reglas Para DiagramasReglas Para Diagramas
Reglas Para Diagramasfrancisco3011
 
Algoritmos y diagramas de flujo
Algoritmos y diagramas de flujoAlgoritmos y diagramas de flujo
Algoritmos y diagramas de flujoKvinzuco
 
Diagramas de proceso
Diagramas de procesoDiagramas de proceso
Diagramas de procesojulietas
 
Definición de diagrama de proceso
Definición de diagrama de procesoDefinición de diagrama de proceso
Definición de diagrama de procesoferantonio-93
 
Diagramas De Flujo
Diagramas De FlujoDiagramas De Flujo
Diagramas De Flujocarlospaul
 
Ejemplos de Algoritmos
Ejemplos de AlgoritmosEjemplos de Algoritmos
Ejemplos de AlgoritmosPepe Xdsasda
 

Destacado (20)

Diagrama de flujo gabriel cornejo 4 to b
Diagrama de flujo gabriel cornejo 4 to bDiagrama de flujo gabriel cornejo 4 to b
Diagrama de flujo gabriel cornejo 4 to b
 
El texto descriptivo II
El texto descriptivo IIEl texto descriptivo II
El texto descriptivo II
 
Modulo estudio de trabajo
Modulo estudio de trabajoModulo estudio de trabajo
Modulo estudio de trabajo
 
Procesos metacognitivos
Procesos metacognitivosProcesos metacognitivos
Procesos metacognitivos
 
Diagramas de flujo
Diagramas de flujoDiagramas de flujo
Diagramas de flujo
 
Operadores y Expresiones
Operadores y ExpresionesOperadores y Expresiones
Operadores y Expresiones
 
El texto descriptivo I
El texto descriptivo IEl texto descriptivo I
El texto descriptivo I
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmos Y Programas Unidad1
Algoritmos Y  Programas Unidad1Algoritmos Y  Programas Unidad1
Algoritmos Y Programas Unidad1
 
Operadores aritméticos, lógicos, relacionales.
Operadores aritméticos, lógicos, relacionales.Operadores aritméticos, lógicos, relacionales.
Operadores aritméticos, lógicos, relacionales.
 
gestión de procesos industriales
gestión de procesos industriales gestión de procesos industriales
gestión de procesos industriales
 
El texto descriptivo
El texto descriptivoEl texto descriptivo
El texto descriptivo
 
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
 
Reglas Para Diagramas
Reglas Para DiagramasReglas Para Diagramas
Reglas Para Diagramas
 
Algoritmos y diagramas de flujo
Algoritmos y diagramas de flujoAlgoritmos y diagramas de flujo
Algoritmos y diagramas de flujo
 
Diagramas de proceso
Diagramas de procesoDiagramas de proceso
Diagramas de proceso
 
Definición de diagrama de proceso
Definición de diagrama de procesoDefinición de diagrama de proceso
Definición de diagrama de proceso
 
Diagramas ishikawa
Diagramas ishikawaDiagramas ishikawa
Diagramas ishikawa
 
Diagramas De Flujo
Diagramas De FlujoDiagramas De Flujo
Diagramas De Flujo
 
Ejemplos de Algoritmos
Ejemplos de AlgoritmosEjemplos de Algoritmos
Ejemplos de Algoritmos
 

Similar a Diagrama de flujo

Miguel guillen 4to b
Miguel guillen 4to bMiguel guillen 4to b
Miguel guillen 4to bangelordx
 
Diagrama de flujo pr michael
Diagrama de flujo pr michaelDiagrama de flujo pr michael
Diagrama de flujo pr michaelobtener
 
Diagrama de flujo po tony paredes 4b
Diagrama de flujo po tony paredes 4bDiagrama de flujo po tony paredes 4b
Diagrama de flujo po tony paredes 4bTony Paredes
 
Diagrama de flujo y programacion
Diagrama de flujo y programacionDiagrama de flujo y programacion
Diagrama de flujo y programacionCriss Russo
 
Diagrama de flujo
Diagrama de flujoDiagrama de flujo
Diagrama de flujolordXDie
 
Diagramadeflujopotonyparedes4b 120530095800-phpapp01
Diagramadeflujopotonyparedes4b 120530095800-phpapp01Diagramadeflujopotonyparedes4b 120530095800-phpapp01
Diagramadeflujopotonyparedes4b 120530095800-phpapp01Martin Eduardo Toro Suarez
 
Diagramadeflujoprmichael 120530095613-phpapp02
Diagramadeflujoprmichael 120530095613-phpapp02Diagramadeflujoprmichael 120530095613-phpapp02
Diagramadeflujoprmichael 120530095613-phpapp02Leydi Ortiz
 
Digramas progr lengu mendez
Digramas progr lengu mendezDigramas progr lengu mendez
Digramas progr lengu mendezAlexaods
 
Diagramas de Flujo
Diagramas de FlujoDiagramas de Flujo
Diagramas de FlujoGladysct
 
Diagrama de flujo de procesos - ALVARADO GONZABABY DANNY JOEL - IND-S-NO-4-7....
Diagrama de flujo de procesos - ALVARADO GONZABABY DANNY JOEL - IND-S-NO-4-7....Diagrama de flujo de procesos - ALVARADO GONZABABY DANNY JOEL - IND-S-NO-4-7....
Diagrama de flujo de procesos - ALVARADO GONZABABY DANNY JOEL - IND-S-NO-4-7....DannyAlvarado26
 

Similar a Diagrama de flujo (20)

Miguel guillen 4to b
Miguel guillen 4to bMiguel guillen 4to b
Miguel guillen 4to b
 
Diagramadeflujo
DiagramadeflujoDiagramadeflujo
Diagramadeflujo
 
Diagrama de flujo
Diagrama de flujoDiagrama de flujo
Diagrama de flujo
 
Diagrama de flujo
Diagrama de flujoDiagrama de flujo
Diagrama de flujo
 
Diagrama de flujo pr michael
Diagrama de flujo pr michaelDiagrama de flujo pr michael
Diagrama de flujo pr michael
 
Diagrama de flujo po tony paredes 4b
Diagrama de flujo po tony paredes 4bDiagrama de flujo po tony paredes 4b
Diagrama de flujo po tony paredes 4b
 
Diagrama de flujo y programacion
Diagrama de flujo y programacionDiagrama de flujo y programacion
Diagrama de flujo y programacion
 
Diagrama de flujo
Diagrama de flujoDiagrama de flujo
Diagrama de flujo
 
Diagramadeflujopotonyparedes4b 120530095800-phpapp01
Diagramadeflujopotonyparedes4b 120530095800-phpapp01Diagramadeflujopotonyparedes4b 120530095800-phpapp01
Diagramadeflujopotonyparedes4b 120530095800-phpapp01
 
Diagramadeflujoprmichael 120530095613-phpapp02
Diagramadeflujoprmichael 120530095613-phpapp02Diagramadeflujoprmichael 120530095613-phpapp02
Diagramadeflujoprmichael 120530095613-phpapp02
 
Diagrama de flujo
Diagrama de flujoDiagrama de flujo
Diagrama de flujo
 
Digramas progr lengu mendez
Digramas progr lengu mendezDigramas progr lengu mendez
Digramas progr lengu mendez
 
Texto base
Texto baseTexto base
Texto base
 
Diagramas de Flujo
Diagramas de FlujoDiagramas de Flujo
Diagramas de Flujo
 
Diagrama de flujos
Diagrama de flujosDiagrama de flujos
Diagrama de flujos
 
Diagrama de flujo de procesos - ALVARADO GONZABABY DANNY JOEL - IND-S-NO-4-7....
Diagrama de flujo de procesos - ALVARADO GONZABABY DANNY JOEL - IND-S-NO-4-7....Diagrama de flujo de procesos - ALVARADO GONZABABY DANNY JOEL - IND-S-NO-4-7....
Diagrama de flujo de procesos - ALVARADO GONZABABY DANNY JOEL - IND-S-NO-4-7....
 
Diagramas de flujo (1)
Diagramas de flujo (1)Diagramas de flujo (1)
Diagramas de flujo (1)
 
Diagrama de flujo
Diagrama de flujoDiagrama de flujo
Diagrama de flujo
 
Diagramas de flujo
Diagramas de flujoDiagramas de flujo
Diagramas de flujo
 
Diagramas de flujo
Diagramas de flujoDiagramas de flujo
Diagramas de flujo
 

Diagrama de flujo

  • 1. El diagrama de flujo es la representación gráfica del algoritmo o proceso. Se utiliza en disciplinas como la programación, la economía, los procesos industriales y la psicología cognitiva. Estos diagramas utilizan símbolos con significados bien definidos que representan los pasos del algoritmo, y representan el flujo de ejecución mediante flechas que conectan los puntos de inicio y de fin de proceso.
  • 2. Característica   Un diagrama de flujo siempre tiene un único punto de inicio y un único punto de término.  Las siguientes son acciones previas a la realización del diagrama de flujo:  Identificar las ideas principales a ser incluidas en el diagrama de flujo. Deben estar presentes el dueño o responsable del proceso, los dueños o responsables del proceso anterior y posterior y de otros procesos interrelacionados, otras partes interesadas.  Definir qué se espera obtener del diagrama de flujo.  Identificar quién lo empleará y cómo.  Establecer el nivel de detalle requerido.  Determinar los límites del proceso a describir.  Los pasos a seguir para construir el diagrama de flujo son:  Establecer el alcance del proceso a describir. De esta manera quedará fijado el comienzo y el final del diagrama. Frecuentemente el comienzo es la salida del proceso previo y el final la entrada al proceso siguiente.  Identificar y listar las principales actividades/subprocesos que están incluidos en el proceso a describir y su orden cronológico.  Si el nivel de detalle definido incluye actividades menores, listarlas también.  Identificar y listar los puntos de decisión.  Construir el diagrama respetando la secuencia cronológica y asignando los correspondientes símbolos.  Asignar un título al diagrama y verificar que esté completo y describa con exactitud el proceso elegido.
  • 3. Ventajas de los diagramas de flujos   Favorecen la comprensión del proceso al mostrarlo como un dibujo. El cerebro humano reconoce muy fácilmente los dibujos. Un buen diagrama de flujo reemplaza varias páginas de texto.  Permiten identificar los problemas y las oportunidades de mejora del proceso. Se identifican los pasos, los flujos de los re-procesos, los conflictos de autoridad, las responsabilidades, los cuellos de botella, y los puntos de decisión.  Muestran las interfaces cliente-proveedor y las transacciones que en ellas se realizan, facilitando a los empleados el análisis de las mismas.  Son una excelente herramienta para capacitar a los nuevos empleados y también a los que desarrollan la tarea, cuando se realizan mejoras en el proceso.  Al igual que el pseudocódigo, el diagrama de flujo con fines de análisis de algoritmos de programación puede ser ejecutado en un ordenador, con un Ide como Free DFD.
  • 4. Tipos de diagramas de flujos   Formato vertical: En él, el flujo o la secuencia de las operaciones, va de arriba hacia abajo. Es una lista ordenada de las operaciones de un proceso con toda la información que se considere necesaria, según su propósito.  Formato horizontal: En él, el flujo o la secuencia de las operaciones, va de izquierda a derecha.  Formato panorámico: El proceso entero está representado en una sola carta y puede apreciarse de una sola mirada mucho más rápido que leyendo el texto, lo que facilita su comprensión, aún para personas no familiarizadas. Registra no solo en línea vertical, sino también horizontal, distintas acciones simultáneas y la participación de más de un puesto o departamento que el formato vertical no registra.  Formato Arquitectónico: Describe el itinerario de ruta de una forma o persona sobre el plano arquitectónico del área de trabajo. El primero de los flujogramas es eminentemente descriptivo, mientras que los utilizados son fundamentalmente representativos.
  • 5. Simbologia y significado  Círculo: Procedimiento estandarizado.   Cuadrado: Proceso de control.  Línea ininterrumpida: Flujo de información vía formulario o documentación en soporte de papel escrito.  Línea interrumpida: Flujo de información vía formulario digital.  Rectángulo: Formulario o documentación. Se grafica con un doble de ancho que su altura.  Rectángulo Pequeño: Valor o medio de pago (cheque, pagaré, etcétera).Se grafica con un cuádruple de ancho que su altura, siendo su ancho igual al de los formularios.  Triángulo (base inferior): Archivo definitivo.  Triángulo Invertido (base superior): Archivo Transitorio.  Semi-óvalo: Demora.  Rombo: División entre opciones.  Trapezoide: Carga de datos al sistema.  Elipsoide: Acceso por pantalla.  Hexágono: Proceso no representado.  Pentágono: Conector.  Cruz de Diagonales: Destrucción de Formularios.  Según la normativa, el flujo presupuesto es de izquierda a derecha y de arriba hacia abajo, siendo optativo el uso de flechas. Cuando el sentido es invertido (de derecha a izquierda o de arriba hacia abajo), es obligatorio el uso de la flecha.
  • 6. historia   La paternidad del diagrama de flujo es en principio algo difusa. El método estructurado para documentar graficamente un proceso como un flujo de pasos sucesivo y alternativos, el "proceso de diagrama de flujo", fue expuesto por Frank Gilbreth, en la Sociedad Americana de Ingenieros Mecánicos (ASME), en 1921, bajo el enunciado de "Proceso de Gráficas-Primeros pasos para encontrar el mejor modo". Estas herramientas de Gilbreth rápidamente encontraron sitio en los programas de ingeniería industrial. Al principio de los 30, un ingeniero industrial, Allan H. Mogensen comenzó la formación de personas de negocios en Lake Placid, Nueva York, incluyendo el uso del diagrama de flujo. Art Spinanger, asistente a las clases de Mogesen, utilizó las herramientas en su trabajo en Procter & Gamble, donde desarrolló su “Programa Metódico de Cambios por Etapas”. Otro asistente al grupo de graduados en 1944, Ben S. Graham, Director de Ingeniería de Formcraft Standard Register Corporation, adaptó la Gráfica de flujo de procesos al tratamiento de la información en su empresa. Y desarrolló la Gráfica del proceso de múltiples flujos en múltiples pantallas, documentos, y sus relaciones. En 1947, ASME adoptó un conjunto de símbolos derivados de la obra original de Gilbreth como Norma ASME para los gráficos de procesos (preparada Mishad, Ramsan y Raiaan).  Sin embargo, según explica Douglas Hartree fueron originalmente Herman Goldstine y John von Neumann quienes desarrollaron el diagrama de flujo (inicialmente llamado "diagrama") para planificar los programas de ordenador. Las tablas de programación original de flujo de Goldstine y von Neumann, aparecen en un informe no publicado, "Planificación y codificación de los problemas de un instrumento de computación electrónica, la Parte II, Volumen 1 "(1947), reproducido en las obras completas de von Neumann. Inicialmente los diagramas de flujo resultaron un medio popular para describir algoritmos de computadora, y aún se utilizan con este fin. Herramientas como los diagramas de actividad UML, pueden ser considerados como evoluciones del diagrama de flujo.  En la década de 1970 la popularidad de los diagramas de flujo como método propio de la informática disminuyó, con el nuevo hardware y los nuevos lenguajes de programación de tercera generación. Y por otra parte se convirtieron en instrumentos comunes en el mundo empresarial. Son una expresión concisa, legible y práctica de algoritmos. Actualmente se aplican en muchos campos del conocimiento, especialmente como simplificación y expresión lógica de procesos, etc.
  • 7. programación   La programación es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas computacionales. El código fuente es escrito en un lenguaje de programación. El propósito de la programación es crear programas que exhiban un comportamiento deseado. El proceso de escribir código requiere frecuentemente conocimientos en varias áreas distintas, además del dominio del lenguaje a utilizar, algoritmos especializados y lógica formal. Programar no involucra necesariamente otras tareas tales como el análisis y diseño de la aplicación (pero sí el diseño del código), aunque sí suelen estar fusionadas en el desarrollo de pequeñas aplicaciones.
  • 8. historia   Para crear un programa, y que la computadora interprete y ejecute las instrucciones escritas en él, debe usarse un Lenguaje de programación.  En sus inicios las computadoras interpretaban sólo instrucciones en un lenguaje específico, del más bajo nivel, conocido como código máquina, siendo éste excesivamente complicado para programar. De hecho sólo consiste en cadenas de números 1 y 0 (Sistema binario).  Para facilitar el trabajo de programación, los primeros científicos que trabajaban en el área decidieron reemplazar las instrucciones, secuencias de unos y ceros, por palabras o letras provenientes del inglés; codificándolas así y creando un lenguaje de mayor nivel, que se conoce como Assembly o lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). En realidad escribir en lenguaje ensamblador es básicamente lo mismo que hacerlo en lenguaje máquina, pero las letras y palabras son bastante más fáciles de recordar y entender que secuencias de números binarios.  A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un método sencillo para programar. Entonces, se crearon los lenguajes de alto nivel. Mientras que una tarea tan trivial como multiplicar dos números puede necesitar un conjunto de instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará con solo una.  Una vez que se termina de escribir un programa, sea en ensamblador o en un lenguaje de alto nivel, es necesario compilarlo, es decir, traducirlo a lenguaje máquina
  • 9. Lexico y programacion   La programación se rige por reglas y un conjunto más o menos reducido de órdenes, expresiones, instrucciones y comandos que tienden a asemejarse a una lengua natural acotada (en inglés); y que además tienen la particularidad de una reducida ambigüedad. Cuanto menos ambiguo es un lenguaje de programación, se dice, es más potente. Bajo esta premisa, y en el extremo, el lenguaje más potente existente es el binario, con ambigüedad nula (lo cual lleva a pensar así del lenguaje ensamblador).  En los lenguajes de programación de alto nivel se distinguen diversos elementos entre los que se incluyen el léxico propio del lenguaje y las reglas semánticas y sintácticas.
  • 10. Programación y algoritmo   Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Un programa normalmente implementa (traduce a un lenguaje de programación concreto) uno o más algoritmos. Un algoritmo puede expresarse de distintas maneras: en forma gráfica, como un diagrama de flujo, en forma de código como en pseudocódigo o un lenguaje de programación, en forma explicativa, etc.  Los programas suelen subdividirse en partes menores, llamadas módulos, de modo que la complejidad algorítmica de cada una de las partes sea menor que la del programa completo, lo cual ayuda al desarrollo del programa. Esta es una práctica muy utilizada y se conoce como "refino progresivo".  Según Niklaus Wirth, un programa está formado por los algoritmos y la estructura de datos.  Se han propuesto diversas técnicas de programación cuyo objetivo es mejorar tanto el proceso de creación de software como su mantenimiento. Entre ellas, se pueden mencionar las siguientes:  Programación estructurada  Programación modular  Programación orientada a objetos (POO)  Programación declarativa
  • 11. complicacion   El programa escrito en un lenguaje de programación (fácilmente comprensible por el programador) es llamado programa fuente y no se puede ejecutar directamente en una computadora. La opción más común es compilar el programa obteniendo un módulo objeto, aunque también puede ejecutarse en forma más directa a través de un intérprete informático.  El código fuente del programa se debe someter a un proceso de traducción para convertirlo en lenguaje máquina, código éste directamente ejecutable por el procesador. A este proceso se le llama compilación.  Normalmente la creación de un programa ejecutable (un típico.exe para Microsoft Windows o DOS) conlleva dos pasos. El primer paso se llama compilación (propiamente dicho) y traduce el código fuente escrito en un lenguaje de programación almacenado en un archivo a código en bajo nivel (normalmente en código objeto, no directamente a lenguaje máquina). El segundo paso se llama enlazado en el cual se enlaza el código de bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y se añade el código de las funciones que hay en las bibliotecas del compilador para que el ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo así finalmente el código objeto a código máquina, y generando un módulo ejecutable.  Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de compilación en archivos objetos (un típico.obj para Microsoft Windows, DOS o para Unix); para enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase de compilación se almacena sólo temporalmente. Un programa podría tener partes escritas en varios lenguajes (por ejemplo C, C++ y ensamblador), que se podrían compilar de forma independiente y luego enlazar juntas para formar un único módulo ejecutable.
  • 12. Programación e ingeniera de software   Existe una tendencia a identificar el proceso de creación de un programa informático con la programación, que es cierta cuando se trata de programas pequeños para uso personal, y que dista de la realidad cuando se trata de grandes proyectos.  El proceso de creación de software, desde el punto de vista de la ingeniería, incluye los siguientes pasos:  Reconocer la necesidad de un programa para solucionar un problema o identificar la posibilidad de automatización de una tarea.  Recoger los requisitos del programa. Debe quedar claro qué es lo que debe hacer el programa y para qué se necesita.  Realizar el análisis de los requisitos del programa. Debe quedar claro cómo debe realizar el programa las cosas que debe hacer. Las pruebas que comprueben la validez del programa se pueden especificar en esta fase.  Diseñar la arquitectura del programa. Se debe descomponer el programa en partes de complejidad abordable.  Implementar el programa. Consiste en realizar un diseño detallado, especificando completamente todo el funcionamiento del programa, tras lo cual la codificación (programación propiamente dicha) debería resultar inmediata.  Implantar (instalar) el programa. Consiste en poner el programa en funcionamiento junto con los componentes que pueda necesitar (bases de datos, redes de comunicaciones, etc.).  La ingeniería del software se centra en los pasos de planificación y diseño del programa, mientras que antiguamente (programación artesanal) la realización de un programa consistía casi únicamente en escribir el código, bajo sólo el conocimiento de los requisitos y con una modesta fase de análisis y diseño.
  • 13. Referencia historica   La primera programadora de computadora conocida fue Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo en las matemáticas a Ada quien, después de conocer a Charles Babbage, tradujo y amplió una descripción de su máquina analítica. Incluso aunque Babbage nunca completó la construcción de cualquiera de sus máquinas, el trabajo que Ada realizó con éstas le hizo ganarse el título de primera programadora de computadoras del mundo. El nombre del lenguaje de programación Ada fue escogido como homenaje a esta programadora.  No olvidemos que este proceso está aplicado a todos los métodos científicos que actualmente se practican.
  • 14. Objetivo de programación   La programación debe perseguir la obtención de programas de calidad. Para ello se establece una serie de factores que determinan la calidad de un programa. Algunos de los factores de calidad más importantes son los siguientes:  Corrección. Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente qué debe hacer el programa antes de desarrollarlo y, una vez acabado, compararlo con lo que realmente hace.  Claridad. Es muy importante que el programa sea lo más claro y legible posible, para facilitar así su desarrollo y posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, así como cuidar el estilo en la edición; de esta forma se ve facilitado el trabajo del programador, tanto en la fase de creación como en las fases posteriores de corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es aún más necesaria para que otros programadores puedan continuar el trabajo fácilmente. Algunos programadores llegan incluso a utilizar Arte ASCII para delimitar secciones de código. Otros, por diversión o para impedir un análisis cómodo a otros programadores, recurren al uso de código ofuscado.  Eficiencia. Se trata de que el programa, además de realizar aquello para lo que fue creado (es decir, que sea correcto), lo haga gestionando de la mejor forma posible los recursos que utiliza. Normalmente, al hablar de eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros recursos que también pueden ser de consideración al obtener la eficiencia de un programa, dependiendo de su naturaleza (espacio en disco que utiliza, tráfico de red que genera, etc.).  Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea hardware o software, diferente a aquélla en la que se elaboró. La portabilidad es una característica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha desarrollado para sistemas GNU/Linux ejecutarse también en la familia de sistemas operativos Windows. Esto permite que el programa pueda llegar a más usuarios más fácilmente.
  • 15. Lenguaje de programación   Para el libro, véase El lenguaje de programación C.  Para otros usos de este término, véase C (desambiguación).  C  Desarrollador(es)  Dennis Ritchie y Bell Labs  Información general  Paradigma Imperativo (Procedural), Estructurado  Apareció en 1972  Diseñado por Dennis M. Ritchie  Última versión estable C11 (diciembre de 2011)  Tipo de dato Débil, Estático  Implementaciones Múltiples  DialectosCyclone, Unified Parallel C, Split-C, Cilk, C*  Influido por B (BCPL,CPL), ALGOL 68,1 Ensamblador, PL/I, Fortran  Ha influido a Vala, C#, Objective-C, C++, AWK, bc, Java, php, NXC, D  Sistema operativo Multiplataforma  C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B, a su vez basado en BCPL.  Al igual que B, es un lenguaje orientado a la implementación de Sistemas Operativos, concretamente Unix. C es apreciado por la eficiencia del código que produce y es el lenguaje de programación más popular para crear software de sistemas, aunque también se utiliza para crear aplicaciones.  Se trata de un lenguaje débilmente tipificado de medio nivel pero con muchas características de bajo nivel. Dispone de las estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel. Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar código en ensamblador con código C o acceder directamente a memoria o dispositivos periféricos.
  • 16. filosofia   Uno de los objetivos de diseño del lenguaje C es que sólo sean necesarias unas pocas instrucciones en lenguaje máquina para traducir cada elemento del lenguaje, sin que haga falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo nivel de abstracción; de hecho, C se usó como intermediario entre diferentes lenguajes.  En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto de características, se pueden desarrollar compiladores de C fácilmente. En consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas (seguramente más que cualquier otro lenguaje). Además, a pesar de su naturaleza de bajo nivel, el lenguaje se desarrolló para incentivar la programación independiente de la máquina. Un programa escrito cumpliendo los estándares e intentando que sea portátil puede compilarse en muchos computadores.  C se desarrolló originalmente (conjuntamente con el sistema operativo Unix, con el que ha estado asociado mucho tiempo) por programadores para programadores. Sin embargo, ha alcanzado una popularidad enorme, y se ha usado en contextos muy alejados de la programación de software de sistema, para la que se diseñó originalmente.
  • 17. caracteristica   Uno de los objetivos de diseño del lenguaje C es que sólo sean necesarias unas pocas instrucciones en lenguaje máquina para traducir cada elemento del lenguaje, sin que haga falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo nivel de abstracción; de hecho, C se usó como intermediario entre diferentes lenguajes.  En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto de características, se pueden desarrollar compiladores de C fácilmente. En consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas (seguramente más que cualquier otro lenguaje). Además, a pesar de su naturaleza de bajo nivel, el lenguaje se desarrolló para incentivar la programación independiente de la máquina. Un programa escrito cumpliendo los estándares e intentando que sea portátil puede compilarse en muchos computadores.  C se desarrolló originalmente (conjuntamente con el sistema operativo Unix, con el que ha estado asociado mucho tiempo) por programadores para programadores. Sin embargo, ha alcanzado una popularidad enorme, y se ha usado en contextos muy alejados de la programación de software de sistema, para la que se diseñó originalmente.
  • 18. historia  Desarrollo inicial   El desarrollo inicial de C se llevó a cabo en los Laboratorios Bell de AT&T entre 1969 y 1973; según Ritchie, el periodo más creativo tuvo lugar en 1972. Se le dio el nombre "C" porque muchas de sus características fueron tomadas de un lenguaje anterior llamado "B".  Hay muchas leyendas acerca del origen de C y el sistema operativo con el que está íntimamente relacionado, Unix. Algunas de ellas son:  El desarrollo de C fue el resultado del deseo de los programadores de jugar con Space Travel. Habían estado jugando en el mainframe de su compañía, pero debido a su poca capacidad de proceso y al tener que soportar 100 usuarios, Thompson y Ritchie no tenían suficiente control sobre la nave para evitar colisiones con los asteroides. Por ese motivo decidieron portar el juego a un PDP-7 de la oficina que no se utilizaba; pero esa máquina no tenía sistema operativo, así que decidieron escribir uno. Finalmente decidieron portar el sistema operativo del PDP-11 que había en su oficina, pero era muy costoso, pues todo el código estaba escrito en lenguaje ensamblador. Entonces decidieron usar un lenguaje de alto nivel y portátil para que el sistema operativo se pudiera portar fácilmente de un ordenador a otro. Consideraron usar B, pero carecía de las funcionalidades necesarias para aprovechar algunas características avanzadas del PDP-11. Entonces empezaron a crear un nuevo lenguaje, C.  La justificación para obtener el ordenador original que se usó para desarrollar Unix fue crear un sistema que automatizase el archivo de patentes. La versión original de Unix se desarrolló en lenguaje ensamblador. Más tarde, el lenguaje C se desarrolló para poder reescribir el sistema operativo.  En 1973, el lenguaje C se había vuelto tan potente que la mayor parte del kernel Unix, originalmente escrito en el lenguaje ensamblador PDP-11/20, fue reescrita en C. Éste fue uno de los primeros núcleos de sistema operativo implementados en un lenguaje distinto al ensamblador. (Algunos casos anteriores son el sistema Multics, escrito en PL/I, y Master Control Program para el B5000 de Burroughs, escrito en ALGOL en 1961).
  • 19. Historia pt 2  El C de Kernighan y Ritchie   En 1978, Ritchie y Brian Kernighan publicaron la primera edición de El lenguaje de programación C, también conocido como La biblia de C. Este libro fue durante años la especificación informal del lenguaje. El lenguaje descrito en este libro recibe habitualmente el nombre de "el C de Kernighan y Ritchie" o simplemente "K&R C" (La segunda edición del libro cubre el estándar ANSI C, descrito más abajo.)  Kernighan y Ritchie introdujeron las siguientes características al lenguaje:  El tipo de datos struct.  El tipo de datos long int.  El tipo de datos unsigned int.  Los operadores =+ y =- fueron sustituidos por += y -= para eliminar la ambigüedad sintáctica de expresiones como i=-10, que se podría interpretar bien como i =- 10 o bien como i = -10.  El C de Kernighan y Ritchie es el subconjunto más básico del lenguaje que un compilador debe de soportar. Durante muchos años, incluso tras la introducción del ANSI C, fue considerado "el mínimo común denominador" en el que los programadores debían programar cuando deseaban que sus programas fueran transportables, pues no todos los compiladores soportaban completamente ANSI, y el código razonablemente bien escrito en K&R C es también código ANSI C válido.  En las primeras versiones del lenguaje, la definición de funciones se hacía mediante un 'prototipo de función' (function prototype), el cual indicaba al compilador el tipo de retorno de la función. Aunque este método tiene una gran desventaja respecto al nuevo, debido a que no comprueba el número ni el tipo en la lista de argumentos; en otras palabras, es mucho más fácil cometer errores al hacer un llamado a una función con argumentos incorrectos.  Ejemplo del "viejo estilo":
  • 20. Anis c o isos c  A finales de la década de 1970, C empezó a sustituir a BASIC como lenguaje de programación de microcomputadores predominante. Durante la década de 1980 se empezó a usar en los IBM PC, lo  que incrementó su popularidad significativamente. Al mismo tiempo, Bjarne Stroustrup empezó a trabajar con algunos compañeros de Bell Labs para añadir funcionalidades de programación orientada a objetos a C. El lenguaje que crearon, llamado C++, es hoy en día el lenguaje de programación de aplicaciones más común en el sistema operativo Microsoft Windows; mientras que C sigue siendo más popular en el entorno Unix. Otro lenguaje que se desarrolló en esa época, Objective C, también añadió características de programación orientada a objetos a C. Aunque hoy en día no es tan popular como C++, se usa para desarrollar aplicaciones Cocoa para Mac OS X.  En 1983, el Instituto Nacional Estadounidense de Estándares organizó un comité, X3j11, para establecer una especificación estándar de C. Tras un proceso largo y arduo, se completó el estándar en 1989 y se ratificó como el "Lenguaje de Programación C" ANSI X3.159-1989. Esta versión del lenguaje se conoce a menudo como ANSI C, o a veces como C89 (para distinguirla de C99).  En 1990, el estándar ANSI (con algunas modificaciones menores) fue adoptado por la Organización Internacional para la Estandarización (ISO) en el estándar ISO/IEC 9899:1990. Esta versión se conoce a veces como C90. No obstante, "C89" y "C90" se refieren en esencia al mismo lenguaje.  Uno de los objetivos del proceso de estandarización del ANSI C fue producir una extensión al C de Kernighan y Ritchie, incorporando muchas funcionalidades no oficiales. Sin embargo, el comité de estandarización incluyó también muchas funcionalidades nuevas, como prototipos de función, y un preprocesador mejorado. También se cambió la sintaxis de la declaración de parámetros para hacerla semejante a la empleada habitualmente en C++:
  • 21. c99   Tras el proceso de estandarización de ANSI, la especificación del lenguaje C permaneció relativamente estable durante algún tiempo, mientras que C++ siguió evolucionando. Sin embargo, el estándar continuó bajo revisión a finales de la década de 1990, lo que llevó a la publicación del estándar ISO 9899:1999 en 1999. Este estándar se denomina habitualmente "C99". Se adoptó como estándar ANSI en marzo de 2000.  Las nuevas características de C99 incluyen:  Funciones inline.  Las variables pueden declararse en cualquier sitio (como en C++), en lugar de poder declararse sólo tras otra declaración o al comienzo de una declaración compuesta.  Muchos tipos de datos, incluyendo long long int (para reducir el engorro de la transición de 32 bits a 64 bits), un tipo de datos booleano, y un tipo complex que representa números complejos.  Arrays de longitud variable.  Soporte para comentarios de una línea que empiecen con //, como en BCPL o en C++, característica para la que muchos compiladores habían dado soporte por su cuenta.  muchas funciones nuevas, como snprintf()  muchos headers nuevos, como stdint.h.  Una consideración importante es que hasta la publicación de este estándar, C había sido mayormente un subconjunto estricto del C++. Era muy sencillo "actualizar" un programa de C hacia C++ y mantener ese código compilable en ambos lenguajes. Sin embargo, el nuevo estándar agrega algunas características que C++ no admite, como por ejemplo los inicializadores estáticos de estructuras. También define al tipo "bool" de una manera que no es exactamente la del C++.  El compilador GCC, entre muchos otros, soportan hoy en día la mayoría de las nuevas características de C99. Sin embargo, este nuevo estándar ha tenido poca acogida entre algunos desarrolladores de compiladores, como Microsoft y Borland, que se han centrado en C++. Brandon Bray, de Microsoft, dijo a este respecto:  "En general, hemos visto poca demanda de muchas características de C99. Algunas características tienen más demanda que otras, y consideraremos incluirlas en versiones futuras siempre que sean compatibles con C++."2
  • 22. c11   C11  C11 (antes conocido como C1X) es un nombre informal para ISO/IEC 9899:2011,3 el último estándar publicado para C. El borrador final, N1570,4 fue publicado en abril de 2011. El nuevo estándar superó su última revisión el 10 de octubre de 2011 y fue oficialmente ratificado por la ISO y publicado el 8 de diciembre de 2011.
  • 23. ventajas   Lenguaje muy eficiente puesto que es posible utilizar sus características de bajo nivel para realizar implementaciones óptimas.  A pesar de su bajo nivel es el lenguaje más portado en existencia, habiendo compiladores para casi todos los sistemas conocidos.  Proporciona facilidades para realizar programas modulares y/o utilizar código o bibliotecas existentes.
  • 24. invoquaciones   El mayor problema que presenta el lenguaje C frente a los lenguajes de tipo de dato dinámico es la gran diferencia en velocidad de desarrollo: es más lento programar en C, sobre todo para el principiante. La razón estriba en que el compilador de C se limita a traducir código sin apenas añadir nada. La gestión de la memoria es un ejemplo clásico: en C el programador ha de reservar y liberar la memoria explícitamente. En otros lenguajes (como BASIC, Matlab o C#) la memoria es gestionada de forma transparente para el programador. Esto alivia la carga de trabajo humano y en muchas ocasiones previene errores, aunque también supone mayor carga de trabajo para el procesador.  El mantenimiento en algunos casos puede ser más difícil y costoso que con ciertos lenguajes de más alto nivel. El código en C se presta a sentencias cortas y enrevesadas de difícil interpretación. Aunque el lenguaje admite código escrito de forma fácilmente legible, si no se siguen normas en el equipo de programación algunos programadores pueden acabar escribiendo código difícil de leer. Esto complica la revisión y el mantenimiento. Aunque en realidad esto está más relacionado con el equipo de desarrollo que con el lenguaje en sí.  Cabe destacar el contexto y época en la que fue desarrollado C. En aquellos tiempos existían muy pocos programadores, los cuales, a su vez, eran prácticamente todos expertos en el área. De esta manera, se asumía que los programadores eran conscientes de sus trabajos y capaces manejar perfectamente el lenguaje. Por esta razón es muy importante que los recién iniciados adopten buenas prácticas a la hora de escribir en C y manejar la memoria, como por ejemplo un uso intensivo de indentación y conocer a fondo todo lo que implica el manejo de punteros y direcciones de memoria.
  • 25. variantes   Desde el inicio del lenguaje han surgido varias ramas de evolución que han generado varios lenguajes:  Objective-C es un primer intento de proporcionar soporte para la programación orientada a objetos en C, de escasa difusión, pero actualmente usado en Mac OS X , iOS y GNUstep.  C++ (pronunciado C Plus Plus) diseñado por Bjarne Stroustrup fue el segundo intento de proporcionar orientación a objetos a C y es la variante más difundida y aceptada. Esta versión combina la flexibilidad y el acceso de bajo nivel de C con las características de la programación orientada a objetos como abstracción, encapsulación y ocultación.  También se han creado numerosos lenguajes inspirados en la sintaxis de C, pero que no son compatibles con él:  Java, que une una sintaxis inspirada en la del C++ con una orientación a objetos más similar a la de Smalltalk y Objective C.  JavaScript, un lenguaje de scripting creado en Netscape e inspirado en la sintaxis de Java diseñado para dar a las páginas web mayor interactividad. A la versión estandarizada se la conoce como ECMAScript.  C# (pronunciado C Sharp) es un lenguaje desarrollado por Microsoft derivado de C/C++ y Java.
  • 26. Procesos de complicacion   La compilación de un programa C se realiza en varias fases que normalmente son automatizadas y ocultadas por los entornos de desarrollo:  Preprocesado consistente en modificar el código fuente en C según una serie de instrucciones (denominadas directivas de preprocesado) simplificando de esta forma el trabajo del compilador. Por ejemplo, una de las acciones más importantes es la modificación de las inclusiones (#include) por las declaraciones reales existentes en el archivo indicado.  Compilación que genera el código objeto a partir del código ya preprocesado.  Enlazado que une los códigos objeto de los distintos módulos y bibliotecas externas (como las bibliotecas del sistema) para generar el programa ejecutable final.
  • 27. Herramientas de programacion   Al programar en C, es habitual usar algunas herramientas de programación de uso muy extendido, sobre todo en entorno de tipo unix:  make: Herramienta para automatizar el proceso de compilación, enlazado, etc.  lint: Herramienta utilizada para detectar código sospechoso, confuso o incompatible entre distintas arquitecturas  valgrind: Herramienta utilizada para detectar posibles fugas de memoria.  gdb : Debugger de GNU utilizado para seguir la ejecución del programa.  dbx : Debugger que suele venir instalado con todos los UNIX.  ddd : Interfaz gráfico para el depurador gdb o dbx.
  • 28. aplicabilidad   Hecho principalmente para la fluidez de programación en sistemas UNIX. Se usa también para el desarrollo de otros sistemas operativos como Windows o GNU/Linux. Igualmente para aplicaciones de escritorio como GIMP, cuyo principal lenguaje de programación es C.  De la misma forma, es muy usado en aplicaciones científicas (para experimentos informáticos, físicos, químicos, matemáticos, entre otros, parte de ellos conocidos como modelos y simuladores), industriales (industria robótica, cibernética, sistemas de información y base de datos para la industria petrolera y petroquímica. Predominan también todo lo que se refiere a simulación de máquinas de manufactura), simulaciones de vuelo (es la más delicada, ya que se tienen que usar demasiados recursos tanto de hardware como de software para desarrollar aplicaciones que permitan simular el vuelo real de una aeronave. Se aplica por tanto, en diversas áreas desconocidas por gran parte de los usuarios noveles.  Los ordenadores de finales de los 90 son varios órdenes de magnitud más potentes que las máquinas en que C se desarrolló originalmente. Programas escritos en lenguajes de tipo dinámico y fácil codificación (Ruby, Python, Perl...) que antaño hubieran resultado demasiado lentos, son lo bastante rápidos como para desplazar en uso a C. Aun así, se puede seguir encontrando código C en grandes desarrollos de animaciones, modelados y escenas en 3D en películas y otras aplicaciones multimedia.  Actualmente, los grandes proyectos de software se dividen en partes, dentro de un equipo de desarrollo. Aquellas partes que son más "burocráticas" o "de gestión" con los recursos del sistema, se suelen realizar en lenguajes de tipo dinámico o de guión (script), mientras que aquellas partes "críticas", por su necesidad de rapidez de ejecución, se realizan en un lenguaje de tipo compilado, como C o C++. Si, después de hacer la división, las partes críticas no superan un cierto porcentaje del total (aproximadamente el 10%) entonces todo el desarrollo se realiza con lenguajes dinámicos. Si la parte crítica no llega a cumplir las expectativas del proyecto, se comparan las alternativas de una inversión en nuevo hardware frente a invertir en el coste de un programador para que reescriba dicha parte crítica.
  • 29. Biblioteca c   Una biblioteca de C es una colección de funciones utilizadas en el lenguaje de programación C. Las bibliotecas más comunes son la biblioteca estándar de C y la biblioteca del estándar ANSI C, la cual provee las especificaciones de los estándares que son ampliamente compartidas entre bibliotecas. La biblioteca ANSI C estándar, incluye funciones para la entrada y salida de archivos, alojamiento de memoria y operaciones con datos comunes: funciones matemáticas, funciones de manejo de cadenas de texto y funciones de hora y fecha.  Otras bibliotecas C son aquellas utilizadas para desarrollar sistemas Unix, las cuales proveen interfaces hacia el núcleo. Estas funciones son detalladas en varios estándares tales como POSIX y el Single UNIX Specification.  Ya que muchos programas han sido escritos en el lenguaje C existe una gran variedad de bibliotecas disponibles. Muchas bibliotecas son escritas en C debido a que C genera código objeto rápido; los programadores luego generan interfaces a la biblioteca para que las rutinas puedan ser utilizadas desde lenguajes de mayor nivel, tales como Java, Perl y Python.
  • 30. Aplicaciones embabidas   C es el lenguaje común para programar sistemas embebidos.[cita requerida] El código ligero que un compilador C genera, combinado con la capacidad de acceso a capas del software cercanas al hardware son la causa de su popularidad en estas aplicaciones.  Una característica donde C demuestra comodidad de uso particularmente valiosa en sistemas embebidos es la manipulación de bits. Los sistemas contienen registros mapeados en memoria (en inglés, MMR) a través de los cuales los periféricos se configuran. Estos registros mezclan varias configuraciones en la misma dirección de memoria, aunque en bits distintos. Con C es posible modificar fácilmente uno de estos bits sin alterar el resto