Programación en C/Fundamentos de programación
En este capítulo veremos un resumido listado de conceptos básicos, esta información puede encontrarse en forma más elaborada en el WikiLibro Fundamentos de programación.
Definiciones
editar- Se denomina algoritmo a una secuencia de instrucciones que permiten obtener un resultado en particular. No necesariamente son programas de computadora, una receta de cocina, o las instrucciones para cambiar un neumático son ejemplos de algoritmos de la vida real.
- Las computadoras, son maquinas sin inteligencia propia, cuya única finalidad es interpretar el código que se les provee.
- El lenguaje de máquina es el único lenguaje que la computadora "entiende" y es capaz de ejecutar.
- Los lenguajes de programación son el medio de comunicación entre el programador y una computadora. El programador escribe en algún lenguaje de programación y utiliza las herramientas provistas por ese lenguaje para transformarlo en lenguaje de máquina.
- Finalmente, denominamos programa a una secuencia de órdenes a ser ejecutadas por una computadora. Un programa debe estar escrito en algún lenguaje de programación, y puede incluir uno o más algoritmos.
Tipos de lenguajes
editarExiste una gran cantidad de lenguajes de programación, que están pensados para distintas finalidades, siguen distintos paradigmas, y de una u otra forma se diferencian de los demás.
Esquemas de programación
editarEl esquema de programación llamado Programación Imperativa, consiste en escribir una secuencia de instrucciones una detrás de la otra, que se ejecutarán en orden. Algunas de esas instrucciones pueden hacer que la máquina pase a una instrucción que no sea la siguiente, tal vez porque se cumpla una condición que hayamos establecido.
En los últimos años ha tomado fuerza otro paradigma de computación, llamado Programación Orientada a Objetos , en el cual se intentan modelar los sistemas creados como extensiones de la realidad mediante la definición de "objetos" que modelan entidades de la vida real y que interactúan entre sí mediante "mensajes" llamadas métodos.
El lenguaje C es un lenguaje imperativo, no orientado a objetos.
Alto o bajo nivel
editarPor otro lado, los lenguajes de programación se clasifican en niveles. Un lenguaje es de más bajo nivel cuanto más cercano esté al código de máquina, y un lenguaje que es de más alto nivel cuanto más lejano esté de la máquina y más cercano al lenguaje humano.
C es un lenguaje de alto nivel aunque tiene muchas características de lenguaje de bajo nivel (como el uso que permite hacer de la memoria). Estas características hacen que C sea un lenguaje muy potente, ya que permite optimizar al máximo los recursos de la máquina. Por ende, esto también hace que la dificultad y que los errores que se puedan cometer programando aumenten. Así que a C se le considera de nivel medio.
Lenguajes de más alto nivel que C son aquellos en los que el programador no necesita encargarse de manipular la memoria, como Java, C#, Python, Ruby, entre otros.
Compilados o interpretados
editarOtra forma de clasificar a los lenguajes de programación que es según la forma en que se ejecutan sus órdenes. Existen los lenguajes que son interpretados, cuyas órdenes pasan a través de un intérprete que se encarga de ejecutarlas (a partir del código fuente) en el mismo momento en que están siendo leídas. Algunos de los lenguajes interpretados son Python, Perl o Tcl, entre muchos otros.
La contraparte de los lenguajes interpretados son los lenguajes compilados (como el mismo C) que se diferencian en que las órdenes son transformadas a lenguaje de máquina que se almacena en un archivo ejecutable. Ese archivo puede ejecutarse luego, sin recurrir al compilador.
Los lenguajes compilados tienen la ventaja de la velocidad y la eficiencia, pero los interpretados tienen la ventaja de que, generalmente, son muy portables y de más alto nivel.
Estructura de la memoria
editarParte de esta potencia de C viene de que permite acceder con mucha libertad a la memoria de la máquina. Para entender un poco cómo es posible, debemos entender cómo se guardan los datos en la memoria.
Imaginemos que la memoria tiene un montón de casillas, una enorme fila de casillas, cada una de las cuales contiene un dígito binario (bit):
0101001010100001010101001010000100111010110010010101001011010110001101010110101010110111...
Es exactamente así, pero es más cómodo recordar que esos bits se encuentran agrupados de ocho en ocho, formando octetos (bytes):
01010010 | 10100001 | 01010100 | 10100001 | 00111010 | 11001001 | 01010010 | 11010110 | 00110101 | 01101010 | 10110111 | ... |
Cada octeto puede contener combinaciones distintas de ceros y unos, es decir, cualquier número entre 0 y 255:
82 | 161 | 84 | 161 | 58 | 201 | 82 | 214 | 181 | 106 | 183 | ... |
También podemos representar estos números en base hexadecimal:
0x52 | 0xA1 | 0x54 | 0xA1 | 0x3A | 0xC9 | 0x52 | 0xD6 | 0x35 | 0x6A | 0xB7 | ... |
O considerarlos caracteres, mediante alguna codificación:
R | ¡ | T | ¡ | : | É | R | Ö | 5 | j | · | ... |
Este es el tipo de dato más elemental que nos podemos encontrar en C: el caracter. Un caracter ocupa exactamente un byte (8 bits) de memoria, y puede contener un número entre 0 y 255, o entre -128 y 127, dependiendo si queremos considerarlo como sin signo o con él.