Вы находитесь на странице: 1из 4

APUNTES DE PRCTICAS DE LABORATORIO

AMPLIACIN DE CLCULO NUMRICO



PRIMEROS PASOS COMPILANDO

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)

Вам также может понравиться