You are on page 1of 20

INTRODUCCI

ON A LA PROGRAMACI

ON
FORTRAN
J. San Fabi an
Inform atica Aplicada a la Qumica
Departamento de Qumica Fsica Aplicada
Universidad Aut onoma de Madrid
Primera versi on en Latex: 3 Nov 2004
(18 de febrero de 2008)
2 Introducci on a la Programaci on

Indice
1. PRIMERA SESI

ON 4
1.1. Editar, Compilar y Ejecutar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2. Constantes, Variables y Tipos de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3. Funciones Intrnsecas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4. Bucles (DO) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5. Problemas Adicionales (opcionales) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2. SESI

ON SEGUNDA 11
2.1. Decisiones (instrucci on IF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.1. Introducci on de datos por medio de un chero. . . . . . . . . . . . . . . . . . . . . . 12
2.2. GOTO (la instrucci on que debemos evitar) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3. Ejercicio 1: Ecuaci on de segundo grado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4. Problemas Adicionales (opcionales) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3. SESI

ON TERCERA 15
3.1. Manejo de Vectores y Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2. Ejercicio 2: Ajuste de una recta por mnimos cuadrados . . . . . . . . . . . . . . . . . . . . . 15
3.3. Problemas Adicionales (opcionales) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4. CUARTA SESI

ON 17
4.1. Subprogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2. Ejercicio 3: Integraci on num erica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.3. Problemas Adicionales (opcional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Dpto. Qumica Fsica Aplicada, UAM 3
INTRODUCCI

ON A LA PROGRAMACI

ON
FORTRAN
Vamos a comenzar cuatro sesiones (10 horas) de introducci on a la programaci on y para ello vamos
a utilizar el lenguaje de programaci on FORTRAN.
Lea detenidamente y con calma la introducci on siguiente. Siempre que aparezca una [C] es
que tiene que contestar alguna cuesti on. 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 2
a
a 4
a
forman el gui on de pr acticas
que tiene que entregar al profesor en el plazo de una semana desde la terminaci on de la cuarta
sesi on de FORTRAN. Tambi en encontrar a una serie de ejercicios adicionales que en caso de tener
tiempo debe incluir en el gui on de pr acticas (OPCIONAL).
Ante un problema estudie detenidamente la informaci on que le proporciona el ordenador e intente
resolverlo por s mismo antes de preguntar al profesor.
4 Introducci on a la Programaci on
1. PRIMERA SESI

ON
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 as c omodo (kate, vi, ...). Procure
escribir el texto lo m as literal posible respetando la columna en la que se escribe cada cosa. Salve (guarde)
el chero al disco con el nombre prog1.f
Figura 1: Primer programa FORTRAN (prog1.f) editado con el editor Kedit.
2.- (COMPILAR)
1
Ejecute la siguiente instrucci on:
gfortran prog1.f -o prog1.exe (

)
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 on produce alg un error, lea
detenidamente lo que le indica el ordenador, y con esa informaci on revise (reedite) el chero prog1.f y
vuelva a ejecutar la instrucci on anterior. Si no consigue solucionar los problemas por s mismo pregunte
a su profesor.
3.- (EJECUTAR) Si la compilaci on no da ning un error ejecute el comando ls y ver a que entre otros tiene
en el disco los cheros prog1.f y prog1.exe. Este ultimo es un chero ejecutable. Escriba la instrucci on
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 FOR-
TRAN. En estas cuatro sesiones de pr acticas vamos a aprender un poco m as sobre la programaci on FORTRAN.
Como puede suponer es una introducci on al FORTRAN muy breve, le aconsejo que practique y profundice por
su cuenta en la programaci on pues puede serle muy util.
1
Compilar consiste en traducir el lenguaje fortran a c odigo m aquina que es capaz de entender el ordenador. Esta operaci on la realiza
un programa llamado compilador, en este caso el gfortran.
Dpto. Qumica Fsica Aplicada, UAM 5
1.2. Constantes, Variables y Tipos de Datos
FORTRAN es un lenguaje de programaci on vivo ya que la mayora de los programas usados por la comu-
nidad cientca est an escritos en FORTRAN. Es un lenguaje de alto nivel, es decir, requiere poco conocimiento
del hardware y emplea palabra conocidas (normalmente en ingl es) que le indican al ordenador lo que tiene que
hacer con unas serie de objetos con los que va a trabajar.
El tipo de objetos que va a manejar el or-
Figura 2: Tipo de datos utilizados en el lenguaje FORTRAN.
denador siguiendo las ordenes de nuestro pro-
grama son los que se muestran en la Fig. 2.
En estas pr acticas unicamente vamos a traba-
jar con n umeros enteros y reales y muy de pa-
sada con caracteres. Por defecto el FORTRAN
que estamos usando utiliza 4 bytes (8x4 = 32
bits) para guardar un n umero entero o un n u-
mero real. Esto implica que el n umero entero
m as grande, en valor absoluto, que podemos
usar es el 2147483647. Por otro lado, los n u-
meros reales tendr an una precisi on aproxima-
da de 7 cifras signicativas y los n umeros rea-
les que podemos manejar estar an entre 10
38
y 10
38
.
Los datos pueden estar en nuestro programa
Figura 3: Constantes y variables.
de dos maneras diferentes, como constantes o co-
mo variables (Fig. 3). Las variables son como las
memorias de nuestra calculadora de bolsillo y su
contenido puede cambiar durante la ejecuci on del
programa.
Los n umeros enteros y reales se denen (es
decir, se le indica al ordenador que son n umeros
enteros o reales) como se muestra en la Fig. 4. Por
otro lado tambi en tenemos varios tipos de n ume-
ros enteros y reales, aunque nosotros vamos a uti-
lizar unicamente los que tiene el FORTRAN por
defecto y que hemos se nalado en la Fig. 3 (defec-
to).
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 dem as letras (A-H, O-Z).
Figura 4: Denici on de enteros y reales.
6 Introducci on a la Programaci on
Con estos datos podemos hacer una serie de operaciones b asicas (Fig. 5). Observa que las operaciones
tienen prioridades, es decir la multiplicaci on y la divisi on siempre se realizan antes que las sumas y restas.
Para evitar problemas a este respecto conviene utilizar par entesis siempre que tengamos dudas, aunque no sea
necesario.
Figura 5: Operaciones b asicas.
Una operaci on b asica y a la vez difcil de entender cuando la vemos por primera vez es la instrucci on de
asignaci on. Cuando vemos un signo = debemos entender que se realizan las operaciones que hay a la
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 n umeros de la columna derecha (entre corchetes)
s olo sirven para numerar las lneas y no hay que escribirlos.
[C] DISCUTA brevemente los resultados.
Figura 6: Instrucci on de asignaci on.
C prog2.f 16 Oct 97 { 1}
C Autor: .... { 2}
C conceptos basicos { 3}
C=====7========================= { 4}
P1 = 5.3 { 5}
N1 = 3 { 6}
P2 = P1
*
N1 { 7}
N2 = P1
*
N1 { 8}
{ 9}
PRINT
*
, P2: , P2 {10}
PRINT
*
, N2: , N2 {11}
{12}
P2 = P2+N1
*
2 {13}
PRINT
*
, P2-NUEVO: , P2 {14}
{15}
STOP {16}
END {17}
En los programas en fortran, las instrucciones co-
mienzan en la columna 7. Los comentarios (las
primeras cuatro lneas en los programas anteriores
son comentarios) se indican con una C (tambi en
podra ser un asterisco *) en la columna 1. Los co-
mentarios son ignorados por el compilador. El pro-
grama termina con dos instrucciones que todo pro-
grama FORTRAN debe tener (STOP y END).
El lenguaje FORTRAN77 (y anteriores) sigue una
serie de reglas rigurosas en cuanto a la colocaci on de
las instrucciones (estudie la Fig. 7 detenidamente).
Dpto. Qumica Fsica Aplicada, UAM 7
Figura 7: Divisi on de las lneas en FORTRAN77.
[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
Figura 8: Funciones intrnsecas.
el propio lenguaje de programaci on (por ejemplo el co-
seno, la raz cuadrada, el logaritmo, etc). Est an inclui-
das en las libreras del compilador y este las recono-
ce de modo autom atico (ver Tabla 1). A continuaci on
mostramos un programa sencillo que emplea funciones
intrnsecas. Observa que los argumentos (valores o va-
riables sobre los que se aplica la funci on) van siempre
entre par entesis y si hay m as de uno, separados por co-
mas.
CUIDADO: Los argumentos de las funciones trigo-
nom etricas van siempre en radianes en vez de en grados.
EDITE, COMPILE YEJECUTE el programa prog3.f.
Para saber cuanto vale la variable PI inserte debajo
de la instrucci on en donde se calcula el valor de PI la instrucci on
PRINT*, PI
y vuelva a compilar y a ejecutar.
[C] Para que se utiliza la variable RAD?.
8 Introducci on a la Programaci on
C prog3.f 17 Oct 97
C Autor: ....
C Calcula el coseno de 45 grados
C y la raz cuadrada de 36.
C ================================
ANG = 45.0
RA = 36.0
PI = ACOS(-1.0)
RAD = PI/180.0
C Func. trigonometricas en radianes
CS = COS (ANG
*
RAD)
RAI= SQRT(RA)
PRINT
*
, CS, RAI
STOP
END
Cuadro 1: Funciones intrnsecas m as habituales.
Nombre Tipo argum. Tipo funci on (output) Observaciones
Funciones matem aticas:
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 etricas (trabajan en radianes)
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 on
INT (gen) Int. real o comp. Int. Devuelve el valor entero truncando los decimales.
REAL (gen) Int. real o comp. Real*4 Convierte un n
o
entero en real.
Funciones de redondeo y truncaci on
NINT (real) Real Int Devuelve el entero por redondeo.
ANINT (real) Real (1) Devuelve un n umero real sin decimales, redondeado.
Funci on modulo
MOD (ganA, genB) Int. o real (1) Devuelve el resto de dividir genA por genB.
Funciones de m aximos y mnimos
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.
Dpto. Qumica Fsica Aplicada, UAM 9
1.4. Bucles (DO)
Queremos sumar los diez primeros t erminos de la serie siguiente:
SUMA =
10

I=1
1
I
El programa serie1.f hace la suma de los diez t erminos, sin embargo, es bastante repetitivo.
C serie1.f 16 Oct 97 C bucle1.f 16 Oct 97
C Serie 1/I C Serie 1/I con un bucle
C===================== C===========================
R = 1.0 R = 1.0
R = R + (1.0/2)
R = R + (1.0/3) DO I = 2, 10
R = R + (1.0/4) R = R + (1.0/I)
R = R + (1.0/5) ENDDO
R = R + (1.0/6)
R = R + (1.0/7) PRINT
*
, SERIE: , R
R = R + (1.0/8) STOP
R = R + (1.0/9) END
R = R + (1.0/10)
PRINT
*
, SERIE: , R
STOP
END
Imagine como sera el programa si quisi eramos el sumatorio de los 100 o 1000 primeros t erminos de la
serie. Para evitar la repetici on del mismo tipo de instrucciones, el FORTRAN tiene la instrucci on DO. Con
esta instrucci on el programa anterior se simplica como puede ver en el programa bucle1.f. La instrucci on
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 entesis?.
EDITE, COMPILE Y EJECUTE el programa bucle1.f. A continuaci on REEMPLACE la instruc-
ci on R = R + (1,0/I) por R = R + (1/I), El resultado es el mismo?, Por qu e?.
Si ahora queremos calcular la suma de los 100 primeros t erminos tenemos que editar el programa bucle1.f,
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 instrucci on READ (ver el programa
buble2.f). Esta instrucci on sirve para que el programa lea el contenido de una variable (en este caso la variable
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.
COPIE bucle1.f a bucle2.f utilizando la ins-
trucci on siguiente:
cp bucle1.f bucle2.f
EDITE bucle2.f y MODIFIQUELO de acuer-
do con la gura correspondiente a bucle2.f.
COMPILE Y EJECUTE el programa bucle2.
Observe la diferencia con respecto a bucle1.
C bucle2.f 16 Oct 97 { 1}
C Serie 1/I con un bucle y numero { 2}
C de terminos variables. { 3}
C=================================== { 4}
PRINT
*
, Numero de terminos: { 5}
READ
*
, N { 6}
R = 1.0 { 7}
{ 8}
DO I = 2, N { 9}
R = R + (1.0/I) {10}
ENDDO {11}
{12}
PRINT
*
, Terminos: ,N, {13}
+ Serie: ,R {14}
STOP {15}
END {16}
10 Introducci on a la Programaci on
ATENCI

ON: el car acter + o cualquier otro situado en la columna 6 indica que dicha lnea es continuaci on
de la lnea anterior (ver Fig. 7), por lo tanto, en el ejemplo anterior, las lneas 13 y 14 equivalen a una sola
instrucci on:
PRINT*, T erminos: ,N, Serie: ,R
A continuaci on, ELIMINE la instrucci on correspondiente al print*, Numero ... (lnea 5) y vuelva a
compilar y a ejecutar el programa bucle2.f. Cual es la diferencia?.
Figura 9: La instrucci on DO, bucle b asico.
1.5. Problemas Adicionales (opcionales)
[C] 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 an en la variable J (entera) como resultado de las siguientes operaciones:
a) J = M +N/K; b) J = C +B/K +N; c) J = M M/K K; d) J = N N K.
[C] Programe (sobre papel) las siguientes asignaciones aritm eticas:
a) AREA = 2PRsen

