CONCEPTOS BSICOS. ESQUEMA BSICO DE TRABAJO CONFIGURACIN DE LA CUENTA PARA TRABAJAR CON EL COMPILADOR DE FORTRAN90 COMPILACIN y EJECUCIN DE PROGRAMAS FORTRAN: Primeros Pasos COMPILACIN Y EJECUCIN DE PROGRAMAS FORTRAN: Primeros errores
CONCEPTOS BSICOS
Lenguaje mquina: es el lenguaje que "entiende" el ordenador. Slo se pueden describir instrucciones muy simples, como Copiar el contenido de una direccin de memoria en un registro de la UAL (unidad aritmtico-lgica) Sumar el contenido de una direccin de memoria al contenido de un registro de la UAL Guardar el contenido del registro de la UAL en una direccin de memoria etc. Las instrucciones-mquina estn codificadas ("escritas") en binario (en trminos de 0 y 1). Los programas en lenguaje mquina son tediosos de escribir/entender y NO son portables de una mquina a otra.
Lenguaje ensamblador: es muy prximo al lenguaje mquina, pero los cdigos binarios de operaciones se sustituyen por nemnicos (nombres-cdigo que recuerdan la operacin) y las referencias a direcciones de memoria se sustituyen por nombres simblicos (variables). Por ejemplo, se podra usar el nemnico ADDREC para referirse a la operacin de sumar un nmero al contenido del registro de la UAL y STOREC para designar la operacion de guardar en Memoria Central el contenido del registro de operaciones. Asimismo, en vez de referirse a la direccin de Memoria nmero 101110100 se hara referencia a la variable SUMA. Los programas escritos en ensamblador deben ser traducidos a lenguaje mquina: esto lo hace un programa especial que se llama tambin ensamblador. Al programa escrito en ensamblador se le llama programa o cdigo fuente, mientras que al resultado de traducirlo al lenguaje mquina se le llama programa o cdigo objeto. Los programas escritos en ensamblador, aunque no tanto como los programas-mquina (objeto), siguen siendo tediosos y requiriendo del programador un profundo conocimiento del funcionamiento interno del ordenador. Y adems siguen sin ser portables: cada mquina tiene su propio lenguaje ensamblador.
Lenguajes de alto nivel: permiten liberar al programador del tedio de escribir programas como los descritos anteriormente y, sobre todo, permiten que los programas sean portables: que sirvan para muchas mquinas distintas. En un lenguaje de alto nivel se pueden escribir operaciones de ms complejidad y en un lenguaje ms prximo al "humano". A los programas escritos en lenguajes de alto nivel tambin se les llama programas o cdigos fuente. Los programas fuente tambin deben ser traducidos a lenguaje mquina. Generalmente, cada instruccin del cdigo fuente dar lugar a varias instrucciones-mquina. La traduccin a lenguaje mquina se puede hacer de dos formas (normalmente, dependiendo del lenguaje): Mediante un intrprete: un programa especial que traduce a lenguaje mquina instruccin a instruccin, y las va ejecutando. Mediante un compilador: un programa especial que traduce a lenguaje mquina un programa completo y, slo una vez traducido todo, se puede ejecutar. As, un programa fuente escrito en un lenguaje de alto nivel es independiente de la mquina. Se puede llevar de una mquina a otra y traducirlo. LO QUE ES DEPENDIENTE DE LA MQUINA ES EL COMPILADOR O INTRPRETE. FORTRAN90 es un lenguaje de compilador.
Programas ejecutables: un programa objeto procedente de la compilacin de un programa fuente escrito, por ejemplo, en FORTRAN, no se puede ejecutar tal cual. Es necesario "aadirle" determinadas "herramientas" del sistema que puede necesitar, como por ejemplo pequeos programas para calcular una raiz cuadrada, o un logaritmo, o para escribir mensajes en la pantalla, ... Esta fase se denomina edicin de enlaces (link) y es la que genera, verdaderamente, el programa o cdigo ejecutable.
ESQUEMA BSICO DE TRABAJO
Las fases en el desarrollo de un proyecto de programacin pueden resumirse de la siguiente forma: Planificacin del proyecto, dividindolo, si es complicado, en una secuencia de etapas ms simples, que correspondan a partes lgicas del desarrollo. Esta fase se lleva a cabo EN UN PAPEL, estableciendo lo ms claramente posible la finalidad de cada etapa, los datos que se necesitan de entrada, los datos que producirn en salida, los algoritmos que se utilizarn, etc. En esta etapa suele ser til escribir los algoritmos en forma de pseudo-cdigos: escribir esquemticamente la secuencia de operaciones a realizar en un lenguaje que nos resulte cmodo, pero intentando reproducir las operaciones que se realizarn en el ordenador.
1. Edicin del cdigo fuente, es decir, escritura del mismo utilizando un editor de texto simple (sin formato). Los programas fuente sern almacenados en ficheros de texto, normalmente en el disco duro del ordenador.
2. Compilacin del programa fuente, para traducirlo a cdigo mquina. Para ello se darn las rdenes oportunas al sistema operativo a travs de la linea de comandos de un terminal.
3. Correccin de errores de compilacin: si el compilador nos informa de que ha detectado errores, se analizarn para averiguar qu errores nuestros los han producido. Los errores se corregirn en el cdigo fuente, repitiendo los pasos 2 (de edicin) y 3 (de compilacin) hasta que no se produzcan errores de compilacin.
4. Generacin del programa ejecutable, normalmente utilizando (con otras opciones) el mismo comando que para compilar. En esta fase tambin se pueden detectar errores, normalmente debidos a que no se han suministrado de forma adecuada todas las "herramientas complementarias" que se necesitan para producir un ejecutable. Si se detectan hay que repetir, de nuevo, los pasos anteriores desde 2.
5. Ejecucin del programa. Lo normal, sobre todo con programadores novatos, es que no funcione correctamente. Esta es la fase ms difcil, porque los errores a este nivel no son de sintaxis. Suelen ser errores lgicos en la concepcin del programa: el programa "funciona" pero no hace lo que se esperaba.
6. Depuracin del programa, analizando las posibles causas de los errores de ejecucin. Una vez encontradas las causas, ser necesario repetir todos los pasos desde 2.
7. Cuando el programa funcione correctamente, suele ser conveniente revisar de nuevo el cdigo fuente para incluir los comentarios adecuados para documentarlo, as como para ordenarlo, ya que con mucha frecuencia el proceso de depuracin lo ha "desordenado". 8.
CONFIGURACIN DE LA CUENTA PARA TRABAJAR CON EL COMPILADOR DE FORTRAN90 Para trabajar ms cmodamente con el compilador, conviene hacer los siguientes cambios en la configuracin de nuestra cuenta de usuario: Editar el fichero .bash_profile (oculto) de nuestro directorio personal, aadir :. (dos puntos, punto) al final de la linea que comienza por PATH= ... etc de forma que quede: PATH=$PATH:$HOME/bin:. y aadir, a continuacin de esta, la linea siguiente: source /opt/intel/fc/9.1.036/bin/ifortvars.sh Salvar el fichero.
1. Salir de la cuenta (terminar sesin) y volver a entrar. En el futuro no habr que volver a realizar estas operaciones. 2.
COMPILACIN y EJECUCIN DE PROGRAMAS FORTRAN: Primeros Pasos Suponemos que ya est escrito nuestro programa fuente y almacenado en un fichero de nombre file.f90 Abrir un terminal y elegir, como directorio de trabajo, el directorio en donde est el fichero file.f90 En la linea de comandos escribir: ifort -c file.f90 para compilar el programa. Si sta es satisfactoria, se generar un fichero conteniendo el programa objeto de nombre file.o Una vez creado un programa objeto sin errores, escribir en la lnea de comandos ifort -o file.out file.o para editar enlaces. Si todo va bien, se generar un fichero de nombre file.out conteniendo el programa ejecutable. Si se escribe slo ifort file.o se producir un ejecutable de nombre a.out Tambin pueden llevarse a cabo ambas etapas mediante una sla orden, escribiendo ifort -o file.out file.f90 En este caso no se crear el fichero objeto file.o Para ejecutar el programa bastar escribir, en la linea de comandos del terminal file.out
Ejemplo 1 Realizar un programa ejecutable que imprima en la pantalla la palabra HOLA.
Escribir con un editor de textos el siguiente programa fuente: program hola print* print*, " HOLA !!!" print* end program hola Guardar dicho programa en un fichero con el nombre hola.f90 Abrir un terminal Compilar el programa: ifort -c hola.f90 Comprobar, tanto por linea de comandos como con el administrador de archivos, que se ha generado el programa objeto hola.o Generacin del ejecutable: ifort -o hola.out hola.o Comprobar que se ha generado el fichero ejecutable hola.out Ejecucin: hola.out provoca que imprima en pantalla la palabra HOLA Eliminar los ficheros hola.o y hola.out Generacin de otro ejecutable: ifort -o hola.out hola.f90 Comprobar que se ha generado el fichero hola.out y que no se ha creado el fichero hola.o
COMPILACIN Y EJECUCIN DE PROGRAMAS FORTRAN: Primeros errores Observaciones previas: El fichero ejecutable es autosuficiente, es decir, no necesita ninguno de los dems ficheros para funcionar. Adems, se puede ejecutar en cualquier mquina que tenga el mismo sistema operativo que aquel en que fue generado. En nuestro caso, en cualquier mquina con Linux. 1. Para poder modificar el funcionamiento de un ejecutable hay que modificar el fuente, guardar las modificaciones, y realizar todo el proceso completo de compilacin y generacin de ejecutable. 2. Cada vez que se realiza una nueva compilacin, sin errores de sintaxis, de un fuente, se "machaca" el fichero objeto correspondiente (a menos, claro est, que expresamente le demos un nombre distinto). Si hay errores de sintaxis, el objeto no se modifica y por tanto no recoge las posibles modificaciones que se hayan introducido en el fuente.
3. Cada vez que se realiza una nueva generacin de un ejecutable usando el mismo nombre y sin errores de enlace, se "machaca" el anterior ejecutable. Si hay errores de enlace, el ejecutable no se modifica y por tanto no recoge las posibles modificaciones que se hayan introducido en los objetos. 4. Ejemplo2 Modificar el programa del ejemplo1 para que tambin se imprima en pantalla la palabra ADIOS Aadir en el fichero hola.f90 dos nuevas lneas, de forma que quede program hola print* print*, " HOLA !!!" print* print*," ADIOS !!!" print* end program hola Guardar el fichero con el mismo nombre. Compilar el fichero y generar un nuevo ejecutable. Comprobar por lnea de comandos y por el administrador de ficheros las fechas y horas de modificacin de los distintos ficheros. Ejecutar el nuevo ejecutable.
Modificar el programa anterior cometiendo algn error de sintaxis. Borrar los ficheros hola.o y hola.out Modificar el fichero hola.f90, escribiendo mal alguna instruccin, por ejemplo: program hola pritn* print* " HOLA !!!" print* print*," ADIOS !!!" print* end program hola Guardar el fichero con el mismo nombre Compilar el fichero con la orden ifort -c hola.f90 Se obtendr la siguiente salida, describiendo los errores de compilacin que se han encontrado fortcom: Error: hola.f90, line 2: Syntax error, found '*' when expecting one of: => = . ( : % pritn* ------------^ fortcom: Error: hola.f90, line 3: Syntax error, found CHARACTER_CONSTANT ' HOLA !!!' when expecting one of: , <END-OF-STATEMENT> ; print* " HOLA !!!" --------------^ compilation aborted for hola.f90 (code 1)