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