b) ARC = 2

y
2
+
4X
2
3
c) S =
cos
4
x
x
d) G =
1
2
log
1+senx
1senx
e) Z =
1

x
2
a
2

2a
2
3(

x
2
a
2
)
3
f) B =
e
x

x
2
cos

x/2+

2x
g) Y = (2)
1/2
x
x+1
e
x
[C] De los siguientes nombre, cu ales son validos como variables enteras, cu ales como variables reales y cu ales no
son validos como variables?. Siempre suponiendo que no hay ninguna instrucci on de especicaci on previa y con-
siderando la norma del FORTRAN 77.
H BETA ALPHA324 I IT* LARGA F(3)21 CHI COS
I 12G X+2 42G A*B GAMMA IBM360 COBOL AI F1.4
[C] La secuencia de Fibonacci (Leonardo de Pisa 1202) nos dara el crecimiento de pares de conejos sobre
sucesivos perodos de tiempo suponiendo que ning un conejo muere. Los dos primeros t erminos de la
serie de Fibonacci son ambos un uno. Los restantes t erminos de la serie se calculan sumando los dos
t erminos precedentes. Escriba un programa que lea un valor entero (NMAX) y que calcule y escriba los
primeros NMAX t erminos de la serie de Fibonacci.
[C] Escriba un programa en FORTRAN para calcular
1 2 + 3 4 + 5 6 +... 1000
Dpto. Qumica Fsica Aplicada, UAM 11
2. SESI

