Fortran
Fortran
Fortran
LENGUAJE FORTRAN.
ESTRUCTURAS Y SENTENCIAS
BÁSICAS
4.1. Introducción al lenguaje Fortran
4.2. Estructura de un programa
4.3. Variables y constantes
4.4. Tipos de datos simples
4.5. Operadores y expresiones
4.6. Tipos de sentencias
4.7. Sentencias de asignación
4.8. Sentencias de control: alternativas, repetitivas
4.9. Sentencias de entrada y salida
1. Introducción a Fortran
• FORTRAN 90
» Formato línea libre
» Datos tipo texto
» Sentencias de control mejoradas
» Admite recursividad
– Nosotros no lo vamos a estudiar
» Admite estructuras de datos complejas (registros)
– Tampoco lo estudiamos
• Alfabeto de Fortran
» Alfabeto = símbolos que utiliza
» Letras
– exceptuando ñ y letras con tilde, aunque se pueden usar en
las líneas de comentarios
» Números Nombre Carácter
» Caracteres especiales Espacio
= Signo igual
+ Signo más
- Signo menos
* Asterisco
/ Slash
( Paréntesis de apertura
) Paréntesis de cierre
, Coma
. Punto
'o" Apóstrofe o comillas
& Continuación línea
C, *, ! Comentario
1. Introducción a Fortran
» Columna 1:
– Identificador de Línea de comentarios
– C o *, solo aparece en las líneas que sean comentarios
– Los comentarios sirven para documentar el programa
– El compilador ignora lo que sigue a un comentario
» Columnas 1 a 5:
– Etiqueta (opcional)
• (sigue)
» Columna 6:
– Columna de continuación de una línea previa (opcional)
– Se usa para continuar sentencias que no caben en una
línea
– Según el compilador acepta unos caracteres u otros (&, +,
* ), incluso cualquiera distinto de cero o espacio
» Columnas 7 a 72. Codificación de la sentencia
– Se ignoran los espacios en blanco que puedan existir
entre la columna 7 y el comienzo de la sentencia
» Columnas 73 a 80.
– Numero de secuencia (opcional)
– raramente usado actualmente
1. Introducción a Fortran
• SENTENCIAS
» Tipos de sentencias
– Ejecutables
– especifican acciones
– modifican contenidos, alteran el orden de ejecución, ..
– No ejecutables
– describen características
– asocian tipos, asignan nombres, ….
2. Estructura de un programa en FORTRAN
• PROGRAM
» Todo programa principal en FORTRAN debe comenzar con
PROGRAM
» El nombre del programa ha de empezar por una letra,
puede contener números y letras y su longitud máxima
es de 31 caracteres
» NO puede coincidir con ningún nombre de variable que se
use en el programa
• END
» indica al compilador que ya no hay más instrucciones
3. Variables y constantes
• Declaración de variables
» Necesitamos reservar espacio en la memoria para
guardar datos
» ¿Cuánto espacio?: Depende de lo que queramos guardar
» La variable tiene asociado un tipo de datos, que
determinará cuánto espacio se guarda en memoria para
almacenarlos
– integer, real, character, logical
» Una variable sólo puede definirse una vez en el programa
• Tipos en Fortran
• Tipo INTEGER
» Variables y constantes enteras
» Son almacenados en memoria sin parte decimal
» Constantes enteras
– Se considera como constante entera:
– número (sucesión de dígitos) sin decimales (sin
punto decimal),
precedido o no del signo + o -
Rango
INTEGER*1 -128 ... 127
INTEGER*2 -32,768...32767
• Tipo REAL
» Variables y constantes reales : números con parte
fraccionaria
» Se pueden escribir de dos formas:
– a) reales sin exponente:
+3.2 -0.676 4. (no es el entero 4)
– b) reales con exponente (notación científica)
– Tres partes:
– base numérica (siempre con punto decimal),
– base de potencia (decimal, representada por E)
– exponente (tipo entero, sin punto decimal).
-23.044E+4 0.23E-2 0.022E2
4.Tipos de datos simples
Rango
REAL
DOUBLE PRECISION
4.Tipos de datos simples
• Tipo CHARACTER
» Variables y constantes de tipo carácter
• Tipo LOGICAL
» Variables y constantes lógicas
• OPERADORES ARITMÉTICOS
OPERADOR OPERACIÓN
+ suma
- resta
* multiplicación
/ división
** potencia
4.5. Operadores y expresiones
• OPERADORES RELACIONALES
OPERADOR
(Dos formas de escribirlo OPERACIÓN
admitidas por F90)
= .EQ. Igual a
• OPERADORES ALFANUMÉRICOS
» Operandos: caracteres y cadenas
» Resultado: cadena
OPERADOR OPERACIÓN
+ // Concatenación
4.5. Operadores y expresiones
• OPERADORES LÓGICOS
OPERADOR OPERACIÓN
.OR. O lógico
.AND. Y lógico
Importante -
los puntos
forman parte
de los
operadores
• PASO 2 Análisis:
! Escribimos el resultado
PRINT *, "El centro del círculo es (", a, b, ")"
PRINT *, "y su radio es: ", r
END PROGRAM CIRCULO
Programa ejemplo en Fortran
• PASO 4. Pruebas
• Sentencias de procedimiento
» PROGRAM, END, FUNCTION, SUBROUTINE
• Sentencias de declaración
» Declaración de variables y constantes
• Sentencias de asignación
» Asigna un valor a una variable (=)
• Sentencias de control
» Cambian el flujo del programa
» STOP, IF, CASE, DO
• PROGRAM
» Cualquier programa principal en FORTRAN debe
comenzar con PROGRAM
» PROGRAM nombre_programa
• END PROGRAM
» indica al compilador que ya no hay más instrucciones
» END PROGRAM nombre_programa
• SUBROUTINE, FUNCTION
» Usadas para definir funciones y subrutinas
Lo veremos en
Tema 6
Sentencias de declaración
• No ejecutables
• Indican al compilador el nombre y tipos de datos que
va a almacenar una variable o constante
– Fotran 77
INTEGER VAR1, VAR2
Sólo por si
lo veis.
Nosotros
Fortran 90
Sentencias de declaración
• ejemplos
num_real = 3.0
nombre_cliente = “Carlos López”
7. Sentencias de asignación
» Excepción
– Sí puedo asignar un valor numérico de un tipo a una
variable de otro
– En este caso el valor se guardará con el formato de la
variable a la que lo asigno
» Ejemplo
PROGRAM Tipos
INTEGER :: num_entero
REAL :: num_real
DOUBLE PRECISION :: num_dp 4
num_entero = 4 4.000000
PRINT *, num_entero 4.0000000000000
num_real = num_entero
PRINT *, num_real
num_dp = num_entero
PRINT *, num_dp
END PROGRAM Tipos
7. Sentencias de asignación
• Inicialización de variables
» Inicialización = asignación valor inicial
» declaración e inicialización, forma extendida y abreviada
Extendida:
!Primero declaro
REAL :: a, b, c
CHARACTER(LEN=10) :: nombre
!Luego incializo
a=0.0
b=1.5
c=28.9
nombre = “sin_definir”
Abreviada:
!Inicializo y declaro a la vez
REAL a=0.0, b=1.5, c=28.9
CHARACTER(LEN=10) :: nombre = “sin_definir”
7. Sentencias de asignación
• Inicialización de constante
» forma extendida
REAL, PARAMETER :: PI
PI = 3.141592
» forma abreviada
REAL, PARAMETER :: PI=3.141592
8. Sentencias de control
• Estructuras de control
• Programación no estructurada
» GOTO
– la ejecución continua en una determinada sentencia,
marcada con una etiqueta
– Hay diferentes tipos
– PROHIBIDOS
» STOP
– Finaliza la ejecución del programa
– en cualquier lugar del programa
– puede haber varias sentencias STOP en un programa
– En el terminal aparece STOP y (opcionalmente) un texto
» IF
– IF
– IF-THEN
– IF-THEN-ELSE- END IF
– IF-THEN-ELSE-ELSE IF- END IF
» SELECT CASE
8. Sentencias de control alternativas
• IF
» Se evalúa la expresión lógica. Si es verdadera se ejecuta
la sentencia, si es falsa se continua con la siguiente
instrucción
expresión
lógica
TRUE
sentencia FALSE
Diagrama de flujo IF
8. Sentencias de control alternativas
• IF-THEN-END IF
» Equivalente a IF pero permite ejecutar un bloque de
sentencias
IF expresión_lógica THEN
expresión bloque_de_sentencias
true
lógica END iF
Bloque de false
sentencias IF edad > 18 THEN
PRINT *, “ADULTO”
precio_entrada = 20
END IF
Diagrama de flujo
IF-THEN-END-IF
8. Sentencias de control alternativas
• IF-THEN-ELSE-END IF
bloque bloque
sentencias 1 sentencias 2
IF expresión_booleana THEN
bloque_sentencias_1
ELSE
bloque_sentencias_2
END IF Diagrama de flujo
IF-THEN-ELSE-END-IF
IF (a>b) THEN
PRINT *, “A es mayor que B”
ELSE
PRINT *, “A es menor que B”
END IF
8. Sentencias de control alternativas
IF (expresion1) THEN
bloque sentencias 1 IF (edad .GT. 65) THEN
ELSE IF (expresion2) THEN PRINT *, “adulto”
bloque sentencias 2 ELSE IF (edad .LT. 2) THEN
ELSE IF (expresion3) THEN PRINT *, “bebe”
ELSE
bloque sentencias 3
PRINT *, “niño”
ELSE IF (expresion4) THEN END IF
bloque sentencias 4
…………………
ELSE
bloque sentencias 5
END IF
8. Sentencias de control alternativas
• CASE
» Permite implementar estructuras de selección múltiple de
forma sencilla, a partir de una variable selectora
selector
condición
Posibles SELECT CASE (condición)
valores del
selector CASE (valor1)
bloque_sentencias_1
valor 1 valor 2 valor n
CASE (valor2)
bloque_sentencias_2
CASE (valor_n)
bloque bloque bloque bloque_sentencias_N
sentencias 1 sentencias 2 sentencias n ………
END SELECT
punto de
salida
8. Sentencias de control alternativas
• CASE (sigue)
» El selector
– Debe ser una variable o expresión de tipo entera, lógica,
carácter
– No puede ser una expresión real
• CASE DEFAULT
» Cláusula que para indicar el bloque de sentencias que se
ejecuta por defecto, es decir si no aparece el valor del
selector en la lista de valores
INTEGER :: curso
– Secuenciales
– Alternativas
Ya las
– IF hemos visto
– IF-THEN
– IF-THEN-ELSE- END IF
– IF-THEN-ELSE-ELSE IF- END IF
– SELECT CASE
– Repetitivas (bucles)
– DO
– DO WHILE
8. Sentencias de control repetitivas
• DO
» 'para' o 'hacer para' en pseudocódigo
valor valor final
» Sintaxis inicial del del
contador contador
» El incremento:
– Puede ser cualquier valor numérico
– También negativos
– Si no se especifica, se considera que vale 1
8. Sentencias de control repetitivas
• Ejemplo
» suma de los enteros de 1 a 50 (FORTRAN 90)
i,suma :: integer
DO i=1,50,1
suma=suma+i
END DO
Sólo por
curiosidad
• Sintaxis DO en Fortran 77
DO k contador = valor_inicial,valor_final, incremento
sentencia_1
sentencia_2
.....
sentencia_n
K CONTINUE
• DO WHILE
» 'mientras' en pseudocódigo
DO WHILE expresion
false
sentencia_2
expresión
..... booleana
sentencia_n
END DO true
bloque
sentencias
8. Sentencias de control repetitivas
• Entrada
» asignamos a una variable un valor leído de un periférico
(típicamente teclado) o de un archivo
ENTRADA MEMORIA
teclado
pantalla táctil
archivo de disco duro Variable
archivo de disquete
...
• Salida
» escribimos en un periférico (típicamente monitor) o archivo el
valor de una variable
MEMORIA SALIDA
monitor
Variable impresora
archivo de disco duro
archivo de disquete
9. Sentencias de entrada y salida
• Descriptores de formato
» lista de códigos que proporcionan la información
necesaria para que se produzca convenientemente la
transformación o edición requerida en el proceso de
entrada o salida
• PRINT Y WRITE
» PRINT
– Sólo para escribir en la salida estándar (monitor)
PRINT *, var1, var2,.., varN
Print *, "Paula"
» WRITE
– Para escribir en la salida estándar y también en ficheros
– Para la salida estándar
WRITE (*, descriptores de formato) lista_de_variables
• Descriptores de formato
» Para datos
– Números enteros I
– Números reales sin exponente F (float)
– Números reales con exponente E
– Cadenas alfanuméricas A
» De posicionamiento
– Espaciado horizontal X
– Tabuladores T
» Especiales
– Salto de línea /
9. Sentencias de entrada y salida
• Tabuladores T
» Tn
– n posiciones desplazadas (izquierda o derecha) de la
posición actual.
WRITE (*, '(A5,T8,A5)') "Paula", "Clara"
Paula Clara
» TRn
– n posiciones a la derecha de la posición actual.
WRITE (*, '(A5,TR8,A5)') "Paula", "Clara"
Paula Clara
» TLn
– n posiciones a la izquierda de la posición actual.
WRITE (*, '(A5,TL8,A5)') "Paula", "Clara"
Clara
• Sentencia FORMAT
» Especifica el formato de entrada o salida usado como descriptor
de formato en otra sentencia
» Sentencia no ejecutable
» Permite separar los descriptores de formato en otra instrucción
WRITE (*, etiqueta) lista_de_variables
etiqueta FORMAT descriptores de formato
EJEMPLO I=22 22
11
J=11
k=224
66 FORMAT (1X,I3/2X,I2///1X,I3) 224
WRITE (*,66) I,J,K
• Ventaja de FORMAT:
» Puedo reutilizar los descriptores de formato en varias
instrucciones de lectura/escritura
OTRO EJEMPLO
INTEGER :: i
REAL:: x
I=4
X=2.5 4 2.500
WRITE (*, 900) i, x
900 FORMAT (I4,F8.3)
Muestra
– la variable entera i con un ancho de cuatro caracteres
– la variable real x en notación de punto fijo con 3 decimales,
ocupando un ancho de ocho espacios
9. Sentencias de entrada y salida
• Estructura de un programa
PROGRAM nombre_programa
IMPLICIT NONE
Sentencias de especificación y declaración
...
Sentencias ejecutables
END PROGRAM nombre_programa
• sentencia de asignación
=
• sentencias de declaración
TIPO :: nombre_variable
TIPO, PARAMETER :: nombre_constante = Valor
Resumen sintaxis FORTRAN 90
DO WHILE expresion
sentencia_2
.....
sentencia_n
END DO
Resumen sintaxis FORTRAN 90
READ *, lista_de_variables
PRINT *, lista_de_variables