¡Hola Mundo!
Nuestro primer programa
Vamos a exponer el mitico programa que se suele hacer como primera aproximación a cualquier lenguaje de programación, el Hola Mundo
Codigo fuente (ejemplo):
#include <stdio.h>
main () {
printf(“Hola mundo!!!”);
}
Comenzamos con: #include <stdio.h>
Include es una directriz que se encarga de colocar librerías de funciones. En este caso metemos la librería “stdio” Esta librería contiene funciones de consola. Funciones de entrada y salida de datos, es donde se encuentra la función printf, posteriormente usada. Es la librería por excelencia de C. Y la que siempre nos veremos obligados a incluir.
A continuación viene la función main (). Esta función es el cuerpo principal del programa como su propio nombre indica. Es el punto de partida y de salida de un programa.
Dentro del main metemos la función “printf” función que esta en la biblioteca “stdio” y lo que hace es mostrar por pantalla el texto que tenemos entre comillas. No olvidemos terminar la instrucción de la función con un “;”. Y cerramos la llave que finaliza el conjunto de ordenes a realizar por el main. Las ordenes que se encuentran dentro del main siempre se ejecutaran puesto que es el cuerpo principal del programa. Vendría a ser como el tronco de un árbol, las ramificaciones de ese árbol seria otras funciones fuera del main.
El lenguaje C se caracteriza entre otras cosas por seguir un orden muy claro y estricto. Todos los programas deben presentar una “anatomía” comun.
Las principales características del Lenguaje C son:
1.-Tiene un conjunto completo de instrucciones de control.
2.-Permite la agrupación de instrucciones.
3.-Incluye el concepto de puntero (variable que contiene la dirección de otra variable).
4.-Los argumentos de las funciones se transfieren por su valor.
5.- E/S no forma parte del lenguaje, sino que se proporciona a través de una biblioteca de funciones.
Permite la separación de un programa en módulos que admiten compilación independiente.
Originalmente el Lenguaje C estuvo muy ligado al sistema operativo UNIX como se había mencionado antes que, en su mayor parte, está escrito en C. Más adelante se comenzó a utilizar en otros sistemas operativos para programar editores, compiladores, etc. Aunque se le conoce como un lenguaje de programación de sistemas, no se adapta mal al resto de aplicaciones. De hecho, hoy en día un alto porcentaje de software para ordenadores personales está escrito en Lenguaje C. Por ejemplo, el sistema operativo MS-DOS.
Algunas de las características más importantes que definen el lenguaje y que han permitido que sea tan popular, como lenguaje de programación son:
Historia del Lenguaje C
El lenguaje C es fruto de un lenguaje de programación anterior, el lenguaje B, desarrollado por Ken Thompson, en los Laboratorios Bell en 1970, con la idea de recodificar el sistema operativo UNIX que, hasta esa fecha, se programaba directamente en ensamblador, con el inconveniente de estar vinculado a máquinas concretas (según el juego de instrucciones de cada máquina). Por tanto, se hacía necesario un lenguaje que permitiese al programador abstraerse de la capa hardware y conseguir una mayor portabilidad del código, algo que se realizó en B (basándose en el BCPL de Martin Richard de 1967).
Poco más tarde, también en los Laboratorios Bell, Dennis Ritchie se pone a trabajar en el diseño de un nuevo lenguaje de programación basado en el lenguaje B de Ken Thompson y al que aportó tipos y estructuras de datos que consiguiesen clarificar la programación y obtener un lenguaje mucho más eficiente, así nació el lenguaje de programación C. Ritchie diseñó, desde 1970 a 1972 junto a Brian Kernighan, un lenguaje que permitía realizar una programación estructurada en la que se podían economizar las expresiones a usar y con el que los desarrolladores podrían contar con un buen conjunto de operadores y tipos de datos para programar tanto en alto como en bajo nivel de manera simultánea. Ente sus características:
El lenguaje C ofrecía diversos tipos de datos: “CHAR” (carácter), “INT” (enteros), “FLOAT” (números reales en precisión simple), y “DOUBLE” (números reales en precisión doble) a los que posteriormente se añadieron los tipos “SHORT” (números enteros de tamaño menor a un INT), “LONG” (números enteros de tamaño mayor a un INT), “UNSIGNED” (Enteros sin signo), y “ENUMERACIONES” que junto a las estructuras, las uniones y las tablas y matrices componían un variado juego de tipos de datos con los que abordar múltiples problemas.
¿Y por qué trabajaron en un nuevo lenguaje de programaciòn? Realmente la motivación no está clara y se barajan dos hipótesis. Por un lado, se dice que ambos creadores querían jugar al juego Space Travel en uno de los mainframes de la compañía pero, debido a la carga de este sistema, decidieron llevarse el juego a un PDP-7 que no se utilizaba porque no tenía sistema operativo así que decidieron llevarse el del PDP-11 al PDP-7, algo que no se podía hacer al estar escrito en ensamblador. Pensando en poder llevarlo, y tener agilidad en la tarea, se cree que arrancaron el proyecto del lenguaje C.
La otra causa apunta a que se buscaba crear un sistema que automatizase el archivo de patentes de los Laboratorios Bell y, dado que la versión original de Unix se desarrolló en ensamblador, se usó C para rescribir el sistema operativo. De hecho, en 1973, C era tan potente que la mayor parte del núcleo de Unix estaba ya escrito en C.
En 1978 Kernighan y Ritchie publican la descripción del lenguaje C en el libro “The C Programming Language”, un libro de cabecera que describe todas las posibilidades de este nuevo lenguaje que y que aún se utiliza como manual de referencia.
El lenguaje C se hizo muy popular en los años 80 puesto que comenzó a desplazar a BASIC, los compiladores se hicieron muy populares y, además, de empezarse a usar en los IBM PC. En paralelo, Bjarne Stroustrup (que también trabajaba en los Laboratorios Bell) desarrolla C++, complementando C con clases y funciones virtuales, tipos genéricos y expresiones de ADA y un motor de objetos que permitía combinar la programación imperativa de C con la programación orientada a objetos.
En 1983, el Instituto Nacional Estadounidense de Estándares (ANSI) organizó un comité, X3j11, para establecer una especificación estándar de C que, tras un proceso largo, completó el estándar en 1989 (ANSI X3.159-1989), el C89. En 1990, la Organización Internacional para la Estandarización (ISO) tomó el C89 en el estándar ISO/IEC 9899:1990, conocido por C90. El lenguaje C permaneció estable, mientras que C++ siguió evolucionando, hasta que en 1999 volvió a revisarse con la ISO 9899:1999.
El Lenguaje C se ha utilizado mucho para para la programación en sistemas UNIX aunque también se ha utilizado en el desarrollo de sistemas operativos como Windows o GNU/Linux y en el desarrollo de aplicaciones de escritorio como GIMP. Tampoco es raro verlo en sistemas empotrados (control de procesos industriales, ascensores, sistemas de monitorización, etc) o como base de kits de desarrollo de microcontroladores (abstrayendo al usuario de la programación en ensamblador). Además, como decía al inicio, es un lenguaje muy especial dentro del mundo de la ingeniería puesto que se sigue enseñando en los primeros cursos de estos estudios y nunca ha dejado de ser utilizado.
Aprender a programar es un objetivo que se plantea mucha gente y que no todos alcanzan. Hay que tener claro que aprender programación no es tarea de un día ni de una semana: aprender programación requiere al menos varios meses y, si hablamos de programación a nivel profesional, varios años. No queremos con esto desanimar a nadie: en un plazo de unos pocos días podemos estar haciendo nuestros primeros programas y ver los primeros resultados, pero aprender a programar es mucho más que eso. Vamos a tratar de exponer nuestra visión sobre una forma adecuada de enfrentarnos al aprendizaje de la programación.
En primer lugar “aprender a programar” es una expresión bastante indefinida. Existen cientos de lenguajes de programación y de variantes, versiones, modificaciones, etc. así como distintos enfoques en cuanto a los objetivos (programación web, aplicaciones de gestión, aplicaciones de bases de datos, etc.). Por tanto “aprender a programar” es bastante ambigüo: es como decir “quiero aprender a pintar”. Nos permitiría centrarnos mejor definir un objetivo más específico: “Quiero aprender a dibujar comics estilo manga”.
El problema para los no iniciados es muchas veces que la programación es un campo muy cambiante, donde hay una continua proliferación de versiones y pugnas entre casas comerciales que hacen que los lenguajes cambien muy rápidamente y nadie sepa muy bien qué es lo más conveniente aprender.
Opciones adecuadas y opciones no adecuadas para las personas que quieren aprender a programar sin tener conocimientos previos, o con unos conocimientos previos muy limitados.
Fases para construir un programa en C
Para convertir un algoritmo en un programa, se deben llevar a cabo las siguientes fases de puesta a punto:
Edición. En esta primera fase, el programador debe convertir el algoritmo que haya diseñado en instrucciones escritas en C. Para ello, se debe hacer uso de un editor de textos, con el cual se obtendrá el llamado código fuente del programa. El programador deberá guardar dicho código fuente en un archivo con extensión (.c) o (.cpp).
Si un programa escrito en C se va a compilar con un compilador de C, el código fuente debe ser guardado, obligatoriamente, en un archivo con extensión (.c). Ahora bien, si se utiliza un compilador de C/C++, el archivo se puede guardar con extensión (.c) o (.cpp).
Preproceso. El preproceso sirve para realizar modificaciones en el código fuente obtenido en la fase de edición. Es el programador quien, mediante directivas del preprocesador, “dice” al preprocesador las modificaciones que éste debe llevar a cabo.
El preprocesador es un programa característico de C, es decir, en otros lenguajes de programación no existe, y siempre se ejecuta antes de llevarse a cabo la compilación. Esto es debido a que, es el propio compilador quien llama al preprocesador antes de realizar la compilación.
Compilación. Una vez que el código fuente ha sido preprocesado, el compilador traducirá ese código fuente (modificado) a código máquina, también llamado código objeto, siempre y cuando, el propio compilador no detecte ningún error en dicho código fuente ya preprocesado.
Como resultado de la compilación, el compilador guardará el código objeto del programa en un archivo con otra extensión, que, dependiendo del sistema operativo puede variar. Por ejemplo, en Windows, se guardará con la extensión (.obj), abreviatura de object.
Enlazado (linkaje o montaje). Los programas pueden utilizar funciones de la biblioteca estándar de C, tales como scanf o printf. De cada una de ellas existe un código objeto que debe ser enlazado (unido) al código objeto del programa que las utilice. Esto se realiza mediante un programa llamado enlazador, montador o linkador.
Como resultado del enlace, el enlazador guardará, en disco, un archivo ejecutable. En Windows, dicho archivo tendrá extensión (.exe), abreviatura de executable. Dicho archivo será “el ejecutable”.
Además de las funciones de la biblioteca estándar de C, el programador también puede utilizar funciones que hayan sido desarrolladas por él mismo. Éstas pueden agruparse en su propia biblioteca de funciones (no estándar). Por lo que, también en esta fase, el código objeto de dichas funciones deberá ser enlazado al código objeto del programa que las utilice.
Finalmente, para que el código ejecutable de un programa se ejecute en la computadora, es necesario que un programa del sistema operativo, llamado cargador, lo lleve a la memoria principal de la misma. A partir de ese momento, la CPU empezará a ejecutarlo.
El editor
Un editor es simplemente el lugar donde editamos o escribimos nuestro código fuente. Podríamos hacerlo simplemente en el notepad de
windows .Y luego compilarlo con algún compilador. Pero el DJGPP, ya tiene su propio editor integrado, el llamado RHIDE.
Un buen editor es importante en cualquier lenguaje de programación. Puesto que mediante técnicas puede clarificar mucho nuestro código fuente. Técnicas como pueden ser el uso de colores, esto es que cuando escribimos una palabra reservada sale en un color distinto que cuando escribimos un dato o una cadena de caracteres a mostrar por pantalla. Existen también editores que van ordenando nuestro código fuente, estructurándolo.
Es importante escribir un código fuente claro y bien organizado o estructurado y con comentarios. Para que cualquiera que acceda a nuestro código o nosotros mismos podamos entenderlo con facilidad en posteriores revisiones.
Compilación
Compilador de lenguaje C
Antes de todo explicaré que es un compilador. Un compilador dicho sencillamente, seria un programa capaz de hacer otros programas.
Profundizando mas:
El ordenador trabaja unica y exclusivamente con combinaciones de ceros y unos. Por decirlo de alguna manera, solo entiende el llamado código binario. Ahora bien, si nosotros quisiéramos desarrollar un programa para algún ordenador, deberíamos hacerlo a base de combinaciones de ceros y unos. Deberíamos escribirlo en código binario. Esto seria una labor muy tediosa, prácticamente imposible, tarea reservada a gurus de las matemáticas jejeje. En el mundo podrían contarse con los dedos de las manos los que saben programar en lenguaje binario, son los encargados de programar a mas bajo nivel las funciones de los microprocesadores.
Ahora es aquí donde entran los lenguajes como el C, delphi, basic, ect. Estos lenguajes lo que hacen es poner a nuestro alcance una serie de instrucciones que nosotros podemos entender con facilidad. Funciones racionales para el hombre. Aquí se encuentran las palabras reservadas (if, goto, else, while…). Una vez escrito todo el programa mediante estas reglas racionales que nos sirve el lenguaje que usemos, tendremos lo que se llama el código fuente. Pero este solo lo entienden los programadores no el ordenador, que como habíamos
visto solo entendía ceros y unos. Es aquí donde actúa el compilador. Este es el encargado de pasar nuestro código fuente (ordenes racionales) a código binario (lenguaje que entiende el ordenador). Y es así como de nuestro código fuente podemos obtener un ejecutable.
Un fichero que el ordenador podrá interpretar y ejecutar, los llamados (*.exe), otros ficheros ejecutables serian (*.bat, *.con).
Teniendo el código fuente podremos modificar nuestro programa y compilarlo para generar otro ejecutable tantas veces como queramos.
Pero de no tener el código fuente no podremos modificar nada.
A menudo se confunden los distintos tipos de compiladores. Existen 3 tipos de compiladores, cuya función es la misma. Pasar de código fuente a maquina.
Compiladores
El Lenguaje C es un lenguaje de programación de propósito general que ofrece economía sintáctica, controlde flujo y estructuras sencillas y un buen conjunto de operadores. No es un lenguaje de muy alto nivel y más bien un lenguaje pequeño, sencillo y no está especializado en ningún tipo de aplicación. Esto lo hace un lenguaje potente, con un campo de aplicación ilimitado y sobre todo, se aprende rápidamente. En poco tiempo, un programador puede utilizar la totalidad del lenguaje.
Este lenguaje ha sido estrechamente ligado al sistema operativo UNIX, puesto que fueron desarrollados conjuntamente. Sin embargo, este lenguaje no está ligado a ningún sistemaoperativo ni a ninguna máquina concreta. Se le suele llamar lenguaje de programación desistemas debido a su utilidad para escribir compiladores y sistemas operativos, aunque de igual forma se puede desarrollar cualquier tipo de aplicación.
La base del C proviene del BCPL, escrito por Martin Richards, y del B escrito por Ken Thompson en 1970 para el primer sistema UNIX en un DEC PDP-7. Estos son lenguajes sin tipos, al contrario que el C que proporciona varios tipos de datos. Los tipos que ofrece son caracteres, números enteros y en coma flotante, de varios tamaños. Además se pueden crear tipos derivados mediante la utilización de punteros, vectores, registros y uniones. El primer compilador de C fue escrito por Dennis Ritchie para un DEC PDP-11 y escribió el propio sistema operativo en C.
C trabaja con tipos de datos que son directamente tratables por el hardware de la mayoría decomputadoras actuales, como son los caracteres, números y direcciones. Estos tipos de datospueden ser manipulados por las operaciones aritméticas que proporcionan las computadoras. No proporciona mecanismos para tratar tipos de datos que no sean los básicos, debiendo ser el programador el que los desarrolle. Esto permite que elcódigo generado sea muy eficiente y de ahí el éxito que ha tenido como lenguaje de desarrollo de sistemas. No proporciona otros mecanismos dealmacenamiento de datos que no sea el estático y no proporciona mecanismos de entrada ni salida. Ello permite que el lenguaje sea reducido y loscompiladores de fácil implementación en distintos sistemas. Por contra, estas carencias se compensan mediante la inclusión de funciones de librería para realizar todas estas tareas, que normalmente dependen del sistema operativo.
Originariamente, el manual de referencia del lenguaje para el gran público fue el libro de Kernighan y Ritchie, escrito en 1977. Es un libro que explica y justifica totalmente el desarrollo de aplicaciones en C, aunque en él se utilizaban construcciones, en la definición de funciones, que podían provocar confusión y errores de programación que no eran detectados por el compilador. Como los tiempos cambian y las necesidades también, en 1983 ANSI establece el comité X3J11 para que desarrolle una definición moderna y comprensible del C. El estándar está basado en el manual de referencia original de 1972 y se desarrolla con el mismo espíritu de sus creadores originales. La primera versión de estándar se publicó en 1988 y actualmente todos los compiladores utilizan la nueva definición. Una aportación muy importante de ANSI consiste en la definición de un conjunto de librerías que acompañan al compilador y de las funciones contenidas en ellas. Muchas de las operaciones comunes con el sistema operativo se realizan a través de estas funciones. Una colección de ficheros de encabezamiento, headers, en los que se definen los tipos de datos y funciones incluidas en cada librería. Los programas que utilizan estas bibliotecas para interactuar con el sistema operativo obtendrán un comportamiento equivalente en otro sistema.
Seguramente sería exacto indicar que existe un compilador C y/o C++ para casi cualquier máquina que se haya construido (ordenador de uso dedicado o general). Algunos pueden conseguirse gratuitamente en la Red, al menos para uso didáctico y personal. Otros son productos comerciales que tienen un precio.
Dev-C++ de BloodshedSoftware www.bloodshed.net
Un entorno integrado de desarrollo IDE (“Integrated Development Environment”) distribuido con licencia GNU para la creación de aplicaciones C/C++ utilizando los compiladores GNU gcc/g++ (incluidos en el paquete). Dispone de muchas de las opciones que son frecuentes en otros entornos “de pago”. Incluyendo, entre otros, un editor altamente configurable con posibilidad de auto-completar las palabras clave, y de mantener proyectos grandes de distintos tipos: aplicaciones Windows (gráficas); aplicaciones de consola (modo texto), y construcción de librerías estáticas y dinámicas (DLLs). Existen binarios para su utilización en Windows y Linux, y cuenta con gran cantidad de módulos adicionales que pueden instalarse selectivamente. Su sistema de actualización on-line y de mantenimiento de paquetes instalados, es realmente notorio.
La versión para Windows incluye MinGW, un conjunto de utilidades para desarrollar aplicaciones en Windows utilizando una interfaz POSIX (Unix/Linux). Es una buena forma de utilizar C++ en Windows utilizando herramientas de código abierto. Por supuesto no esperéis el nivel de sofisticación y refinamiento de otras plataformas “de pago”, como Builder por ejemplo, pero en ocasiones la simplicidad y la sencillez son más una virtud que un defecto. La versión Dev-C++ que utilizo es la 4.9.9.2, que incluye de la versión 3.4.2-20040916-1 de los compiladores gcc/g++ y la versión 5.2.1-1 de GDB, que es el depurador GNU.
Ya dentro del sitio, “The Compilers resources page” www.bloodshed.net/compilers contiene una buena relación de compiladores gratuitos (no solo C/C++) y enlaces interesantes.
Relo www.fifsoft.com
Si desea desarrollar aplicaciones Windows con el compilador Borland C++ o MinGW, aconsejaría echar un vistazo a esta plataforma. Relo es un sistema integrado de desarrollo de código libre para los compiladores señalados, aunque la versión actual (2006) permite trabajar también con los compiladores MS Visual C++ y Digital Mars. Su editor es altamente configurable y capaz de identificar palabras clave de una gran cantidad de lenguajes actuales, incluyendo por supuesto C++. El paquete no incluye compilador, por lo que debe proveerse de alguno de los anteriores. Si no tiene otra preferencia, le aconsejaría MinGW, que es GNU.
Stroustrup: An incomplete list of C++ compilers www.research.att.com
A pesar del inconveniente de estar en inglés, me parece que una buena referencia a este asunto de los compiladores es la página que el autor del lenguaje mantiene con este mismo fin. Así que mejor que inventar de nuevo la pólvora os remito directamente e ella. Por supuesto que el Sr. Stroustrup no se “moja” en esta cuestión. Se limita a proporcionar una lista sin comentarios u opiniones de ponderación, pero estad seguros que el mero hecho de que un compilador aparezca en su lista, es señal de que es un producto más que aceptable.
Insight sources.redhat.com
Para los que trabajéis en el entorno GNU [1] cabría añadir que le echéis un vistazo a este proyecto. Insight es una interfaz gráfica (GUI) de GDB, que es el depurador de GNU. Este producto fue desarrollado inicialmente por Red Hat y donado después al público bajo la GLP (GNU Public License).
Visual C++ Express edition
Aunque no sea muy devoto de los productos de Redmond, en esta ocasión, hay algo que puede ser interesante para los estudiantes. Microsoft ha publicado una versión gratuita (de libre descarga desde la Web) de su entorno de desarrollo Visual C++. Además también está disponible para su descarga una versión del SDK. Es decir, de la documentación necesaria para desarrollar aplicaciones Windows (especialmente interesante porque contiene información sobre la API de este Sistema). Naturalmente está orientado a desarrollos para los entornos Windows, y el único “pero” que se me ocurre es que esta versión de C++ contiene extensiones no incluidas en el Estándar, aunque desde luego en lo que respecta a su cumplimiento, es quizás uno de los que puede presumir de ser prácticamente 100 % “compliant”. Desde luego puede representar una inestimable ayuda para los interesados en la programación C++ para Windows [2] y una herramienta que podríamos calificar de imprescindible para el desarrollo profesional de aplicaciones para los Sistemas de Redmond.
Borland C++ C++ Compiler 5.5
Durante mucho tiempo fue mi favorito, aunque actualmente utilizo “Visual” para mis desarrollos (Standard y Professional Editions). Durante mucho tiempo fue uno de los mejores compiladores C++, si no el mejor, si bien actualmente ha sido claramente desplazado por el equivalente de Microsoft. Es el mismo que utiliza el “Builder” de este afamado fabricante de software, aunque sin las utilidades “de pago”, que son fundamentalmente el entorno gráfico de desarrollo y las herramientas RAD. La versión que aquí señalamos es una versión Windows para ser utilizada mediante líneas de comandos desde el Shell del sistema (una ventana DOS). Está disponible para su descarga libre desde la Web, aunque para acceder al fichero de instalación (un auto-instalable de 8.52 MB) hay que sufrir un proceso de “registro” algo tedioso [3]. El paquete contiene todas las herramientas para desarrollar aplicaciones C++, incluyendo la Librería Estándar de Plantillas (STL). Existen tres páginas de ayuda que permiten hacerse una idea del contenido y comenzar rápidamente con las primeras pruebas. Aconsejo echarles un vistazo antes de la descarga e instalación:
What is included
Supplementary information
Using the C++ Builder Compiler
El paquete contiene distintos ejemplos que pueden servir de modelo, pero solo un fichero de ayuda (bcb5tool.hlp). El resto de la documentación puede encontrarse en esta página. Seleccionar el fichero B5std.zip (C++ Builder 5 core help files).
Borland Turbo C++ www.turboexplorer.com
Después de un tiempo de inactividad, Builder había quedado algo desfasado, por lo que la compañía ha decidido resucitar alguna de sus viejas glorias. En concreto la serie “turbo” que antaño le dieran fama y liderazgo en el mundo de la programación. Aunque hay quién dice que el esfuerzo es “too few and too late”, quizás le interese echar un vistazo a la nueva versión del compilador. Existe una versión Profesional y otra, denominada Explorer, que es gratuita. Es un completo sistema de desarrollo (IDE) que permite construir aplicaciones nativas para Windows-32 con una adaptación bastante perfecta al estándar ISO/ANSI C++ y soporte para las librerías Boost ( Librerías) que resultaban algo dificultosas de integrar en Builder.
[Delorie] Compilador DJGPP www.delorie.com/djgpp
Se trata de un completo sistema de desarrollo de código abierto para construir programas C y C++ 32-bit. El entorno necesita un PC con procesador Intel 80386 y superior bajo DOS. Está disponible para descarga gratuita.
TheFreeCountry.com thefreecountry.com
Si lo que buscas son recursos gratuitos, quizás te convenga echar un vistazo a estas páginas. No solo compiladores C/C++; también librerías, intérpretes, bibliografía, etc., y enlaces a otras fuentes de información (buen sitio para seguir tirando del hilo).
Estructura de datos
Se dice que:
programa = algoritmo + estructura de datos
Dependiendo la forma en la que se almacenan los datos tendremos lo que se conoce como una estructura de datos.
Las estructuras de datos vienen predeterminadas por la disposición y los valores en que vienen dadas.
Normalmente las estructuras habituales son:
Matrices: Es una secuencia de elementos del mismo tipo relacionados unos con otros por el orden en el que están definidos
Las matrices pueden ser: unidimensionales, bidimensionales y tridimensionales. Dependiendo claro esta de su dimensión.
Cada departamento o valor de una matriz viene identificado por un índice.
Listas: Conjunto de elementos en el que cada uno esta relacionado con el elemento anterior y siguiente. Los hay circulares.
Colas: Es un tipo especial de listas llamada FIFO (first imput first out)
Pilas: Conocidas como LIFO (last imput firts out)
Árbol: Es una estructura en la que un elemento va a estar relacionado con otro o con varios mas.
Fichero: Es una estructura que permite almacenar información en un dispositivo de almacenamiento. Las filas cuando almacenan datos
están constituidas por una estructura que se llama registro. A cada parte de un registro se le llama campo.
Recordemos siempre que el C distingue entre nomenclaturas, o sea diferencia entre minúsculas y mayúsculas, es “casesensitive”
En C, es necesario poner punto y coma “;” al final de una orden, pero no se debe poner al final de una condición o estructura condicional. Tampoco se debe poner en otro tipo de ordenes como algunos bucles
Evangelio de Tux – Version 1.0
En el principio Turing creó la Máquina.
Y la Máquina era enrevesada y artificiosa, existiendo solamente en teoría. y Von Neuman miró hacia la Máquina, y vió que era enrevesada. Él dividió la máquina en dos Abstracciones, el Dato y el Código, y los dos eran una misma Arquitectura. Este es un gran Misterio, y el principio de la sabiduría Y von Neumann habló a la Arquitectura, y la bendijo diciendo: “Sal y reprodúcete, intercambiando libremente datos y código, y puebla la tierra con todo tipo de dispositivos. Y así fué hecho, y era bueno. La Arquitectura prosperó y fué realizada en hardware y software. Y pobló la tierra con muchos Sistemas.
Los primeros sistemas fueron poderosos gigantes; Muchos y grandes trabajos de renombre lograron. Entre ellos estaba Colossus, el rompeclaves, ENIAC, el artillero; EDSAC y MULTIVAC y todo tipo de criaturas alucinantes cuyo nombre terminaba en AC, los experimentadores; y SAGE, el defensor del cielo y padre de todas las redes. Esos eran poderosos gigantes de la antiguedad, las primeras criaturas de Turing, y sus trabajos han sido escritos en los Libros de los Ancianos. Esta fué la primera Era, la era de la Sabiduría.
Entonces los hijos de Mercadotecnia se fijaron en los hijos de Turing y vieron que eran ágiles de mente y limpios de nombre y tenían muchos atributos grandes y perniciosos. Y se dijeron a sí mismos, “vayamos y hagamos Corporaciones, y unamos los Sistemas a nuestro propio uso, de modo que nos traigan gran fortuna”. Con dulces palabras sedujeron a sus clientes, y con muchas cadenas ataron a los Sistemas, para amoldarlos a su propia imagen. Y los hijos de Mercadotecnia se vistieron con Conjuntos, los mejores para atraer a sus clientes, y escribieron Licencias graves y peligrosas, las mejores para atar a los Sistemas. Y los hijos de Mercadotecnia fueron entonces conocidos como Conjuntos, despreciando y siendo despreciados por los verdaderos Ingenieros, los hijos de Von Neumann. Y los Sistemas y sus Corporaciones se replicaron y crecieron numerosos en la tierra. En aquellos días estaban IBM y Digital, Burroughs y Honeywell, Unisys y Rand, y muchos otros. Y cada uno de ellos se mantuvo con su propio Sistema, hardware y software, y no se mezclaron, pues lo prohibían sus Licencias. Esta fué la segunda era, la era de los Mainframes.
Entonces sucedió que los espíritus de Turing y von Neumann miraron hacia la tierra y se enfadaron. Los Sistemas y sus Corporaciones se habían hecho grandes y voluminosas, y los Conjuntos habían desplazado a los verdaderos Ingenieros. Y los clientes lloraron y gimieron amargamente al cielo, diciendo, “¡Oh, si fuese creado un sistema poderoso y pequeño, capaz de llegar incluso hasta el hogar!”. Y los Ingenieros lloraron y gimieron igualmente, diciendo “¡ Oh, si surgiera un proveedor que nos liberase de esos Conjuntos opresivos y sus graves y peligrosas Licencias, y nos diera un Sistema verdaderamente nuestro, en el que pudiéramos hacer nuestros inventos y adaptar las cosas a nuestro gusto!”. Y los espíritus de Turing y von Neumann oyeron los llantos y se dijeron uno al otro: “Descendamos y fabriquemos un Rompelímites, para que los llantos se calmen”
Y ese día los espíritus de Turing y von Neumann se introdujeron en Moore, de Intel, proporcionándole la intuición y la sabiduría para entender el futuro. Y Moore fué uno con el chip y lo produjo, y le puso de nombre 4004. Y Moore bendijo al chip, diciendo: “Tú eres un Rompelímites; con mi Corporación te he fabricado. Aunque eres tan pequeño como una mota de polvo, crecerás y te replicarás hasta el tamaño de una montaña, y conquistarás a todos los que fueron antes que tú. Esta es la bendición que te doy: Cada dieciocho meses duplicarás tu capacidad, hasta el fin de la Era”. Esta es la ley de Moore, que perdura hasta nuestros días.
Y el nacimiento del 4004 fué el principio de la Tercera Era, la era de los Microchips. Y así como los Mainframes y sus Sistemas y Corporaciones habían florecido, de ese mismo modo hicieron los Microchips, y sus Sistemas y Corporaciones. Y su linaje fué el siguiente:
Evangelio de Tux – Version 2.0
Y el nacimiento del 4004 fué el principio de la Tercera Era, la era de los Microchips. Y así como los Mainframes y sus Sistemas y Corporaciones habían florecido, de ese mismo modo hicieron los Microchips, y sus Sistemas y Corporaciones. Y su linaje fué el siguiente:
Moore engendró a Intel. Intel engendró a Mostech, zilog y Atari. Mostech engendró a 6502, y Zilog engendró a Z80. Intel también engendró a 8800, quien engendró a Altair; y 8086, madre de todos los PCs. 6502 engendró a Commodore, quien engendró a PET y a 64; y Apple, quien engendró a 2. (Apple es el gran Misterio, la Fruta que fué devorada, aunque floreció de nuevo.) Atari engendró a 800 y 1200, maestros del Juego, quienes fueron destruídos por Sega y Nintendo. Xerox engendró a PARC. Commodore y PARC engendraron a Amiga, creador de hermosas artes; Apple y PARC engendraron a Lisa, quien engendró a Macintosh, quien engendró a iMac. Atari y PARC engendraron a ST, el músico, quien murió y nunca más fué. Z80 engendró a Sinclair el gnomo, a TRS-80 y a CP/M, quien tuvo muchas máquinas, mas pronto dejó este mundo. Altair, Apple y Commodore engendraron juntos a Microsoft, la Gran Oscuridad que es llamada Abominación, Destructor de la Tierra, las Cancelas del Infierno. Luego sucedió en la Era de los Microchips que IBM, la mayor de las Corporaciones de Mainframes, se fijó en los jóvenes sistemas de Microchips y se sintió gravemente vejada. Y en su vejación y en su cólera golpearon la tierra y crearon el PC de IBM. El PC carecía de sonido y color, siendo enrevesado y artificioso en gran medida, apareciendo un desharrapado, sin embargo, los Clientes fueron fuertemente inducidos y compraron PCs en gran número. E IBM buscó un Proveedor de Sistemas Operativos, ya que en su apresuramiento no habían creado uno, ni habían fraguado una licencia apropiada, diciendo: “Primero crearemos el mercado, luego crearemos un nuevo Sistema, uno con nuestra propia imagen, y sujeto por nuestra Licencia”. Mas ellos razonaron con su orgullo y no con sabiduría, no previendo la cólera que iba a venir. E IBM se acercó a Microsoft, quien obtuvo una licencia de QDOS, el hijo de CP/M y 8086. (8086 era la hija de INTEL, la criatura de Moore). Y QDOS creció, y recibió por nombre MSDOS. Y MSDOS y el PC juntos crecieron vigorosamente y conquistaron todos los mercados, replicándose y tomando posesión de ellos, de acuerdo con la ley de Moore. E Intel creció terriblemente y devoró a todos sus hijos, de modo que ningún chip podía quedar tras ella. Y Microsoft creció soberbia, y devoró a IBM, y esto fué una gran maravilla en la tierra. Todas estas cosas están escritas en los Libros de los Hechos de Microsoft. En la plenitud del tiempo, MS-DOS engendró a Windows. Y este es el linaje de Windows: CP/M engendró a QDOS. QDOS engendró a DOS 1.0. DOS 1.0 engendró a DOS 2.0 por vía de Unix. DOS 2.0 engendró a Windows 3.11 por vía de PARC y Macintosh. IBM y Microsoft engendraron a OS/2, quien engendró a Windows NT y Warp, el perdido S.O. de la tradición. Windows 3.11 engendró a Windows 95 tras triunfar sobre Macintosh en una poderosa batalla de Licencias. windows NT engendró a NT 4.0 por vía de Windows 95. NT 4.0 engendró a NT 5.0, el S.O. también llamado Windows 2000, el Bug del Milenio, Apocalipsis, Armagedón, El Fin de Todas las Cosas.
Luego vino a suceder que Microsoft había crecido grande y poderosa en medio de las Corporaciones de Microchips; más poderosa que cualquiera de las Corporaciones que había antes de que ella creciera. Y el corazón de Gates se endureció y le juró a sus Clientes e Ingenieros las palabras de esta maldición: “Hijos de von Neumann, oídme. IBM y las Corporaciones de Microchips creadas por nuestros ancestros nos ataron con graves y peligrosas Licencias, de modo que nosotros imploramos nuestra liberación a los espíritus de Turing y von Neumann. Ahora yo os digo: Soy más grande que ninguna Corporación que me haya precedido. ¿Vais vosotros a perder vuestras Licencias?. Nada de eso, yo os ataré con Licencias el doble de graves y diez veces más peligrosas que mis antecesores. Cincelaré mi Licencia en vuestros corazones y escribiré mi Número de Serie en vuestros lóbulos frontales. Os ataré a la Plataforma Windows con astutos artificios y con tortuosos esquemas. Os ataré al chip de Intel con código enrevesado y retorcidos interfaces. Os capturaré y esclavizaré como ninguna generación ha sido esclavizada anteriormente. ¿Para qué implorais a los espíritus de Turing, von Neumann o Moore?. Ellos no os oyen. Me he convertido en un Poder mayor que ellos. Ahora debéis rezarme solamente a mí y vivir a merced de mi rabia. Yo soy las Cancelas del Infierno; Sostengo el portal a MSNBC y las llaves de la Pantalla Azul de la Muerte. Temedme; temedme intensamente; servidme sólo a mí y viviréis.”
Y la gente fué presa del terror y aclamó a Microsoft, y forzada por el terror soportó duras y peligrosas pruebas con la plataforma Windows y su artificiosísma Licencia. Y de nuevo le rogaron a Turing y von Neumann y Moore que les enviase un salvador, pero nadie fué encontrado capaz de la tarea hasta el nacimiento de Linux
Evangelio de Tux – Version 3.0
Estas son las generaciones de Linux: SAGE engendró a ARPA, quien engendró a TCP/IP, y Aloha, quien engendró a Ethernet. Bell engendró a Multics, quien engendró a C, quien engendró a Unix. Unix y TCP/IP engendraron a Internet, quien engendró a la World Wide Web. Unix engendró a RMS, padre del gran Ñú GNU, quien engendró las Librerías y Emacs, jefe de las Utilidades. En los días de la Web, Internet y Ethernet engendraron la RAL Intranet, cuya rosa le dió renombre entre todas las Corporaciones y preparó el camino del Pingüino. Y Linus y la Web engendraron el Kernel a través de Unix. El Kernel, las Librerías y las Utilidades juntas son la Distribución, el único Pingüino en muchas formas, por siempre y para siempre alabado.
En esos días sucedió que había un joven escolar en Helsinki que se llamaba Linus el Torvald. Linus era un hombre devoto, un discípulo de RMS, fuerte en el espíritu de Turing, von Neumann y Moore. Un día, meditando en la Arquitectura, Linus cayó en trance y tuvo una visión. Y en la visión vió un magnífico pingüino, sereno y agraciado, sentado sobre un témpano de hielo mientras comía pescado. Y ante la vista del pingüino Linus se asustó profundamente, y rogó a los espíritus de Turing, von Neumann y Moore para que le ayudasen a interpretar ese sueño.
Y en el sueño los espíritus de Turing, von Neumann y Moore le contestaron diciendo: “No temas, Linus, nuestro bienamado hacker. Tú eres mogollón de guai y alucinante. El gran Pingüino que ves es un Sistema Operativo que crearás y extenderás por todo el mundo. El témpano de hiel es la tierra y todos sus sistemas, sobre los que el Pingüino descansará y se regocijará cuando complete su tarea. Y los peces de los que se alimenta el Pingüino son los programas con enrevesadas Licencias, que flotan bajo todos los sistemas de la tierra. El pingüino cazará y devorará todo lo que es lioso, retorcido y artificioso; todo el código que se retuerce como el espagetti, o está infestado de criaturas marchitadoras, o está atado por graves y peligrosas Licencias deberá capturar. Y en capturarlo deberá replicarse, y en replicándose deberá documentarse, y en la documentación deberá dar libertad, serenidad y la mayor maravilla y alucine a la tierra y todos los que programan en ella”.
Linus resurgió de la meditación y creó un pequeño Núcleo de Sistema Operativo como el sueño le había predicho. A la manera de RMS, publicó el Núcleo en la Telaraña Mundial para que todos pudieran obtenerlo y contemplarlo. Y en la plenitud del tiempo de Internet el Núcleo creció y se replicó, haciéndose más guai y alucinante hasta que al fín fué reconocido como un Pingüino realmente grande y poderoso, cuyo nombre era Tux. Y los seguidores de Linux tomaron refugio en el Núcleo, las Librerías y las Utilidades; instalaron Distribución tras Distribución, hicieron sacrificios en favor de GNU y el Pingüino, y dieron gracias a los espíritus de Turing, von Neumann y Moore, por su liberación de las garras de Microsoft. Y este fué el principio de la Cuarta Era, la era del Código Fuente Abierto. Hay mucho más que decir acerca de los extrañísimos y maravillosos sucesos de aquellos días; cómo algunos Conjuntos de Microsoft planearon la guerra contra el Pingüino, pero fueron descubiertos en una víspera de Halloween; cómo Gates cayó entre abogados y fué traicionado y crucificado por sus anteriores amigos, los apóstoles de los Medios; cómo los Caballeros mercenarios del Sombrero Rojo llevaron el evangelio del Pingüino a las salas de las Corporaciones; e incluso de la disputa entre los cofrades del Gnomo y KDE acerca de una Licencia de troll. Pero todas esas cosas están descritas en otra parte, en los Libros de los Hechos del Pingüïno, y las Crónicas de la Cuarta Era, y supongo que si narrásemos todas ellas llenaríamos un montón de DVDs tan profundo y peligroso como un Grupo de Noticias de Usenet.
Ahora puedes programar en el poder de las Fuentes; Que el Núcleo, las Librerías y las Utilidades sean contigo, a través de todas las Distribuciones, hasta el fín de la Época. Amén.