ON SEGUNDA
2.1. Decisiones (instrucci on IF)
En determinadas ocasiones un programa debe determinar por s mismo si realiza o no un conjunto de ins-
trucciones concretas. Para ello el FORTRAN utiliza la instrucci on IF que podemos traducir como el si con-
dicional. Si una determinada condici on es cierta, entonces, ejecuta la instrucci on (o conjunto de instrucciones).
Si no (else) es cierta, entonces hace otra cosa.
En la Fig. 10 se muestran tres formas de
Figura 10: Tres posibilidades de la instrucci on IF.
utilizar esta instrucci on. La expresi on l ogica o
condici on es una comparaci on de cuyo resul-
tado determina, el programa, si realiza o no las
instrucciones correspondientes. En el progra-
ma if1.f se utiliza la primera forma de la ins-
trucci on IF para evitar un error al hacer la raz
cuadrada de un n umero negativo, estudie este
programa (ver Tabla 2) y despu es comp arelo
con los programas if2.f e if3.f, que emplean la
segunda y tercera forma de la instrucci on IF,
respectivamente.
EDITE, COMPILE y EJECUTE los tres programas. Cuando ejecute los programas, el ordenador se
quedar a esperando a que introduzca los valores de A y B para leerlos, ya que es esta la primera instrucci on de
los tres programas. Teclee ambos valores separados por uno o varios espacios en blancos (barra espaciadora)
y pulso intro. No use las echas de los cursores para avanzar y/o retroceder.
C if1.f 17 Oct 97 C if2.f 17 Oct 97 C if3.f 17 Oct 97
C Instruccion IF C Instruccion IF C Instruccion IF
C====================== C ========================= C ========================
READ
*
, A, B READ
*
, A, B READ
*
, A, B
C = A - B C = A - B C = A - B
IF(C.LE.0.0) C = -1.0
*
C IF(C.LT.0.0) THEN IF(C.GT.0.0) THEN
D = SQRT(C) C = -1.0
*
C D = SQRT(C)
PRINT
*
, A, B, C, D PRINT
*
, N. complejo PRINT
*
, A, B, C, D
STOP ENDIF ELSE
END D = SQRT(C) D = SQRT(-1.0
*
C)
PRINT
*
, A, B, C, D PRINT
*
, N. complejo
STOP PRINT
*
, A, B, C, D,i
END ENDIF
STOP
END
Cuadro 2: Operadores (incluidos lo puntos) utilizados en las comparaciones.
Operador Signicado
.LT. Menor que
.LE. Menor o igual que
.EQ. Igual a
.NE. No igual a
.GT. Mayor que
.GE. Mayor o igual que
12 Introducci on a la Programaci on
2.1.1. Introducci on de datos por medio de un chero.
EDITE un chero llamado, por ejemplo, ifdatos.dat y escriba en el dos n umeros separados por varios
espacios en blanco; guarde el chero y ejecute las instrucciones siguientes:
./if1.exe <ifdatos.dat
./if2.exe <ifdatos.dat
./if3.exe <ifdatos.dat
Observa que cuando utilizamos el simbolo < los datos que nos piden los programas y que antes teniamos
que introducir con el teclado ahora los lee del chero ifdatos.dat. Tambi en podemos escribir el resultado en
un chero; ejecute la instrucci on:
./if3.exe <ifdatos.dat >ifsalida.sal
y edite el chero ifsalida.sal para ver el resultado.
Tenga cuidado de no confundir los smbolos < y > pues si se equivoca puede borrar el chero de
datos. Los datos editados en el chero de datos tiene que estar en la misma posici on (separados por espacios
y/o en diferentes lneas) que cuando los tecleamos en la pantalla. No tenemos que incluir comentarios en
estos cheros salvo que el programa fortran lea dichos comentarios. En la sesi on siguiente utilizaremos con
frecuencia la introducci on de datos por medio de un chero.
2.2. GOTO (la instrucci on que debemos evitar)
Observe el programa num1.f, en el introducimos nuevos elementos: la instrucci on GOTO y las etiquetas.
El GOTO (Fig. 11) signica vete a ..., en este caso vete a 10 y el 10 situado delante de la instrucci on
PRINT es una etiqueta.
Observe que las etiquetas tienen que ir siempre entre
las columnas 1 y 5 (ver Fig. 7). Este programa en
realidad es un modo alternativo de hacer un bucle
pero sin la instrucci on DO.
EDITE, COMPILE Y EJECUTE el
programa num1.f.
C num1.f 17 Oct 97
C Escribe numeros enteros del 1 al 100
C =====================================
N = 1
10 PRINT
*
, N
N = N + 1
IF(N .LE. 100) GOTO 10
STOP
END
Figura 11: Instrucci on GOTO.
Dpto. Qumica Fsica Aplicada, UAM 13
2.3. Ejercicio 1: Ecuaci on de segundo grado
Figura 12: Diagrama de ujo para resolver una ecuaci on de segundo grado.
Queremos resolvemos una ecuaci on de segundo grado:
a x
2
+ b x + c = 0
La soluci on (las races) de esta ecuaci on se obtienen resolviendo la ecuaci on siguiente:
x =
b

