¿Qué es un programa? Una pequeña introducción a los lenguajes de alto nivel Por Mario Macías A menudo, las personas sin nociones de programación son bastante reacias a comprender un concepto tan sencillo. Sin darnos cuenta, cada día estamos haciendo cosas similares a programar. Si no se lo creen, imaginen la siguiente situación: una ama de casa envía a su hijo a hacer las compras del día, para ello le indica: "Primero, ves a la panadería y compra 3 barras de cuarto. Luego ves a la charcutería y compra 100 gramos de chorizo. Si no queda chorizo, compra 100 gramos de jamón". De la misma manera que se puede indicar a una persona qué es lo que debe hacer se puede indicar a un ordenador cómo es el programa que debe ejecutar. Un ordenador no comprende el lenguaje humano, por lo que no le podemos decir cómo actuar al estilo de "Abre una ventana con dos botones..." porque no nos comprenderá. El lenguaje del ordenador es algo más complejo; consta de largas cadenas de ceros y unos que eléctricamente determinan cómo deben comportarse sus circuitos. ¡Pero no se asuste! Usted no debe preocuparse si se cree incapaz de aprender el lenguaje de su computador, por que nadie (o casi nadie) es capaz de hacerlo. Para escribir programas se utilizan los lenguajes de alto nivel: lenguajes formales que describen al computador la manera ordenada de ejecutar los programas. Una vez escritos los programas, un programa se encargará de traducir este lenguaje al código binario (cadenas de 0 y 1 que sí entiende el computador). Como ejemplo, podríamos traducir a un lenguaje de alto nivel las órdenes que da la madre a su hijo en el ejemplo anterior: programa compras inicio ir a panadería comprar 3 barras de cuarto ir a charcutería si hay chorizo comprar 100 gramos de chorizo si no comprar 100 gramos de jamón fin si final programa Para escribir un código en un lenguaje de alto nivel se pueden utilizar diferentes lenguajes, cada uno con sus ventajas y desventajas, sus usos y sus desusos. El ejemplo anterior no está escrito en ningún lenguaje en concreto, es un pseudocódigo utilizado para comprender de manera simplificada la estructura de un programa A continuación se describirán algunos de los lenguajes de alto nivel más utilizados y algunas de sus características: • FORTRAN: uno de los primeros lenguajes de alto nivel. Como su nombre indica (FORmule TRANslator), su finalidad es el cálculo de funciones matemáticas mediante el computador. • LOGO: lenguaje muy sencillo, creado para enseñar a los niños en las escuelas los fundamentos de la programación de ordenadores. Se podría decir de él que, más que lenguaje, es un "juguete". • LISP: lenguaje de procesado de listas. Es un poco lento y complejo, pero es muy utilizado en el campo de la inteligencia artificial y en ámbitos académicos. • BASIC: Sencillo lenguaje cuya principal finalidad fue la iniciación a la programación. En los 60 y 70 tuvo un gran éxito en las universidades, y todavía hoy se siguen utilizando extensiones de este lenguaje incluso en ámbitos profesionales (es probable que haya oído hablar alguna vez de Visual Basic). • Pascal: lenguaje creado en los años 60 con la finalidad de ser un lenguaje modular, es decir, se puede dividir en partes diferenciadas, cada una de las cuales tiene una función concreta. Durante mucho tiempo fue muy utilizado en ámbitos académicos. • C: Lenguaje creado en los 70 por Kernigham y Ritchie en los laboratorios Bell de AT&T. Se creó especialmente para desarrollar el sistema operativo UNIX. Mucha gente, la primera impresión que se lleva es que es "como Pascal pero más feo y difícil"; nada más lejos de la realidad. Este es el lenguaje que aprenderemos a utilizar en este libro, y a lo largo de éste iremos viendo las inmensas posibilidades y la gran potencia que nos ofrece el lenguaje C, que van mucho más allá que las de Pascal. • C++: Ampliación de C, creada a finales de los 80 por Bjarne Stroupstroup. Se añaden algunos conceptos nuevos como flujos de datos, excepciones y orientación a objeto, términos que no explicaremos por que escapan del objetivo de este libro. • Java: Es de características similares a C++. La gran novedad es que el código no se traduce al lenguaje que entiende su computador, sino que se traduce al lenguaje de una máquina imaginaria (la Máquina Virtual de Java), y esta máquina, a su vez, le dice a su ordenador qué es lo que debe hacer. La ventaja de esto es que usted puede crear una aplicación que pueda ejecutarse en cualquier ordenador o página WEB; la desventaja es que su programa irá del orden de unas 10-20 veces más lento que si lo hubiera hecho en C o C++. A la hora de escoger un lenguaje, a parte de las características del mismo, hay que tener en cuenta si se trata de un lenguaje compilado o interpretado. Un lenguaje interpretado necesitará de un intérprete cada vez que queramos ejecutarlo, que vaya leyendo nuestro programa paso a paso y diciendo al computador qué es lo que debe hacer. Un lenguaje compilado traducirá, en cambio, el programa al lenguaje del computador una sola vez, y cada vez que queramos ejecutar el programa, lo ejecutaremos directamente en código que entienda el computador, por lo que el programa será más rápido. Para entenderlo mejor, se podría hacer la siguiente analogía con la realidad: imagínese usted que quiere escribir una carta a una persona que vive en Pekín, pero usted no sabe chino ni él sabe español. Tiene, pues, dos alternativas: enviarle la carta en español y que él, cada vez que quiera leerla, necesite de los servicios de un intérprete que le vaya traduciendo a medida que lee; otra alternativa es que usted busque a alguien que le traduzca la carta al Chino y se la envía en dicho lenguaje, por lo que el destinatario podrá leerla sin problemas tantas veces como le plazca. Si usted es el programador y la persona de China es un computador, usted ya habrá caído en que la primera opción es el equivalente a la de interpretar un programa y que la segunda opción equivale a compilarlo. Como se ha dicho antes, en este libro usted aprenderá a programar en C, que es un lenguaje modular y compilado, por lo que usted podrá escribir programas con gran facilidad y, una vez compilados, ejecutarlos a una gran velocidad. Nuestro primer programa en C Observe el siguiente programa en C. Si compilásemos este programa no habría que incluir los números de línea, pero en la parte de los ejemplos numeraremos cada línea del programa para facilitar la explicación del mismo. No se preocupe si no entiende la mayor parte del programa, esto es sólo un ejemplo; cuando haya leído unos cuantos capítulos más, seguro que lo entenderá perfectamente: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. #include<stdio.h> int main(void) { char nombre[15]; printf(“Dime tu nombre: “); scanf(“%s”,nombre); printf(“Encantado de conocerte, %s!\n”,nombre); return 0; } Este programa nos pedirá mediante un mensaje de texto nuestro nombre, y una vez se lo hayamos introducido nos mostrará un mensaje de saludo tal y como se puede ver a continuación: > Dime tu nombre: Pedro > Encantado de conocerte, Pedro! Ahora que no conoce nada del lenguaje C podrá parecerle un tanto incomprensible el programa de muestra, por eso a continuación describiremos línea a línea las funciones que realiza el programa: • Línea 1. Incluye la librería que utilizará el programa. Por ahora no necesita saber qué es una librería, sólo debe saber que las órdenes printf y scanf necesitan que se incluya la librería stdio para poder funcionar. Habrá otras órdenes que necesiten otras librerías, como stdlib, windows, allegro, etc... pero no se preocupe, que en este libro le iremos indicando las librerías que deberá incluir. • Línea 3. Indica que es el comienzo de la función principal (main). En otras palabras, es el inicio del programa. Más adelante conocerá todo lo referente a funciones. • Líneas 4 y 10. Los símbolos { y } marcan respectivamente el inicio y el fin de la función principal. Otras veces se utilizan para delimitar otras partes del programa que más adelante mostraremos. • Línea 5. Indica que se va a utilizar un pequeño espacio en memoria de 15 letras para guardar el nombre. El nombre que le hemos puesto es, lógicamente, nombre. Aunque podría haberse llamado de cualquier otra manera. • Línea 6. Se indica que muestre por pantalla el mensaje escrito entre comillas y paréntesis. • Línea 7. Indica que mediante el teclado escribiremos algo, y que lo guarde en el espacio llamado nombre. El %s indica que lo que escribimos es un texto. • Línea 8. Muestra por pantalla el saludo, hemos añadido al mensaje el símbolo %s y fuera de las comillas el espacio nombre. Esto quiere decir que donde va %s hay que substituirlo por lo que hay en nombre. En este caso, el nombre introducido por el teclado. • Línea 9. Aquí return 0 indica que se ha acabado el programa sin ningún problema. Si se substituyera por return -1 estaríamos indicando al Sistema Operativo (por ejemplo, Windows) que ha habido algún error durante el programa. Como apunte final, debe saber que C hace distinción entre mayúsculas y minúsculas, por tanto, si escribimos "Return" el compilador nos dará error, ya que la manera correcta es "return"; o un espacio de memoria llamado "Nombre" no será el mismo que uno llamado "nombre" o que uno llamado "NoMbRe". Observar también que cada instrucción y definición debe acabar en punto y coma (;) para indicar el final de ésta. No deben llevar punto y coma los símbolos { y }, la definición del programa principal (main), ni las líneas para incluir librerías. ¿Qué ha aprendido? En este capítulo se le ha mostrado la filosofía de la programación, concretamente la programación en lenguajes de alto nivel. Se le ha enumerado las características de algunos lenguajes y se le ha explicado la diferencia entre lenguaje compilado y lenguaje interpretado. Todo esto se ha completado con un sencillo ejemplo de programa en lenguaje C, explicado paso a paso, con tal de mostrarle la estructura básica de un programa.