You are on page 1of 10

INTRODUCCION A LA PROGRAMACION FORTRAN

J. San Fabi n a Inform tica Aplicada a la Qumica a Departamento de Qumica Fsica Aplicada Universidad Aut noma de Madrid o Primera versi n en Latex: 3 Nov 2004 o (18 de febrero de 2008)

Introducci n a la Programaci n o o

Indice
1. PRIMERA SESION 1.1. Editar, Compilar y Ejecutar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Constantes, Variables y Tipos de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. Funciones Intrnsecas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4. Bucles (DO) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5. Problemas Adicionales (opcionales) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. SESION SEGUNDA 2.1. Decisiones (instrucci n IF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 2.1.1. Introducci n de datos por medio de un chero. . . . . . . . . . . . . . . . . . . . . . o 2.2. GOTO (la instrucci n que debemos evitar) . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 2.3. Ejercicio 1: Ecuaci n de segundo grado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 2.4. Problemas Adicionales (opcionales) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. SESION TERCERA 3.1. Manejo de Vectores y Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Ejercicio 2: Ajuste de una recta por mnimos cuadrados . . . . . . . . . . . . . . . . . . . . . 3.3. Problemas Adicionales (opcionales) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. CUARTA SESION 4.1. Subprogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Ejercicio 3: Integraci n num rica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o e 4.3. Problemas Adicionales (opcional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 5 7 9 10 11 11 12 12 13 14 15 15 15 16 17 17 19 20

Dpto. Qumica Fsica Aplicada, UAM

INTRODUCCION A LA PROGRAMACION FORTRAN


Vamos a comenzar cuatro sesiones (10 horas) de introducci on a la programaci n y para ello vamos o a utilizar el lenguaje de programacion FORTRAN.

Lea detenidamente y con calma la introduccion siguiente. Siempre que aparezca una [C] es que tiene que contestar alguna cuestion. Cuando aparezca una [P] es porque tiene que hacer un programa (editar, compilar y ejecutar) y cuando funcione imprimirlo. Los programas que no tengan la [P] no hace falta sacarlos por la impresora. Los programas impresos, las contestaciones a las cuestiones y los ejercicios 1 a 3, estos ultimos en las sesiones 2a a 4a forman el gui n de pr cticas o a que tiene que entregar al profesor en el plazo de una semana desde la terminaci on de la cuarta sesi n de FORTRAN. Tambi n encontrar una serie de ejercicios adicionales que en caso de tener o e a tiempo debe incluir en el gui n de pr cticas (OPCIONAL). o a Ante un problema estudie detenidamente la informacion que le proporciona el ordenador e intente resolverlo por s mismo antes de preguntar al profesor.

Introducci n a la Programaci n o o

1. PRIMERA SESION
1.1. Editar, Compilar y Ejecutar

Los primero que vamos a hacer es escribir, compilar y ejecutar nuestro primer programa en FORTRAN. Para ello siga los pasos siguientes: 1.- (EDITAR) Edite con cualquier editor un chero llamado prog1.f con el texto de la Fig. 1. En esta gura el editor utilizado es el KWrite, pero puede utilizar el que le resulte m s c modo (kate, vi, ...). Procure a o escribir el texto lo m s literal posible respetando la columna en la que se escribe cada cosa. Salve (guarde) a el chero al disco con el nombre prog1.f

Figura 1: Primer programa FORTRAN (prog1.f) editado con el editor Kedit. 2.- (COMPILAR)
1

El smbolo nal ( ) signica que debe pulsar dicha tecla o la tecla Intro para hacer operativa la orden. Si ha escrito bien el chero prog1.f no debe aparecer ning un error. Si la compilaci n produce alg n error, lea o u detenidamente lo que le indica el ordenador, y con esa informaci on revise (reedite) el chero prog1.f y vuelva a ejecutar la instrucci n anterior. Si no consigue solucionar los problemas por s mismo pregunte o a su profesor.

Ejecute la siguiente instrucci n: o gfortran prog1.f -o prog1.exe

( )

3.- (EJECUTAR) Si la compilaci n no da ning n error ejecute el comando ls y ver que entre otros tiene o u a en el disco los cheros prog1.f y prog1.exe. Este ultimo es un chero ejecutable. Escriba la instruccion siguiente para ejecutar: ./prog1.exe ( ) El ./ antes del nombre del ejecutable (prog1.exe) es necesario en las ultimas versiones de linux e indica que el programa ejecutable esta en el subdirectorio de trabajo en el que estamos situados. Si todo ha funcionado, entonces, hemos editado, compilado y ejecutado nuestro primer programa en FORTRAN. En estas cuatro sesiones de pr cticas vamos a aprender un poco m s sobre la programaci n FORTRAN. a a o Como puede suponer es una introduccion al FORTRAN muy breve, le aconsejo que practique y profundice por su cuenta en la programaci n pues puede serle muy util. o
Compilar consiste en traducir el lenguaje fortran a codigo m quina que es capaz de entender el ordenador. Esta operaci on la realiza a un programa llamado compilador, en este caso el gfortran.
1

Dpto. Qumica Fsica Aplicada, UAM

1.2.

Constantes, Variables y Tipos de Datos

FORTRAN es un lenguaje de programacion vivo ya que la mayora de los programas usados por la comu nidad cientca est n escritos en FORTRAN. Es un lenguaje de alto nivel, es decir, requiere poco conocimiento a del hardware y emplea palabra conocidas (normalmente en ingl s) que le indican al ordenador lo que tiene que e hacer con unas serie de objetos con los que va a trabajar. El tipo de objetos que va a manejar el ordenador siguiendo las ordenes de nuestro programa son los que se muestran en la Fig. 2. En estas pr cticas unicamente vamos a trabaa jar con n meros enteros y reales y muy de pau sada con caracteres. Por defecto el FORTRAN que estamos usando utiliza 4 bytes (8x4 = 32 bits) para guardar un n mero entero o un n u u mero real. Esto implica que el n mero entero u m s grande, en valor absoluto, que podemos a usar es el 2147483647. Por otro lado, los numeros reales tendr n una precisi n aproximaa o da de 7 cifras signicativas y los numeros rea-

Figura 2: Tipo de datos utilizados en el lenguaje FORTRAN. les que podemos manejar estar n entre 1038 y 1038 . a Los datos pueden estar en nuestro programa de dos maneras diferentes, como constantes o como variables (Fig. 3). Las variables son como las memorias de nuestra calculadora de bolsillo y su contenido puede cambiar durante la ejecucion del programa. Los n meros enteros y reales se denen (es u decir, se le indica al ordenador que son numeros enteros o reales) como se muestra en la Fig. 4. Por otro lado tambi n tenemos varios tipos de n mee u ros enteros y reales, aunque nosotros vamos a uti lizar unicamente los que tiene el FORTRAN por defecto y que hemos se alado en la Fig. 3 (defecn to).

Figura 3: Constantes y variables.

Es importante recordar que las variables enteras se denen con nombres que comienzan por I, J, K, L, M o N (I-N). Y variables reales las que comienzan con las demas letras (A-H, O-Z).

Figura 4: Denici n de enteros y reales. o

Introducci n a la Programaci n o o

Con estos datos podemos hacer una serie de operaciones b asicas (Fig. 5). Observa que las operaciones tienen prioridades, es decir la multiplicaci n y la divisi n siempre se realizan antes que las sumas y restas. o o Para evitar problemas a este respecto conviene utilizar par ntesis siempre que tengamos dudas, aunque no sea e necesario.

Figura 5: Operaciones b sicas. a Una operaci n b sica y a la vez difcil de entender cuando la vemos por primera vez es la instrucci on de o a asignaci n. Cuando vemos un signo = debemos entender que se realizan las operaciones que hay a la o derecha del signo = y el resultado se guarda en la variable que esta a la izquierda del igual. Por tanto, a la izquierda del = siempre debe haber una variable. Vamos a hacer un programa para repasar los conceptos vistos hasta ahora. EDITE, COMPILE Y EJECUTE el programa prog2.f. Evidentemente, los numeros de la columna derecha (entre corchetes)

[C] DISCUTA brevemente los resultados.

s lo sirven para numerar las lneas y no hay que escribirlos. o

Figura 6: Instrucci n de asignaci n. o o


C prog2.f 16 Oct C Autor: .... C conceptos basicos C=====7========================= P1 = 5.3 N1 = 3 P2 = P1 * N1 N2 = P1 * N1 PRINT * , PRINT * , P2 = P2+N1 PRINT * , STOP END P2: N2: , P2 , N2 , P2 97 { 1} { 2} { 3} { 4} { 5} { 6} { 7} { 8} { 9} {10} {11} {12} {13} {14} {15} {16} {17}

* 2 P2-NUEVO:

En los programas en fortran, las instrucciones comienzan en la columna 7. Los comentarios (las primeras cuatro lneas en los programas anteriores son comentarios) se indican con una C (tambi n e podra ser un asterisco *) en la columna 1. Los co mentarios son ignorados por el compilador. El programa termina con dos instrucciones que todo programa FORTRAN debe tener (STOP y END). El lenguaje FORTRAN77 (y anteriores) sigue una serie de reglas rigurosas en cuanto a la colocacion de las instrucciones (estudie la Fig. 7 detenidamente).

Dpto. Qumica Fsica Aplicada, UAM

Figura 7: Divisi n de las lneas en FORTRAN77. o

[C] REMPLACE la lnea 13 del programa prog2.f por:


1. P2 = (P2 + N1) + 1 2. P2 = N1 / N2 3. P2 = REAL(N1) / REAL(N2) 4. P2 = P2 / 2.0 * N1 5. P2 = P2 / (2.0 * N1) Vuelva a COMPILAR y EJECUTAR cada caso. ANOTE y ANALICE el resultado. Mantenga el mismo nombre (prog2.f) para todos los casos.

1.3.

Funciones Intrnsecas

Las funciones intrnsecas son aquellas denidas por el propio lenguaje de programacion (por ejemplo el coseno, la raz cuadrada, el logaritmo, etc). Est n inclui a das en las libreras del compilador y este las recono ce de modo autom tico (ver Tabla 1). A continuacion a mostramos un programa sencillo que emplea funciones intrnsecas. Observa que los argumentos (valores o va riables sobre los que se aplica la funcion) van siempre entre par ntesis y si hay m s de uno, separados por coe a mas. CUIDADO: Los argumentos de las funciones trigonom tricas van siempre en radianes en vez de en grados. e EDITE, COMPILE Y EJECUTE el programa prog3.f. Para saber cuanto vale la variable PI inserte debajo de la instrucci n en donde se calcula el valor de PI la instruccion o PRINT*, PI y vuelva a compilar y a ejecutar. Figura 8: Funciones intrnsecas.

[C] Para que se utiliza la variable RAD?.

Introducci n a la Programaci n o o

C prog3.f 17 Oct 97 C Autor: .... C Calcula el coseno de 45 grados C y la ra z cuadrada de 36. C ================================ ANG = 45.0 RA = 36.0 PI = ACOS(-1.0) RAD = PI/180.0 Func. trigonometricas CS = COS (ANG * RAD) RAI= SQRT(RA) PRINT * , CS, STOP END RAI

en radianes

Cuadro 1: Funciones intrnsecas m s habituales. a Tipo argum. Tipo funcion (output) Observaciones Funciones matem ticas: a SQRT (gen) Real o comp. (1) Raiz cuadrada EXP (gen) Real o comp. (1) Exponencial LOG (gen) Real o comp. (1) Logaritmo neperiano LOG10 (gen) Real (1) Logaritmo decimal Funciones trigonom tricas (trabajan en radianes) e SIN (gen) Real o comp. (1) Seno COS (gen) Real o comp. (1) Coseno TAN (gen) Real. (1) Tangente ASIN (real) Real. (1) Arcoseno ACOS (real) Real. (1) Arcocoseno ATAN (real) Real. (1) Arcotangente Funciones de valor absoluto y signos ABS (gen) Int. real o comp. (1) Valor absoluto SIGN (genA, genB) Int. o real (1) Devuelve |genA| con el signo de genB. Funciones de conversi n o INT (gen) Int. real o comp. Int. Devuelve el valor entero truncando los decimales. REAL (gen) Int. real o comp. Real*4 Convierte un no entero en real. Funciones de redondeo y truncaci n o NINT (real) Real Int Devuelve el entero por redondeo. ANINT (real) Real (1) Devuelve un n mero real sin decimales, redondeado. u Funci n modulo o MOD (ganA, genB) Int. o real (1) Devuelve el resto de dividir genA por genB. Funciones de m ximos y mnimos a MAX (genA, genB, ...) Int. o real (1) Devuelve el mayor de los argumentos. MIN (genA, genB, ...) Int. o real (1) Devuelve el menor de los argumentos. (1) Devuelve el mismo tipo de argumento que la entrada. Nombre

Dpto. Qumica Fsica Aplicada, UAM

1.4.

Bucles (DO)

Queremos sumar los diez primeros t rminos de la serie siguiente: e


10

SU M A =
I=1

1 I

El programa serie1.f hace la suma de los diez t rminos, sin embargo, es bastante repetitivo. e
C serie1.f 16 Oct 97 C Serie 1/I C===================== R = 1.0 R = R + (1.0/2) R = R + (1.0/3) R = R + (1.0/4) R = R + (1.0/5) R = R + (1.0/6) R = R + (1.0/7) R = R + (1.0/8) R = R + (1.0/9) R = R + (1.0/10) PRINT * , SERIE: STOP END , R C bucle1.f 16 Oct 97 C Serie 1/I con un bucle C=========================== R = 1.0 DO I = 2, 10 R = R + (1.0/I) ENDDO PRINT * , SERIE: STOP END , R

Imagine como sera el programa si quisi ramos el sumatorio de los 100 o 1000 primeros t rminos de la e e serie. Para evitar la repetici n del mismo tipo de instrucciones, el FORTRAN tiene la instrucci on DO. Con o esta instrucci n el programa anterior se simplica como puede ver en el programa bucle1.f. La instrucci on o DO I = 2, 10 se entiende como hacer desde I igual a 2 hasta I igual a 10 el conjunto de instrucciones que est an entre el DO y el ENDDO (ver Fig. 9).

[C] En los programas serie1.f y bucle1.f son necesarios los par ntesis?. e

EDITE, COMPILE Y EJECUTE el programa bucle1.f. A continuaci on REEMPLACE la instrucci n R = R + (1,0/I) por R = R + (1/I), El resultado es el mismo?, Por qu ?. o e Si ahora queremos calcular la suma de los 100 primeros t rminos tenemos que editar el programa bucle1.f, e cambiar el 10 por un 100, volver a compilar y ejecutar. Para evitar el tener que editar y compilar el programa cada vez que queremos cambiar el valor lmite de la serie tenemos la instruccion READ (ver el programa buble2.f). Esta instrucci n sirve para que el programa lea el contenido de una variable (en este caso la variable o N) y lo guarde en memoria. Por tanto, al ejecutar el programa bucle2, el ordenador se quedar a esperando a que tecleemos el valor que queremos que valga N. El programa lee este valor cuando despues de teclearlo pulsamos la tecla intro y lo asigna a la variable N.
C bucle2.f 16 Oct 97 C Serie 1/I con un bucle y numero C de terminos variables. C=================================== PRINT * , Numero de terminos: READ * , N R = 1.0 DO I = 2, N R = R + (1.0/I) ENDDO + PRINT * , Terminos: ,N, Serie: ,R STOP END { 1} { 2} { 3} { 4} { 5} { 6} { 7} { 8} { 9} {10} {11} {12} {13} {14} {15} {16}

COPIE bucle1.f a bucle2.f utilizando la instrucci n siguiente: o cp bucle1.f bucle2.f EDITE bucle2.f y MODIFIQUELO de acuerdo con la gura correspondiente a bucle2.f. COMPILE Y EJECUTE el programa bucle2. Observe la diferencia con respecto a bucle1.

10

Introducci n a la Programaci n o o

ATENCION: el car cter + o cualquier otro situado en la columna 6 indica que dicha lnea es continuaci n a o de la lnea anterior (ver Fig. 7), por lo tanto, en el ejemplo anterior, las lneas 13 y 14 equivalen a una sola instrucci n: o PRINT*, T rminos: ,N, Serie: ,R e A continuaci n, ELIMINE la instrucci n correspondiente al print*, Numero ... (lnea 5) y vuelva a o o compilar y a ejecutar el programa bucle2.f. Cual es la diferencia?.

Figura 9: La instrucci n DO, bucle b sico. o a

1.5.

Problemas Adicionales (opcionales)


Las variables siguientes tienen los valores indicados, B = 6,0, C = 4,0, M = 5, N = 3 y K = 2. Indique que valores se almacenar n en la variable J (entera) como resultado de las siguientes operaciones: a a) J = M + N/K; b) J = C + B/K + N ; c) J = M M/K K; d) J = N N K. Programe (sobre papel) las siguientes asignaciones aritm ticas: e c) S = a) AREA = 2P Rsen
cos4 x x