b
2
4ac
2a
Al resolver esta ecuaci on podemos encontrarnos con algunos problemas. El primer problema se da cuando
a = 0. En este caso no podemos emplear la ecuaci on anterior pues al dividir por cero el programa nos dar a un
error. Evidentemente, en este caso, la ecuaci on a resolver sera
bx + c = 0 ; x =
c
b
Para simplicar hemos supuesto que a y b no valen ambos cero a la vez. El segundo problema es el c alculo
de la raz. Si su argumento (b
2
- 4ac) es negativo la raz no tiene soluci on (dentro de los n umeros reales) y el
programa nos dara otro error. Conviene que nuestro programa compruebe estas posibilidades y evite los errores.
Como vemos la programaci on se va complicando y conviene estructurar los programas antes de escribirlos en
el ordenador. Para ello se utilizan los llamados diagramas de ujo. Un diagrama de ujo (no muy ortodoxo)
para resolver la ecuaci on de segundo grado se muestra en la Fig. 12.
Haga un programa que resuelva la ecuaci on de segundo grado. Ay udese en el diagrama de ujo y
las instrucciones dadas anteriormente. Utilice el programa para calcular las races de las siguientes
ecuaciones particulares.
OPCIONAL: Incluir en el programa el caso en el que la soluci on pueda ser n umeros complejos.
2,2x
2
4,5x + 0,5 = 0 ; Sol : 1,9275 y 0,1179
3,0x
2
+ 3,0x + 0,75 = 0 ; Sol : 0,5
1,0x
2
+ 2,0x + 1,5 = 0 ; Sol : 1 + 0,707i y 1 0,707i
14 Introducci on a la Programaci on
2.4. Problemas Adicionales (opcionales)
[C] Que valor quedar a almacenado en J al nal de las secuencias siguientes? (el tipo de las variables es el
correspondiente por defecto).
a) M = 9 b) DO K = 1, 4
J = 1 J = 0
2 CONTINUE DO N = 1, 5
J = J + 1 J = J + N
M = M / J ENDDO
IF (M.GT.0) GOTO 2 ENDDO
PRINT
*
, J PRINT
*
, J
[P] Un n umero primo es aquel que s olo es divisible por si mismo y por la unidad. Teniendo en cuenta que
si no existe ning un divisor de un n umero N entre 2 y (N)
1/2
entonces N es un n umero primo, escriba un
programa en FORTRAN para calcular y escribir los n umero primos menores de 1000.
[P] La media geom etrica de Nn umeros positivos es la n-esima raz del producto de los n umeros. Por ejemplo,
la media geom etrica de 0.5, 4.0 y 13.5 es (0.5*4.0*13.5)
1/3
= 3.0. Escribe un programa que pregunte
por los n umeros positivos y calcule su media geom etrica. El programa debe leer n umeros hasta que el
usuario introduzca un n umero negativo.
[P] El examen del espectro del atomo hidr ogeno muestra la existencia de series de lineas espectrales, las
frecuencias de las dos primeras series se calculan con las ecuaciones,
Serie de Lyman : f = c R
_
_
1
1
_
2

