Notas de programación en Fortran

Anuncio
Astronometrı́a 2011
Nociones de Programación
1. Introducción
En esta materia usaremos la computadora como herramienta para resolver ciertos problemas de manera
eficiente y rápida. Las computadoras son aparatos electrónicos que pueden ser programados para ejecutar
algoritmos a gran velocidad, y tantas veces como se quiera. Los algoritmos son secuencias ordenadas de
pasos lógicos con los cuales es posible obtener ciertos resultados o estados finales, a partir de un conjunto
de datos o estados iniciales. Nótese que los algoritmos aparecen muy frecuentemente en la vida cotidiana:
una receta de cocina, el procedimiento para tomar un colectivo, o el procedimiento para atarse los cordones
de las zapatillas son todos algoritmos, conjuntos de acciones secuenciales con un orden lógico que deben
ser ejecutadas para obtener algún resultado.
Para plantear un algoritmo que funcione bien y sea eficiente, hay que conocer en detalle todas las caracterı́sticas del problema y todos los casos posibles que puedan presentarse. Para ejecutar un algoritmo,
no es necesario conocer la naturaleza del problema que se está resolviendo, sino simplemente limitarse a
seguir adecuadamente las instrucciones. Para conducir un vehı́culo, por ejemplo, no hace falta conocer el
funcionamiento del motor ni los detalles mecánicos, basta con ejecutar ciertas reglas de manera adecuada
(para doblar hacia la derecha hay que girar el volante en sentido horario, etc. . . ). Sin embargo, la construcción de un vehı́culo supone resolver muchos problemas, empezando por el de obtener energı́a mecánica (que
se traduce en movimiento) a partir de una fuente de energı́a quı́mica. Algunas máquinas son capaces de
ejecutar algoritmos, con la ventaja de que pueden hacerlo mucho más rápido que el hombre. Para escribir
un algoritmo y transmitirlo al ejecutor, hace falta un lenguaje (por ejemplo, castellano, inglés, un planito,
un esquema, etc . . . ). Las computadoras necesitan lenguajes especiales, que se usan para programar a
la máquina, por medio de un algoritmo, para que realize determinada tarea. Éstos lenguajes se llaman
lenguajes de programación, que incluyen un conjunto de reglas para codificar instrucciones en una computadora. Cuando un algoritmo se escribe en algún lenguaje de programación para que sea ejecutado por
una computadora, se lo llama programa.
Hay una gran variedad de lenguajes de programación, que se pueden clasificar en lenguajes de bajo o de alto
nivel. Los lenguajes de bajo nivel implican conocer exactamente la arquitectura del procesador y administrar
directamente los contenidos de la memoria. Los de alto nivel se pueden usar más fácilmente ya que incluyen
una serie de utilidades que se pueden aplicar sin necesidad de conocer el hardware. Permiten además un
alto grado de portabilidad, es decir, producen programas que pueden ejecutarse en distintas máquinas que
funcionan bajo distintas plataformas, y producen los mismos resultados, gracias a la independencia entre
éstos lenguajes y el hardware. Por ejemplo, un lenguaje de alto nivel permite calcular el coseno de 2 radianes
y asignarlo a la variable y escribiendo algo parecido a: y=cos(2), mientras que en un lenguaje de bajo
nivel, hay que arreglárselas para calcular el resultado de cos(2) manejando el contenido de las casillas de la
memoria almacenado en formato binario. Ejemplos de lenguajes de alto nivel son BASIC, PASCAL, C++ y
FORTRAN.
Para que una computadora pueda ser utilizada para resolver un problema, hay que proceder como sigue:
1
Nociones de programación
1. Entender el problema.
2. Plantear un algoritmo.
3. Escribir un programa.
4. Cargar el programa en la computadora.
5. Ejecutar el programa.
6. Corroborar el buen funcionamiento del programa (debuging)
Todos estos pasos son importantes, si se escribe el programa salteando las partes 1 y 2, es muy probable
que aparezcan problemas en algún momento. Para plantear el algoritmo hay varios métodos, por ejemplo
los diagramas de flujo y el pseudocódigo, que veremos más adelante. A la hora de hacerlo, hay que
tener en cuenta todas las posibles situaciones que puedan aparecer y que puedan dar lugar a problemas.
El ultimo punto puede ser el más difı́cil si no se trabaja con cuidado desde el principio. Si el programa no
compila correctamente, debe revisarse el paso 3 y corregir los problemas de sintaxis. Si compila pero no se
ejecuta correctamente o no da los resultados esperados, se debe volver al paso 2, o aún, al principio.
⊲ e.g./ Para resolver una ecuación de segundo grado de la forma:
a · x2 + b · x + c = 0
primero hay determinar si tiene solución y cómo se llega a la misma. Sabemos que se puede
utilizar la siguiente fórmula:
√
−b ± 2 b2 − 4 · a · c
x± =
2·a
entonces, para resolver una ecuación de este tipo con un programa, bastarı́a con enseñarle a
la computadora a realizar ese cálculo, ingresar los valores a, b, c y mostrar el resultado. Pero
ciertas combinaciones de los valores de a, b y c pueden dar lugar a problemas. Por ejemplo, si
a = 0, la máquina no sabrá cómo hacer una división por cero, y el programa no podrá llegar al
resultado. Asi mismo, si el discriminante de la raı́z es negativo, habrá que enseñarle a la máquina
a resolverlo.
Una vez que se tiene pleno conocimiento del problema que se quiere resolver, el algoritmo debe ser diseñado
de tal forma que contemple todas las posibles fuentes de error. Para planear los pasos lógicos que hay que
seguir en la resolución del problema, se pueden utilizar, por ejemplo, pseudocódigos o diagramas de flujo.
Para escribir un programa, hay que utilizar una sitaxis determinada que depende del lenguaje de programación que se use.
⊲ e.g./ Para mostrar un resultado en la pantalla, contenido en la variable a, habrá que escribir
una instrucción de entrada/salida según sea el lenguaje que se estén usando:
BASIC
FORTRAN
C++
etc.
2
print a
write(*,*) a
cout<< a
Astronometrı́a 2011
En la mayorı́a de los casos, los programas se escriben en archivos de texto. Los procesadores de texto más
comunes de las plataformas UNIX son vi, emacs, joe, y otros. Todos los mencionados se distribuyen bajo
la licencia de código abierto, es decir, se pueden descargar y usar gratuitamente.
Una vez que se escribió el programa, hay que cargarlo a la computadora en un formato que sea entendible por
la máquina. Este paso se llama compilación. Para compilar un programa, hay que ejecutar otro programa
que se llama compilador.
1.1. Elementos de un programa
Un programa es un conjunto de instrucciones, que pueden ser de diferentes tipos:
asignación
E/S (entrada/salida)
selección
repetición
Las instrucciones están relacionadas con los datos, que a su vez pueden también ser de distintos tipos:
aritméticos
alfanuméricos
lógicos
los datos se almacenan en la memoria de la computadora usando variables de los tipos correspondientes,
y las instrucciones se ejecutan por medio de expresiones que involucran operadores y operandos.
⊲ e.g./ Se quieren sumar dos números. Se necesitan entonces tres variables aritméticas para
almacenar los dos números y su suma. Como los números son reales, también las variables (se
llaman de “punto flotante” por la manera en que almacenan la información)
real :: a
real :: b
real :: suma
La operación de la suma es para el programa una instrucción, en este caso, de asignación. La
instrucción se escribe en el código como una expresión, que debe cumplir ciertas normas para
que el compilador la entienda. La expresión de asignación para hacer la suma es:
suma = a + b
Los valores o datos que se almacenan en a y b pueden ser por ejemplo 3,1415 y 2,7183, pero están
guardados como sucesiones de ceros y unos en cierta posición de la memoria que el programa
encuentra con los nombres de las variables.
3
Nociones de programación
1.2. Diseño de programas
Existen diferentes técnicas de programación, con distinto grado de complejidad, dificultad y seguridad. En
general se puede hacer un programa simple (y no se pretende en este curso ir más allá de lo “simple”) sin
necesidad de conocer todas estas técnicas. Sin embargo, puede ayudar tener una idea de cuáles son las
cosas que se tienen en cuenta a la hora de escribir un programa.
Diseño descendente. Consiste es escribir una serie de instrucciones, una después de la otra, que se
ejecutarán en orden. Si el programa es simple, está técnica es suficientemente buena.
Refinamiento. Si el programa debe ser largo o más complicado, se puede recurrir a ésta técnica, en
donde se bosquejan a grandes rasgos cuáles son las operaciones que se quieren realizar, y después se
procede a desarrollar en detalle cada parte por separado.
Programación estructurada. Se basa en una serie de reglas que le dan al programa cierta rigidez,
pero lo hace más fácil de entender.
Programación orientada a objetos. Es tan difı́cil como suena . . .
Otras. . .
También se pueden usar herramientas que ayuden a visualizar el problema, y representarlo suscintamente
sin necesidad de escribir código. Dos de estas herramientas son el “pseudocódigo” y los “diagramas de
flujo”.
En el pseudocódigo se escriben en lenguaje humano todos los pasos necesarios para resolver el problema.
Después se ”traduce” al lenguaje de programación.
⊲ e.g./ Para resolver la ecuación de segundo grado, el pseudocódigo puede ser:
Leer los datos: coeficientes de la ecuación a, b y c
Si a=0, hay una sola solución que es −c/b, mostrar los resultados y terminar.
Calcular el discriminante: b2 + 4ac
Si el discriminante es negativo, cambiarle el signo (soluc. imaginaria).
Calcular la raı́z cuadrada del discriminante (cambiado de signo de ser necesario)
Calcular uno de los resultados, con el signo +
Calcular otro de los resultados, con el signo –
Mostrar los resultados y terminar.
Cada persona tiene una forma particular de programar, de modo que tanto el algoritmo como el programa
se pueden hacer de muchas maneras, siempre que funcione y de los resultados correctos. Una vez escrito
el pseudocódigo, se traduce al lenguaje de programación que se esté utilizando:
4
Astronometrı́a 2011
⊲ e.g./ Si se usa FORTRAN, teniendo en cuenta que el producto se hace con * y la potenciación
con **,
Leer los datos
Calcular el discriminante
−→
−→
read(*,*) a,b,c
disc = b**2-(4*a*c)
Otra forma de hacer el algoritmo, es utilizando diagramas de flujo, donde cada paso lógico se representa
con una figura geométrica:
Calculos y funciones
Yes
@
@
@No
Desición
@
@
@
Principio o final del programa
Entrada o salida de datos
⊲ e.g./ El gráfico un diagrama de flujo de un algoritmo para calcular raı́ces de una ecuación de
segundo grado.
Inicio
?
Programa para resolver la
ecuación de segundo grado:
Leer a, b, c ax2 + bx + c = 0
?
H
H
HH
H
NOH
a=0
SI
HH
H
H
?
H
HH
H
NO
b2 − 4ac < 0 H
HH
HH H SI
?
b2 − 4ac = −(b2 − 4ac)
-x =
6 1,2
√
−b± b2 −4ac
2a
?
raices: x , x
1
2
-
?
Fin
x=-c/b
?
raiz = x
?
Fin
1.3. Estructura general de un programa
Los programas de FORTRAN tienen dos partes principales:
5
Nociones de programación
2 Declaración de variables.
Cuando se declara una variable, se esta reservando un espacio en la memoria, con un determinado
nombre, para almacenar datos de cierto tipo. En los lenguajes de alto nivel, el acceso a los datos y
resultados ubicados en la memoria se hace a través de las variables. Declarar una variable significa
indicar a qué tipo de dato pertenece y su nombre.
Hay cinco tipos de variables: los tres tipos numéricos (enteras, reales y complejas); y los dos tipos
no–numéricos (alfanuméricas y lógicas). Las mismas se declaran usando las instrucciones integer,
real, complex, character y logical.
⊲ e.g./
! Declaracion de variables: entera, real y alfanumerica.
! Los comentarios comienzan con "!"
integer :: i, j, k
real
:: a, b, c(10)
! c es un vector
character*10 :: nombre
! almacena 10 caracteres
2 Parte ejecutable.
En esta parte se escriben las fórmulas (expresiones aritméticas), se hacen los cálculos y se escriben
los resultados.
⊲ e.g./
do i=1,10
xmedio = xmedio + valor(i)
if(xmedio>100.) write(*,*) ’limite excedido...’
enddo
La parte ejecutable de un programa se puede escribir combinando tres tipos de estructuras:
Secuencias
Repeticiones
Condiciones
Las primeras consisten simplemente en una secuencia de acciones, una después de la otra. Las repeticiones
se realizan cuando un cálculo se debe realizar un gran número de veces, y las condiciones establecen
bifurcaciones en la estructura lógica del algoritmo.
El método de programación que utiliza solamente estas tres estructuras es la programación estructurada.
En general, al programar de esta forma se ahorran muchas lı́neas, pero se puede volver complicado. No es
necesario usar esta técnica, y mucho menos en los primeros programas. Para facilitar la estructura lógica
de la escritura, se puede utilizar el comando GOTO (aunque no es recomendable).
En FORTRAN, el comando IF se utiliza para establecer condiciones, mientras que el comando DO permite
repeticiones.
6
Astronometrı́a 2011
2. FORTRAN 90
Las notas que siguen hacen referencia al lenguaje de programación FORTRAN90. El número indica la
versión, es decir, da idea del estado de evolución del lenguaje. Existen varias versiones de FORTRAN (que
significa FORmula TANslation) y además distintas empresas desarrollan y venden sus propias versiones de
los compiladores. Aún ası́, existe un estándard que dice que todos los compiladores de FORTRAN deben
satisfacer ciertas condiciones. Por ejemplo, si se escribe en un programa:
k = i+j
write(*,*) ’el resultado es ’, k
el resultado será el mismo para todos los compiladores de una versión dada (que satisfacen el estándard de
esa versión), mas allá de que haya sido fabricado por las empresas INTEL, Lahey o Portland. El FORTRAN90
satisface el estándard que fue publicado cerca de 1990, y lo mismo pasa con las versiones 66, 77, 95 y
2000.
2.1. Algunos Comandos
Algunos comandos básicos de FORTRAN son: read, write, if-else-endif, do-enddo, select case-end
select, cycle, exit, ... Desde luego hay muchos mas, pero con estos se pueden hacer programas
básicos. Una vez que uno se familiariza con estos comandos, se puede consultar cualquier manual o libro
de programación en este lenguaje.
READ
Comando para leer datos, la sintaxis es:
read(<unidad>,<formato>) <variables o expresiones>
El formato debe estar de acuerdo con el tipo de variable. Por ejemplo, el número π se puede escribir
aproximadamente 3,141592654 ó 3,14159, o bien 0,316E01.
Para empezar basta usar siempre el formato asterisco, que emplea tantos decimales como sean posibles.
La unidad puede ser el teclado (opción por defecto: asterisco) o un archivo abierto previamente y asignado
a alguna unidad (ver comando OPEN)
⊲ e.g./
read(*,*) a
!lee la variable ’’a’’ por teclado.
read(80,*) alfa, delta !lee alfa y delta de la unidad 80
WRITE
Comando E/S para escribir en la pantalla o en un archivo. La sintaxis es:
7
Nociones de programación
write(<unidad>,<formato>) <variables o expresiones>
En este caso la unidad de salida por defecto (asterisco) es la pantalla. El formato debe estar de acuerdo
con el tipo de variable que se muestra.
⊲ e.g./ Supongase que la variable “a” almacena el valor del numero pi. En los comentarios se
muestran las salidas correspondientes:
write(*,*) ’resultado:’, a
!resultado: 3.141593
write(*,’(f6.4,x,f12.8)’) a, b !3.1415
3.14159274
OPEN/CLOSE
Son estos comandos que se utilizan para abrir y cerrar archivos. Cada archivo debe ser asignado a una
unidad, que se utiliza después como referencia para los comandos de E/S. La sitaxis básica es:
⊲ e.g./ Se quieren leer los datos almacenados en dos columnas, en el archivo data.dat.
Supongamos que el archivo tiene 100 lineas:
integer :: i
real,dimension(100) :: x, y
open(unit=80,file=’data.dat’,status=’unknown’)
do i=1,100
read(80,*) x(i), y(i)
enddo
close(80)
Salida con formato
Los descriptores de formato que se muestran en la tabla se usan para darle formato a la salida (hay otros).
Si el número excede el formato especificado, los resultados no serán los esperados, por ejemplo, no se puede
escribir el numero 12345678 con el formato i3.
descriptor de formato
tipo de variable
uso
ejemplo
a
i
f
x
alfanumérica
entera
real
espacio
An
In.n
Fn.n
Xn
a8−→abcabcab
i4−→1024
f7.3−→888.000
x2−→dos espacios
Para escribir variables reales, el segundo número da la cantidad de posiciones decimales (mantisa).
2.2. Operadores matemáticos
8
Astronometrı́a 2011
Las operaciones matemáticas se realizan con instrucciones de asignación usando los sı́mbolos
de la tabla. Además los compiladores incluyen
las funciones mas comunes, como sin, cos, tan,
exp, log, log10, . . .
+
−
∗
/
∗∗
//
suma
resta
producto
división
potencia
concatenación
⊲ e.g./
a=2.+q*r
x=10./2.
nombre=’Pepe ’//’Lopez’
sigma=(x(i)-xmed)**2.+sigma
Siempre hay que tener cuidado con el orden en el cual se colocan los paréntesis y se realizan las operaciones.
Los operadores se ejecutan en el siguiente orden:
1. Expresiones entre paréntesis.
2. Potencias.
3. Multiplicaciones y divisiones.
4. Sumas y restas.
⊲ e.g./ Las siguientes expresiones son todas distintas. Si x=3.14,
y
y
y
y
y
y
=
=
=
=
=
=
2* x**2
2*(x**2
2* x**2
2* x**2
(2*x)**2
2*(x**2
+
+
+
+
+
+
5 *
5 *
5 *
5 *
5 *
5)*
(log(x)
(log(x)
(log(x)
(log(x
(log(x
(log(x
+3 * x
+3 * x
+3 *(x
+3) *x
+3) *x
+3) *x
-8.234)
-8.234))
-8.234))
-8.234)
-8.234)
-8.234)
!
!
!
!
!
!
y=31.37032
y=43.02143
y=-50.96968
y=7.041951
y=26.76115
y=-75.35155
2.3. Expresiones lógicas y de comparación
Las expresiones lógicas son muy utilizadas cuando el
algoritmo plantea diversas posibilidades. En las expresiones lógicas se utilizan los operadores relacionales
que se muestran en la tabla, que permiten comparar
conjuntos ordenados como los enteros y los reales. Los
operadores lógicos se usan para escribir expresiones
lógicas un poco mas complicadas.
operadores relacionales
=/
<
<=
6=
<
≤
=
>
>=
y
.or.
operadores lógicos
.and.
=
>
≥
o
9
Nociones de programación
⊲ e.g./ Los siguientes ejemplos son expresiones lógicas que pueden dar por resultado verdadero
o falso (.true..or..false.), donde c debe ser una variable lógica.
sigma > 0.2 .and. res /= 0.
(2*x+3) > y0
(x**2.) < 3 .or. (x**2.) > (-3.)
2.4. Estructuras de control
Existen 3 tipos: IF, DO, CASE
Un bloque es un conjunto de sentencias contenidas en una estructura de control.
No se puede transferir el control hacia en interior de un bloque, pero si se puede salir de una estructura
de control en cualiquier momento.
Las estructuras de control pueden ser anidadas y etiquetadas.
En los anidamientos, cada estructura solo puede tener otras estructuras completas entre sus bloques
de acciones.
IF - ELSE - END IF
Algunas acciones sólo deben ser ejecutadas bajo ciertas condiciones. En tales casos se utilizan expresiones
condicionales, el comando IF es la más sencilla. La sintaxis de este comando es, en el caso más sencillo:
IF(expresion) <accion>
Si la expresión entre paréntesis es verdadera, o es una variable lógica con valor .true., entonces ejecuta
la acción. Notar que el bloque de acciones no debe exceder una lı́nea. El comando IF también se puede
escribir en forma completa, es decir en función del valor lógico de un conjunto de expresiones ejecuta
diferentes bloques de acciones (los corchetes indican que las expresiones en el interior son opcionales):
[etiqueta:] IF(expresion1) THEN
bloque de acciones 1
ELSEIF(expresion2) THEN [etiqueta]
bloque de acciones 2
[ELSE [etiqueta]
bloque de acciones 3]
ENDIF [etiqueta]
10
Astronometrı́a 2011
⊲ e.g./ Ejemplos de aplicación de este comando son los siguientes:
if(nota > 4) then
write(*,*) ’Estas aprobado’
else
write(*,*) ’Segui participando...’
end if
if(disc < 0.) disc = -disc
DO - END DO
El comando DO-ENDDO permite la repetición de una acción. Es una estructura repetitiva recibe el nombre
de bucle o lazo, en estas estructuras las mismas acciones o iteraciones se ejecuta un número determinado
de veces. Se escribe de la siguiente manera:
[etiqueta:] DO [clausulas de control]
bloque de acciones
...
END DO [etiqueta]
Las expresiones son conjuntos o partes de programa, mientras que las condiciones indican el número de
pasos o número de veces que se va a ejecutar el lazo. En general, cada vuelta del lazo está caracterizada
por un valor de una variable entera, entonces se llama “lazo controlado por conteo”, pero también se puede
dejar el lazo abierto y salir con una expresión de control.
• Lazo controlado por conteo
N=
f in + paso − inicio
paso
[name:] DO cont=inicio,fin[,paso]
bloque de acciones
END DO [name]
N = número de iteraciones.
[name:] DO
• Lazo infinito
bloque de acciones
if(condicion) exit
END DO [name]
⊲ e.g./ Veamos cómo se puede hace un cálculo simple: el promedio de un conjunto de números
almacenados en el vector x.
x=
N
1 X
·
xi
N i=1
xmed = 0.
do i = 1, nmax
xmed = xmed + x(i)
end do
xmed = xmed / nmax
11
Nociones de programación
Transferencia de control
En cualquier parte de un programa, dentro de alguna estructura de control, es posible salir de esa estructura
usando comandos de control de flujo. Para terminar lazos infinitos o para terminar cualquier iteración se
puede utilizar el comando EXIT.
[name:] DO
[clausulas de control]
bloque de acciones
...
if(condicion) EXIT name
END DO [name]
El uso de estos comandos requiere el uso de etiquetas, que son nombres de las estructuras que permiten
identificarlas. Por ejemplo:
i = 0
infinito: do
i = i + 1
otro: do j=1,20
if(vector(j+i==0)) exit infinito
enddo otro
enddo infinito
También se puede saltar un paso de la iteración y pasar directamente al siguiente con el comando CYCLE.
[name:] DO
[clausulas de control]
bloque de acciones
...
if(condicion) CYCLE name
END DO [name]
Cuando no se especifica ninguna etiqueta, se aplican a la estructura más interior.
Estructuras anidadas
Todas las estructuras de control pueden ser anidadas, es decir, colocadas una dentro de otra.
Condición: Los bloques internos deben estar completamente contenidos dentro de los bloques externos.
El número máximo de niveles de anidamiento depende del compilador.
12
Astronometrı́a 2011
[bloque1:] DO [clausulas de control]
bloque de acciones
...
[bloque2:] DO [clausulas de control]
bloque de acciones
...
if(condicion) CYCLE bloque1
END DO [bloque2]
END DO [bloque1]
Como vimos, EXIT y CYCLE permiten salir rápidamente de una estructura complicada, simplemente utilizando la etiqueta de la estructura más externa.
SELEC CASE - END SELECT
Este comando reemplaza a una serie de IF-THEN-ELSE IF repetidos. La sintaxis es:
[name:] SELECT CASE ( expresion )
CASE (valor1)
bloque de acciones
CASE (valor2)
bloque de acciones
...
[CASE DEFAULT
bloque de acciones]
END SELECT [name]
El resultado de “expresion” puede ser CHARACTER, LOGICAL, o INTEGER, pero ”valor#”debe ser del mismo
tipo. Además puede ser una combinacion de:
Una variable sola.
min:max Todos los valores entre min y max
min: Cualquier valor mayor que min
:max Cualquier valor menor que max
Los rangos de los valores de las sentencias deben ser disjuntos.
13
Nociones de programación
⊲ e.g./ En que dia de la semana nacı́?
SELECT CASE ( modulo(DJ_Nacimiento,7) )
CASE(0)
write(*,*) ’Ud. nacio un LUNES’
CASE(1)
write(*,*) ’Ud. nacio un MARTES’
CASE(2)
write(*,*) ’Ud. nacio un MIERCOLES’
CASE(3)
write(*,*) ’Ud. nacio un JUEVES’
CASE(4)
write(*,*) ’Ud. nacio un VIERNES’
CASE(5)
write(*,*) ’Ud. nacio un SABADO’
CASE(6)
write(*,*) ’Ud. nacio un DOMINGO’
END SELECT
2.5. Un programa completo y compilación.
⊲ e.g./ Veamos un programa completo para calcular el promedio de 1000 números leidos de
un archivo llamado data.dat. Primero se debe abrir un archivo de texto llamado prom.f90 y
escribir lo siguiente:
program Calc_Promedio
! declaraciones
implicit none
integer :: i
real
:: x, xmed
! parte ejecutable
open(80,file=’data.dat’)
xmed = 0.
do i=1,1000
read(80,*) x
xmed = xmed + x
enddo
xmed = xmed / 1000.
write(*,*) ’El promedio es: ’,xmed
close(80)
end program Calc_Promedio
Comentarios:
14
Astronometrı́a 2011
implicit none significa que todas las variables deben ser declaradas. Se puede hacer el programa
sin declarar variable alguna siguiendo las convenciones de la versión 77.
Resulta conveniente dejar espacios para que el programa se pueda leer más facilmente.
El nombre en “program” es opcional, y no es necesario que coincida con el nombre del archivo.
Este archivo debe ser guardado con la extensión “f90”.
Compilación
para compilar el programa escrito en el archivo de texto prom.f90 y ejecutarlo se procede:
[student@hal]#ifort prom.f90 -o prom.exe
[student@hal]#./prom.exe
El archivo data.dat debe estar en el mismo directorio.
15
Descargar