[C] [C]

b) ARC = 2
e
x 2 x

y2 +

4X 2 3

1 1+senx d) G = 2 log 1senx

e) Z =

[C]

g) Y = (2)

2 x21a2 2a 2 3 2 a ) 3( x 1/2 x+1 x

f) B =

cos x/2+ 8 2x

De los siguientes nombre, cu les son validos como variables enteras, cu les como variables reales y cu les no a a a son validos como variables?. Siempre suponiendo que no hay ninguna instrucci on de especicaci n previa y cono siderando la norma del FORTRAN 77. H I 12G BETA X+2 ALPHA324 42G I A*B IT* GAMMA LARGA IBM360 F(3)21 COBOL CHI AI COS F1.4

[C]

[C]

La secuencia de Fibonacci (Leonardo de Pisa 1202) nos dara el crecimiento de pares de conejos sobre sucesivos perodos de tiempo suponiendo que ningun conejo muere. Los dos primeros t rminos de la e serie de Fibonacci son ambos un uno. Los restantes t rminos de la serie se calculan sumando los dos e t rminos precedentes. Escriba un programa que lea un valor entero (NMAX) y que calcule y escriba los e primeros NMAX t rminos de la serie de Fibonacci. e Escriba un programa en FORTRAN para calcular 1 2 + 3 4 + 5 6 + ... 1000

You might also like