_
1
n
_
2
_
; n = 2, 3, 4, ... (ultravioleta)
Serie de Balmer : f = c R
_
_
1
2
_
2

_
1
n
_
2
_
; n = 3, 4, 5, ... (visible)
donde c es la velocidad de la luz (3.010
8
m/s) y R es la constante de Rydberg (1.096775810
7
m
1
).
Escribe un programa FORTRAN para generar las primeras frecuencias de estas dos series.
[P] Escriba un programa FORTRAN para calcular el
m aximo com un divisor (MCD) de dos n umeros
enteros (M y N) utilizando el algoritmo y dia-
grama de ujo de la gura y de acuerdo con las
siguientes etapas:
a) Hacemos que el n umero M sea mayor que N,
es decir si N es mayor que M intercambia-
mos los dos n umeros.
b) Calculamos el resto (R) de dividir M por N.
Si el resto (R) es cero entonces N es el
MCD.
c) Si el resto (R) no es cero damos a M el valor
de N y a N el valor de R y repetimos las
etapas b) y c).
Dpto. Qumica Fsica Aplicada, UAM 15
3. SESI

ON TERCERA
3.1. Manejo de Vectores y Matrices
Tenemos una tabla como la que mostramos en la Fig. 13 con valores X e Y. Para manejar una serie de
datos en forma de vector o matriz en FORTRAN se denen variables dimensionadas. En el programa dim1.f
lo primero que hacemos es denir o asignar (instrucci on DIMENSION) dos variables X y Y que tienen un
m aximo de 10 elemento cada una.
Antes de usar este tipo de variable dimensionada, es ne-
cesario denirlas al comienzo del programa para reser-
var espacio en la memoria del ordenador. El programa
lee los valores de X y de Y y los guarda en los vectores
X(I) e Y(I) (instrucci on READ). Despu es suma todos
los X y todos los Y. Le falta escribir los resultados.
EDITE, COMPILE Y EJECUTE el progra-
ma dim1.f. A

NADA las instrucciones nece-
sarias para obtener la salida de resultados.
Estudie con detenimiento el programa, si
no entiende algo pregunte a su profesor.
C dim1.f 17 Oct 97
C Autor: .....ps}}
C Suma los valores de X y de Y
C =============================
DIMENSION X(10), Y(10)
READ
*
, N
DO I=1,N
READ
*
, X(I), Y(I)
ENDDO
SX = 0.0
SY = 0.0
DO I=1,N
SX = SX + X(I)
SY = SY + Y(I)
ENDDO
STOP
END
3.2. Ejercicio 2: Ajuste de una recta por mnimos cuadrados
Para ajustar una serie de puntos X e Y a una
Figura 13: Tabla de datos X e Y, representaci on gr aca y recta
ajusta por mnimos cuadrados.
recta (y=a+bx) por mnimos cuadrados utilizare-
mos las ecuaciones siguientes. Primero denimos
S
X
, S
Y
, S
XX
y S
XY
como:
S
X
=
n

i=1
x
i
; S
Y
=
n

i=1
y
i
S
XX
=
n

i=1
x
2
i
; S
XY
=
n

i=1
x
i
y
i
Con estas deniciones, el corte en ordenadas
(a) y la pendiente (b) de la recta (y = a + bx)
vienen dados por:
a =
S
Y
b S
X
n
; b =
S
X
S
Y
n S
XY
S
X
S
X
n S
XX
La desviaci on cuadr atica media del ajuste se dene como:
=

n
i=1
(y
i
y

i
)
2
n 2
=

n
i=1
(y
i
(a +bx
i
))
2
n 2
=
_
SD2
n 2
; con SD2 =
n

i=1
(y
i
(a +bx
i
))
2
16 Introducci on a la Programaci on
Figura 14: Un ajuste de mnimos cuadrados se basa en minimizar la suma del cuadrado de la diferencias entre los puntos
que usamos en el ajuste (y
i
) y los puntos de la recta ajustada (y
i
).
y las incertidumbres del corte en ordenadas (
a
) y de la pendiente (
b
) se estima como:

a
=
_
S
XX
n S
XX
S
X
S
X
;
b
=
_
n
n S
XX
S
X
S
X
El coeciente de correlaci on se puede calcular con la expresi on siguiente:
r =
S
X
S
Y
n S
XY
_
(S
2
X
n S
XX
)(S
2
Y
n S
Y Y
)

1/2
; S
Y Y
=
n

i=1
y
2
i
[P] Utilizando las ecuaciones anteriores haga un programa que lea N puntos X e Y y ajuste una
recta por mnimos cuadrados.
En la Fig. 13 se dan los resultados para este ejemplo. Las incertidumbres de la pendiente y del
corte en ordenadas correspondientes a la ultima cifra signicativa se dan entre par entesis.
De modo similar se pueden denir matrices, por ejemplo con la instrucci on
DIMENSION ARRAY(10,10), B(5,5,5)
denimos una matriz llamada ARRAY de 10x10 elementos y otra llamada B de 5x5x5 elementos, sin embargo,
esto, como otras muchas instrucciones de FORTRAN, se sale del lmite de esta introducci on. Para su estudio le
remitimos a cualquier libro de FORTRAN.
3.3. Problemas Adicionales (opcionales)
[P] Edita y guarda los datos del ejercicio 2 en un chero. Despu es ejecuta el programa del ejercicio 2 de
modo que utilice los datos del chero.
[P] Escribe un programa que ordene de mayor a menor 25 n umeros. Lee los n umeros de un chero y al-
mac enalos en un vector A. El programa debe imprimir los n umeros ordenados del vector.
[P] Escribe un programa que intercambie las las 5 y 8 en una matriz de 10x10 leda de un chero. Escribe
la matriz resultante. Haz lo mismo pero intercambiando las columnas 3 y 7.
Dpto. Qumica Fsica Aplicada, UAM 17
4. CUARTA SESI

ON
4.1. Subprogramas
La realizaci on de programas complejos se suele ha-
Figura 15: Subprogramas y funciones.
cer dividiendo el programa en trozos cada uno de los
cuales realiza una tarea denida. Estos trozos es lo que
llamaremos subprogramas. A veces hay un conjunto de
instrucciones que se repiten en un mismo programa. Si
programamos estas instrucciones en un subprograma, el
programa principal unicamente tiene que llamar a di-
cho subprograma sin repetir las instrucciones. En reali-
dad, las funciones intrnsecas que hemos visto anterior-
mente son subprogramas realizados por el fabricante del
compilador.
La programaci on con subprogramas facilita el tra-
bajo del programador dando lugar a una programaci on
m as estructurada. En FORTRAN hay tres tipos princi-
pales de subprogramas:
1. Subrutina (SUBROUTINE). Cuando la tarea a realizar modica varias variables aunque tambi en se puede
usar cuando modica una sola variable o ninguna.
2. Funciones (FUNCTION). Cuando la tarea a realizar devuelve un unico valor escalar.
3. Funciones de proposici on. Se suele usar para la programaci on de peque nas formulas (no la vamos a usar
en esta introducci on). Esta forma esta obsoleta.
Estos subprogramas realizan tareas in-
Figura 16: Estructura de un subprograma y de un programa.
dependientes y pueden compartir valores
(argumentos) con el programa que les lla-
ma.
Como puedes ver en los ejemplos que
mostramos a continuaci on, el subprograma
va despu es del programa principal, aunque
puede ir antes e incluso en un chero apar-
te pero nunca puede ir intercalado entre
las instrucciones del programa principal (MAIN
en ingles).
En el caso de la subrutina, se las llama
con la instrucci on CALL seguida del nom-
bre de la subrutina y en entre par entesis se
escriben las variables o constantes (argu-
mentos) que va a utilizar el subprograma.
La llamada a una funci on se realiza del mismo modo que con las funciones intrnsecas (observa las di-
ferencias entre suma1.f y suma2.f). Cuando se efect ua la llamada a un subprograma, el programa principal
cede el control al subprograma, este realizar su tarea y al nal devuelve el control al programa principal en la
instrucci on siguiente al CALL. Las variables modicadas en los subprogramas y que est an compartidas con
el programa principal quedan tambi en modicadas en el programa principal. Hasta ahora hemos hablado de
18 Introducci on a la Programaci on
C suma1.f 17 Oct 97 C suma2.f 17 Oct 97 C media1.f 17 Oct 97
C Subrutina suma 2 numeros C Funcion suma 2 numeros C Calcula la media de los
C========================= C======================== C datos de un vector
C Lectura de datos ...... C Lectura de datos .... C ==========================
READ
*
, A, B READ
*
, A, B DIMENSION V(100)
CALL SUMA(A,B,C) C = SUMA(A,B) C Lectura de datos ......
PRINT
*
, A, B, C PRINT
*
, A, B, C READ
*
, N
CALL SUMA(A,C,D) D = SUMA(A,C) DO I=1,N
PRINT
*
, A,C,D PRINT
*
, A,C,D READ
*
, V(I)
STOP STOP ENDDO
END END C Llamo a la subrutina MEDIA
C ======================== C======================== CALL MEDIA (V,N,RMEDIA)
C Subrutina SUMA: C FUNCION SUMA: PRINT
*
, RMEDIA
C R3 = R1 + R2 C SUMA = R1 + R2 STOP
C ======================== C======================== END
SUBROUTINE SUMA(R1,R2,R3) FUNCTION SUMA(R1,R2) C ==========================
R3 = R1 + R2 SUMA = R1 + R2 C Subrutina MEDIA:
RETURN RETURN C Z es un vector
END END C M es el numero de
C elementos del vector
C RM es la media de los
C elementos
C ==========================
SUBROUTINE MEDIA(Z,M,RM)
DIMENSION Z(100)
SUM = 0.0
DO I=1,M
SUM = SUM + Z(I)
ENDDO
RM = SUM / M
RETURN
END
programa principal y subprograma, sin embargo, un subprograma puede a su vez llamar a otros subprogramas,
siempre que la llamada no sea recursiva, es decir un subprograma no puede llamarse a si mismo.
Un subprograma comienza con las instrucciones SUBROUTINE o FUNCTION seguido del nombre y entre
par entesis los argumentos (ver Fig. 16). Los argumentos tienen que ser los mismos en la llamada del programa
principal y en el subprograma y, por tanto, aunque pueden cambiar de nombre no pueden cambiar de tipo
(reales, enteros, caracteres, ...) ni de orden, es decir en el programa suma1.f A, B y C en la primera llamada a
la subroutina son en la subroutina R1, R2 y R3, respectivamente.
Las variables dimensionadas hay que volver a denirlas en los subprogramas (DIMENSION). Los subpro-
gramas terminar con la instrucci on RETURN que devuelve el control al programa principal (o al subprograma
que llam o a la subrutina).
Edita compilar y ejecuta los programas suma1.f, suma2.f y media1.f, estudia cuidadosamente
como funcionan y las diferencias que hexisten entre ellos.
Hay otra forma de compartir argumentos entre el programa principal y los subprogramas y viceversa, es la
instrucci on COMMON. La declaraci on COMMON sit ua las variables en una posici on de memoria especial a
la que tienen acceso las subrutina que contengan el mismo COMMON. Cada COMMON suele llevar asociado
un nombre aunque tambi en esta el llamado black COMMON que no tiene nombre. Por ejemplo:
COMMON/NOTAS/ JUN(25),SEP(5)
es un COMMON de nombre NOTAS que guarda las variables JUN(25) y SEP(25) en una posici on de memoria
a la que pueden acceder las subrutina que contengan el COMMON/NOTAS/ ...
Un ejemplo de black COMMON sera:
COMMON ARRAY(225,2), VEC(7), RR
Dpto. Qumica Fsica Aplicada, UAM 19
4.2. Ejercicio 3: Integraci on num erica
El valor de una integral denida
Figura 17: Representaci on gr aca de la integral de una funci on.
_
b
a
f(x)dx
viene dado por el area limitado por la curva y=f(x)
y el eje de abcisas (x) entre x=a y x=b (Fig. 17).
Una estimaci on del area se puede realizar di-
vidiendo la supercie total en peque nas porciones
y sumado el area de cada porci on (Fig. 18). En el
m etodo trapezoidal, la supercie de cada porci on
se aproxima a un trapecio y por lo tanto su area
viene dado por la ecuaci on
Figura 18: Integral o area como suma del area de los trapecios
A
i
=
h
2
[f(x
i
) +f(x
i1
)]
Sumando el area de todas las porciones o trapecios,
en este caso para un ejemplo con N (n
o
de trape-
cios) igual a 6, tenemos:
I
T
=
h
2
[f(a) +f(x
1
)] +
h
2
[f(x
1
) +f(x
2
)]
+
h
2
[f(x
2
) +f(x
3
)] +
h
2
[f(x
3
) +f(x
4
)]
+
h
2
[f(x
4
) +f(x
5
)] +
h
2
[f(x
5
) +f(b)]
obtenemos la ecuaci on que nos da la integral aproxi-
mada:
I
T
=
_
b
a
f(x) dx =
h
2
_
f(a) + 2,0
n1

i=1
f(x
i
) + f(b)
_
(1)
[P] Escriba un programa FORTRAN para integrar num ericamente por el m etodo de los trapecios. Aplicar
el programa para calcular la integral siguiente:
I
T
=
_
2
0
(6x
5
7) dx
Sigua el esquema siguiente:
1. Organizar la lectura de datos (a, b y n).
2. Calcular h como (b-a)/n.
3. Calcular los valores de f(a) y f(b) llamando a la funci on (ver punto 6).
4. Calcular la parte correspondiente al sumatorio. SUM =

n1
i=1
f(x
i
) con x
i
= a + ih.
5. Aplicar la Ec. (1) y escribir los resultados.
6. Programar la funci on f(x) = 6x
5
- 7 como un subprograma de tipo FUNCTION.
20 Introducci on a la Programaci on
4.3. Problemas Adicionales (opcional)
[C] Un m etodo usualmente empleado para resolver ecuaciones de la forma f(x) = 0 es el m etodo iterativo
de Newton, el cual se dene por
x
n+1
= x
n

f(x
n
)
f

(x
n
)
(2)
Donde f(x
n
) es la derivada de la funci on en x
n
. Escribe un programa que resuelva la iteraci on arriba indi-
cada. f y f debes programarlas como funciones (FUNCTION) separadas. Aplica el programa a resolver
una ecuaci on de la forma
x
2
a = 0 (3)
para un valor de a cualquiera.
[C] Escribe un programa para calcular el valor del seno de un angulo (en grados) utilizando la aproximaci on
iterativa siguiente:
SENO(X) = X
X
3
3!
+
X
5
5!

X
7
7!
+ . . .
donde X en la ecuaci on anterior esta en radianes. Calcula el seno de 140
o
con 5, 10 y 15 t erminos de
la serie anterior. (Por supuesto no se puede utilizar las funci on intrnseca SIN del FORTRAN, aunque si
quieres puedes utilizar la funci on DACOS para calcular ).
[C] La formula de Stirling nos proporciona un modo alternativo de calcular el factorial de N (N!). La formula
es: N! =

2NN
N
exp(N) . Escribe un programa que use la formula de Stirling para calcular el
factorial desde N igual a 1 hasta 20. Comprueba la precisi on del resultado comparando con el factorial
calculado al modo tradicional.
[C] Escribir un programa para calcular la raz cuadrada de un n umero x utilizando la siguiente formula:
b =
1
2
_
x
a
+a
_
donde b es una aproximaci on mejor que a a la raz cuadrada de x. La primera aproximaci on se debe
tomar como (1/2)x y el procedimiento se debe repetir hasta que la diferencia entre a y b sea menor de
10
6
.

You might also like