Fortran

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 84

Tema 4

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

• FORmula TRANslator (Traductor de Fórmulas).

• Es un lenguaje de alto nivel, compilado y linkado


1. Introducción a Fortran

• Se crea a mediados de los años


cincuenta
» en 1955 aparece la primera versión en
IBM
• Es el primer lenguaje de alto nivel
• Nace para cálculos científicos
• 1966
» primera estandarización por el ANSI,
quedando fijadas las reglas del
lenguaje y recibiendo el nombre de
FORTRAN 66
• 1977
» nueva versión FORTRAN77
• 1990
» FORTRAN se adapta a las nuevas
tecnologías, con el nuevo estándar
elaborado por ANSI y aparece el
FORTRAN90
1. Introducción a FORTRAN

• Antiguos defectos de FORTRAN


» Formato de línea no libre
– Tiene un conjunto de reglas estrictas de como el código
fuente debe ser formateado
» Escasa facilidad para manejar datos de tipo texto
» Sentencias de control muy rígidas
– Hacen complejos los programas sin necesidad
– Uso de saltos (GOTO)
» Imposibilidad de definir estructuras de datos flexibles
– hay que recurrir excesivamente a vectores y matrices
» Falta de procedimientos recursivos.
– Una función que se llama a sí misma,
– ej FACT N = N *FACT (N-1)
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

• Compatibilidad entre versiones


» Los compiladores de FORTRAN90 aceptan código escrito
en FORTRAN77
» Por eso mantiene algunas características obsoletas
(GOTO)
– NO usarlo Æ Programas no estructurados
1. Introducción a Fortran

• 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

• Formato de línea en Fortran 77


» Herencia de los tiempos
de la tarjeta perforada
» La línea tiene una anchura
de 80 columnas
» En Fortran 90 es opcional

» 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

• Nosotros trabajamos con formato libre


» La línea tiene una anchura de 132 caracteres
» se usa el símbolo ampersand (&) como signo de
continuación
– Si una línea acaba con &, significa que continúa en la
siguiente
– También el + en algunos compiladores
» Los comentarios empiezan con !
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

La estructura de un programa en Fotran es:


PROGRAM nombre_programa
Sentencias de especificación y declaración...
...
Sentencias ejecutables ... ...
END PROGRAM nombre_programa

• El código del programa aparece entre las palabras


reservadas PROGRAM y END

• Excepción: código correspondiente a funciones y


procedimientos
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

• Las CONSTANTES designan un valor específico y


determinado que se define al escribir un programa y
que no cambia a lo largo del mismo

• Se pueden definir de dos maneras


» Empleando la sentencia PARAMETER, con lo que quedará
asegurado que el valor no será alterado a lo largo del
programa
integer, parameter :: max = 100

» Mediante una sentencia de asignación en la que la


constante recibe su contenido
pi = 3.141592
3. Variables y constantes

• Las VARIABLES designan valores que irán cambiando a


lo largo de la ejecución de un programa y que han de
ser definidas (declaradas) para reservarles un espacio
en memoria

• Una variable representa un campo o dirección en la


memoria
» cuando se usa el nombre de la variable se utiliza el valor
que se encuentre almacenado en ese momento en dicha
dirección
999
998
contador 997 7
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

• Sintaxis para declaración de variables


tipo :: identificador
» Ejemplos
INTEGER :: contador
REAL :: temperatura
LOGICAL :: aprobado
3. Variables y constantes

• Reglas para asignar nombres válidos a las variables:


» El primer carácter debe ser alfabético
» El resto de caracteres deben ser letras o números
» El número máximo de caracteres depende del compilador
– nombres válidos: MAX2, XR2D2, etc.
– nombres no válidos: 321, 3PO, etc.

» Es aconsejable elegir nombres autoexplicativos


contador = contador + 1
num_alumnos = 56
3. Variables y constantes

• Dos formas de definir una variable en el programa


» Explícita
– Declaro la variable antes de usarla, con una sentencia de
declaración
INTEGER :: contador
» Implícita
– No declaro la variable
– Directamente uso su nombre en una sentencia de
asignación (le asigno un valor)
Contador = 0
– ¿Qué hace el programa?
– Si se encuentra un identificador que no conoce, le asocia
un tipo de datos por defecto y reserva el espacio
correspondiente en memoria
– ¿Qué tipo le asocia? ………………
3. Variables y constantes

• Definición implícita de variables


» Tipos de datos asociados por defecto
– toda variable cuyo nombre comience por I, J, K, L, M, N, se
asocia a tipo entero
– el resto de variables se consideran reales
NO SE
» Los tipos asociados por defecto DEBEN
– Hacen difícil detectar los errores USAR

• Se puede indicar al compilador que elimine la


declaración implícita de variables
» Para ello antes de la sección de declaraciones se añade la
sentencia
IMPLICIT NONE USAR
SIEMPRE
– Evitamos errores
» ¿Y si el compilador encuentra un identificador que no
conoce?
– Error en tiempo de compilación
4.Tipos de datos simples

• Tipos en Fortran

Tipo de dato Palabra reservada


Enteras INTEGER
Lógicas LOGICAL
Carácter CHARACTER
Complejas COMPLEX
Reales REAL
Reales doble precisión DOUBLE PRECISION
4.Tipos de datos simples

• 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 -

– Ejemplos de constantes válidas


+123 -65002 99 999 0
4.Tipos de datos simples

• Tipo INTEGER (cont)


» El rango de valores depende de la máquina y del
compilador
» En nuestro compilador pueden definirse intervalos
distintos
– Por defecto está definida INTEGER*4
– 4 bytes
– ¿Máximo valor?
– En 1 byte 255 = 2(8-1)-1
– En 4 bytes 2(32-1) -1

Rango
INTEGER*1 -128 ... 127

INTEGER*2 -32,768...32767

INTEGER*4 -2,147,483,648 ... 2,147,483,647


4.Tipos de datos simples

• 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

• Tipo REAL (cont)


» Como en el caso de los enteros, el rango (valores máximo y
mínimo) dependen de la máquina y del compilador

» Dos tipos de números reales

Rango
REAL

DOUBLE PRECISION
4.Tipos de datos simples

• Tipo CHARACTER
» Variables y constantes de tipo carácter

» Una constante alfanumérica es una cadena de caracteres


encerrada entre apóstrofes
» El número de caracteres que pueden contener, varía
entre 1 y el máximo permitido por el compilador.
– Nuestro compilador 1 a 32,767
4.Tipos de datos simples

• Tipo LOGICAL
» Variables y constantes lógicas

» Sólo pueden tomar dos valores, cierto y falso


» Estos valores se representan en Fortran como
.TRUE.
.FALSE.
5. Operadores y expresiones

• OPERADORES ARITMÉTICOS

OPERADOR OPERACIÓN
+ suma

- resta

* multiplicación

/ división

** potencia
4.5. Operadores y expresiones

• Reglas para construir expresiones


» No puede haber dos operadores consecutivos
X**-2 es incorrecto
X**(-2) es correcto
» Los operadores *, /, **, deben estar rodeados por dos
variables o constantes.
A*B D/3.0 F**3
» Los operadores +, -, pueden afectar a dos operandos
(suma, resta) o a una (signo)
A*C -5.0 +C-B -
» La multiplicación nunca está implícita
ha de escribirse A*(B+C ) en lugar de A(B+C)
5. Operadores y expresiones

• Los operadores aritméticos pueden usarse con


operandos reales o enteros
» Las operaciones con enteros, dan resultado entero
– se usan sobre todo para operaciones con contadores o
índices
» Las operaciones con reales dan resultado real
– Los cálculos se hacen siempre con reales

» En una expresión en la que haya número reales el


resultado es real, aunque también participen enteros (el
tipo real domina)
4.5. Operadores y expresiones

• OPERADORES RELACIONALES

OPERADOR
(Dos formas de escribirlo OPERACIÓN
admitidas por F90)

= .EQ. Igual a

<> .NE. Distinto de (No igual a)

Esta forma > .GT. Mayor que


es mas
universal >= .GE. Mayor o igual que

< .LT. Menor que

<= .LE. Menor o igual que

» El resultado es una variable lógica


4.5. Operadores y expresiones

• 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

.NOT. Negación lógica

Importante -
los puntos
forman parte
de los
operadores

• Los operandos sonde tipo lógico y el resultado también


4.5. Operadores y expresiones

• Los operadores en una expresión se evalúan siguiendo el


orden jerárquico siguiente:
– 1.º Paréntesis (comenzando por los más internos).
– 2.º Signo (-,+ siempre que no tengan a su izquierda un valor
numérico).
– Luego los aritméticos:
– 3.º Potencia **
– 4.º Productos y divisiones. Con igual prioridad. Se resuelven de
izquierda a derecha.
– 5.º Sumas y restas. Con igual prioridad. Se resuelven de izquierda a
derecha.
– 6.º Concatenación.
– Luego los relacionales:
– 7.º Relacionales.
– Luego los booleanos
– 8.º Negación .NOT. Ya lo vimos
– 9.º Conjunción .AND. en el tema
3
– 10.º Disyunción .OR.
Programa ejemplo en Fortran

• Pasos para escribir un programa:

1. Especificar el problema claramente


QUÉ TIENE QUE HACER
2. Analizar el problema y dividirlo en sus elementos
fundamentales. Utilizar pseudocódigo u organigramas
CÓMO LO PUEDE HACER
3. Codificar el programa en el lenguaje de programación de
elegido
4. Probar el programa exhaustivamente y repetir los pasos
2) y 3) mientras sea necesario, hasta lograr que el
programa funcione en todas las situaciones que se
puedan presentar
Programa ejemplo en Fortran

• PASO 1: Plantear el problema de forma clara:

» Escribir un programa que pida al usuario las


coordenadas x e y de tres puntos, calcule la ecuación
del círculo que pasa por esos tres puntos, dada por
(x-a)2 + (y-b)2 = r 2 y muestre como resultado por
pantalla las coordenadas (a,b) el centro del círculo y el
radio r.
Programa ejemplo en Fortran

• PASO 2 Análisis:

• Serán necesarios tres pasos para abordar este


problema:
» (2.1) Leer las tres coordenadas: (x1,y1), (x2,y2) y
(x3,y3)
» (2.2) Calcular la ecuación del círculo (x-a)2 + (y-b)2 = r 2

– Esto se podría hacer usando el subprograma calcular_círculo


» (2.3) Escribir las coordenadas (a.b) y el radio r.

» No consideramos la posibilidad de que el problema no


tenga solución, por ejemplo por que los tres puntos cuyas
coordenadas se leen se ajusten a una recta
– Habría que considerarlo, no lo hacemos por simplificar
Programa ejemplo en Fortran

PROGRAM Circulo PASO 3. Codificación


IMPLICIT NONE
! este programa calcula la ecuación de un circulo que pasa a través
! de 3 puntos
Sentencias entrada
! declaración de variables y salida: lo vemos a
REAL :: X1, Y1, X2, Y2, X3, Y3, a, b, r continuación

! Leemos los valores


PRINT *, "Por favor introduzca las coordenadas de los tres puntos"
PRINT *, " en el orden X1, Y1, X2, Y2, X3, Y3"
READ *, X1, Y1, X2, Y2, X3, Y3 Funciones: Lo
veremos en
! Calculamos centro y radio Tema 6
! llamada a una funcion
! parametros son los valores que usa X1, Y1, X2, Y2, X3, Y3
! y las variables en las que devolverá el resultado: a, b y r
CALL calcular_circulo (X1, Y1, X2, Y2, X3, Y3, a, b, r)

! 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

» Lo que veremos al ejecutarlo

Por favor introduzca las coordenadas de los tres


puntos en el orden X1, Y1, X2, Y2, X3, Y3
4.71
4.71
6.39
0.63
0.63
3.03
El centro del círculo que pasa a través de estos
puntos es (3.510, 1.830)
y su radio es: 3.120
4.6.Tipos de sentencias

EJECUTABLES Aritméticas, lógicas


ASSIGN, Asignación carácter,
GO TO incondicional, GO TO asignado, GO TO calculado
If aritmético, IF lógico
CONTINUE, STOP, PAUSE
DO
READ, WRITE
PRINT
REWIND, BACKSPACE, ENDFILE, OPEN
CLOSE, INQUIRE
CALL, RETURN
NO EJECUTABLES PROGRAM, FUNCTION, SUBROUTINE
ENTRY, BLOCK DATA
DIMENSION, COMMON, EQUIVALENCE, IMPLICIT,
EXTERNAL, INTRINSIC, SAVE
PARAMETER
INTEGER, REAL, LOGICAL, CHARACTER
DOUBLE PRECISION, COMPLEX
DATA
FORMAT No
END estudiaremos
todas
4.6. Tipos de sentencias

• 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

• Sentencias de entrada y salida


» Entrada y salida de datos
» READ, PRINT, WRITE
Sentencias de procedimiento

• 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

• Normalmente se colocan al principio del programa


» Pueden aparecer en cualquier orden
TIPO :: nombre_variable
TIPO, PARAMETER :: nombre_constante = Valor

– Fotran 77
INTEGER VAR1, VAR2
Sólo por si
lo veis.
Nosotros
Fortran 90
Sentencias de declaración

• Declaración de valores numéricos


» Elegir el tipo de datos y tamaño adecuado al problema
INTEGER :: contador
REAL :: temperatura
LOGICAL :: aprobado
• Caracteres y cadenas de caracteres
» Caracteres
CHARACTER :: letra
» Cadenas de caracteres
– Palabras, al declararlas hay que especificar el número de
caracteres que van a tener
– Dos formas equivalentes
CHARACTER(LEN=num_car) :: NOMBRE, APELL1, APELL2
CHARACTER (num_car) :: NOMBRE, APELL1, APELL2
Numero de
caracteres de la
cadena
Sentencias de declaración

» Más sobre declaración de cadenas de caracteres


– Se pueden especificar diferentes tamaños en una única
sentencia de declaración

CHARACTER(LEN = 20) :: NOMBRE, INICIAL* 1, APELL1, APELL2


todos tendrían 20, menos inicial que tendría 1 carácter

– Si se intenta asignar a una variable una cadena de mayor


tamaño, se trunca, quedándonos con los caracteres de la
izquierda

CHARACTER (4) :: ciudad


ciudad = “Madrid” ----> solo guarda “Madr”
Sentencias de declaración

• Declaración de vectores y arrays


» Además del tipo de datos hay que indicar las dimensiones
– Así el compilador sabe el espacio de memoria necesario
– Todas las variables de un array son del mismo tipo
– En memoria ocupan direcciones consecutivas

» Dos formas de declarar, usando la sentencia DIMENSION


o no
– Ejemplos

real:: notas real :: notas (50)


DIMENSION notas (50)

integer :: ciudades integer :: ciudades(7,4)


DIMENSION ciudades (7,4)
7. Sentencias de asignación

• Asignan un valor o expresión a una variable


variable = valor
variable = expresion
» variable a la izda
» valor o expresión a la dcha
» operador asignación en Fortran =

• Sólo se puede asignar a una variable un valor o expresión


del tipo adecuado
» No se permiten asignaciones numéricas a variables de tipo
carácter
» Al asignar el resultado de una expresión a úna variable de tipo
numérico hay que tener cuidado con el tipo resultante
– Recordar: si hay un operando real +,-,*, / tienen resultado real

• 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 estructurada: sólo puedo usar unas


estructuras de control determinadas
– Secuencial
– Alternativas (IF)
– Repetitivas (bucles)

» Hay otras estructuras de control que dan lugar a


programación no estructurada
– GOTOs
– STOP
0
8. Sentencias 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

» STOP detiene el programa en ejecución


» END indica el final del programa al compilador
8. Sentencias de control alternativas

• Sentencias de control alternativas


» También llamadas de selección o condicionales

» 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

If expresión_lógica THEN sentencia


IF edad > 18 THEN PRINT (*, “ADULTO”)

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

TRUE expresión FALSE


booleana

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

• SUBBLOQUE ELSE IF-THEN


» permite anidar otras condiciones

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

» Los valores de la lista


– pueden sustituirse por expresiones indicando rangos
valor_inferior:valor_superior
: valor_superior
valor_inferior:
– y también por listas de valores
valor1,valor2,valor3
– o por combinaciones de las dos cosas
valor1,valor2,valor3:valor4
8. Sentencias de control alternativas

• Ejemplo : nombre del polígono en función del número de


lados

SELECT CASE (num_lados)


CASE (0:1)
PRINT *, “ no es un poligono”
CASE (2)
PRINT *, “ es un cuadrado”
CASE (2)
PRINT *, “ es un triangulo”
CASE (4)
PRINT *, “ es un cuadrado”
CASE (5)
PRINT *, “ es un pentagono”
CASE (6)
PRINT *, “ es un hexagono”
CASE (10)
PRINT *, “ es un decagono”
END SELECT
8. Sentencias de control alternativas

• 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

SELECT CASE (curso)


CASE (1)
PRINT *, “ esta en primero”
CASE (2)
PRINT *, “esta en segundo”
CASE (3)
PRINT *, “esta en tercero”
CASE (4)
PRINT *, “esta en cuarto”
CASE (5)
PRINT *, “esta en quinto”
CASE ELSE
PRINT *, “ hay un error en el numero de curso”
END SELECT
8. Sentencias de control

• Repasamos, en programación estructurada


» Estructuras de control permitidas

– 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

DO contador = valor_inicial,valor_final, incremento


sentencia_1
variable que sentencia_2
controla el valor en el que se
bucle ..... incrementa el
sentencia_n contador en cada
repetición del bucle
END DO

» 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

» k número de la sentencia que representa el final del bucle


8. Sentencias de control repetitivas

• DO WHILE
» 'mientras' en pseudocódigo

» Se usa si no se conoce de antemano el número de veces que


hay que ejecutar el bucle
» Si se conoce el número de veces se usa DO

DO WHILE expresion
false
sentencia_2
expresión
..... booleana
sentencia_n
END DO true

bloque
sentencias
8. Sentencias de control repetitivas

• Bucle DO con condición de terminación (EXIT)


» Si se da la condición de terminación, sale del bucle y
sigue con la siguiente instrucción

DO contador = v_ini, v_final,inc No usar :


bloque sentencias 1 No usar no
Programación
estructurada
IF condicion THEN EXIT
bloque sentencias 2
END DO

• Bucle DO sin incremento de contador y con condición de


terminación (EXIT)
DO bloque sentencias 1
IF condicion THEN EXIT
bloque sentencias 2
END DO
» Riesgo de generar un bucle infinito si nunca se cumple
condición de terminación
8. Sentencias de control repetitivas

• Se pueden anidar estructuras repetitivas, siguiendo


unas reglas

1. la estructura interna debe estar totalmente incluida dentro de


la externa y no pueden existir solapamientos.
2. Los contadores de los bucles toman valores de modo tal que
por cada valor de la variable índice del bucle externo se debe
ejecutar totalmente la del bucle interno.
9. Sentencias de entrada y salida

• 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

• Sintaxis genérica para leer y escribir


» tanto de monitor y teclado como desde/hacia archivos

READ (núm_unidad, descriptores_formato) lista_de_variables


WRITE (núm_unidad, descriptores_formato) lista_de_variables

número de unidad: descriptores de formato: Nombres de las


número asignado al especifican el variables cuyo
archivo del que formato que se les contenido leo o
leo/escribo. da a las variable escribo, separadas por
Al monitor y teclado u comas
otros periféricos
también se les asigna
un número de unidad
9. Sentencias de entrada y salida

• Número de unidad Lo veremos


en Tema 7

» Entrada y salida de ficheros


– A cada fichero que se usa se le asigna un número
– Se especifica ese número para leer o escribir al fichero

En este tema vemos


» Entrada y salida estándar sólo entrada y salida
estándar
– Monitor y teclado
– Se puede cambiar por otros periféricos
– Se indican
a. Con unos números de unidad específicos
– 5 es la entrada estándar (= teclado)
– 6 es la salida estándar (=monitor)
b. Sustituyendo el número de unidad por un *
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

• Formato por defecto


» Si no queremos especificar un formato determinado, el
descriptor de formato se sustituye por *
» las variables se mostrarán/leerán de acuerdo a unas
reglas predefinidas, en función al tipo de datos al que
corresponden (integer, real, character, ...)
– Estas reglas pueden variar de un compilador a otro
9. Sentencias de entrada y salida

• Sintaxis simplificada para entrada y salida estándar y


formato por defecto
READ (*,*) lista_de_variables
WRITE (*,*) lista_de_variables

» Equivalente, más simplificada aun


READ *, lista_de_variables
Nuestro compilador no acepta
WRITE *, lista_de_variables
WRITE *, lista variables
Otros compiladores si
» Lectura
– de la entrada estándar, sin formato
– los valores estarán separados por espacios en blanco o
comas
– asigna los valores a las variables que aparecen en la lista
» Escritura
– en la salida estándar, con el formato por defecto
9. Sentencias de entrada y 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

Write (*,*) "Paula"


9. Sentencias de entrada y salida

• 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

• Enteros Iw WRITE (*, '(I5)') 22


» w = anchura (width) total del
22
campo

• Reales sin exponente Fw.d


» w = anchura total del campo,
incluyendo signo y punto decimal WRITE (*, '(F6.3)') 33.599
d = número de decimales después WRITE (*, '(F5.1)') 33.599
del punto 33.599
– Los números reales no se truncan 33.6
en la edición, sino que se READ (F9.2) X
redondean

• Reales con exponente Ew.d


» w = anchura total del campo,
WRITE (*, '(E6.1)') 33.5
incluyendo signo, punto y
WRITE (*, '(E7.1)') 33.5
exponente
» d = número de dígitos .3E+02
significativos detrás del punto. 0.3E+02
9. Sentencias de entrada y salida

• Alfanumérico Aw WRITE (*, '(A9)') "Paula"


» w es la longitud total del Paula
campo alfanumérico
• Espaciado horizontal nX
WRITE (*, '(12X,A5)') "Paula"
» X Saltar un espacio
Paula
» Para más de un espacio se
escribe el número de
espacios a saltar delante Prefijos de repetición:
» En entrada: número de Hacen que se
repita el descriptor
caracteres que se van a de formato que les
saltar cuando se está sigue n veces
leyendo información
• Espaciado vertical /
» Saltar a la siguiente línea Paula

WRITE (*, '(A5,3/,A5)') "Paula", "Juan"


Juan
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

» Con los tabuladores no pueden utilizarse prefijos de


repetición
9. Sentencias de entrada y salida

• Repetición de especificaciones de formato.


» nEspec
– n es el número que precede a la especificación y logra la
repetición de la misma n veces

WRITE (*, '(3F5.1)') 11.22, 33.44, 55.66


11.2 33.4 55.7
9. Sentencias de entrada y salida

• 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

WRITE (*, 100) a,b,c


WRITE (*, '(I3, F4.1,A5)'), a,b,c Equivale a 100 FORMAT (I3, F4.1,A5)
9. Sentencias de entrada y salida

• Ventaja de FORMAT:
» Puedo reutilizar los descriptores de formato en varias
instrucciones de lectura/escritura

• SINTAXIS (dos opciones)


num_etiqueta FORMAT (espec1,espec2,espec3,,,,)
num_etiqueta FORMAT (espec1/espec2/espec3/,,,)

• ¿Dónde se colocan las sentencias FORMAT


» pueden estar en cualquier lugar dentro del programa
– antes o después de las sentencias ejecutables que la utilizan
» Normalmente
– agrupar por parejas las sentencias
– agrupar todas las FORMAT al final del programa o
subprograma
» El número de etiqueta lo elige el programador
9. Sentencias de entrada y salida

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

• READ (22,*) V1,V2,V3


» Lee del fichero correspondiente a la unidad 22, sin
definir formato
• READ (*,22) V1,V2,V3
» Lee desde teclado, de acuerdo con la sentencia FORMAT
etiquetada con número 22
• READ (12,900) V1,V2,V3
» Lee del fichero 12 con especificaciones FORMAT en la
sentencia de etiqueta 900
• WRITE (*,*) V1,V2,V3
» escribe en pantalla, sin formato
• WRITE (13,*) V1,V2,V3
» escribe en fichero 13, sin formato
• WRITE (12,900) V1,V2,V3
» escribe en fichero 12, con especificaciones de formato de
FORMAT 900
Resumen sintaxis FORTRAN 90

• 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

• sentencias de control alternativas

IF (expresion1) THEN SELECT CASE condición


bloque sentencias 1
CASE valor1
ELSE IF (expresion2) THEN
bloque sentencias 2 bloque_sentencias_1
ELSE IF (expresion3) THEN CASE valor2
bloque sentencias 3 bloque_sentencias_2
ELSE IF (expresion4) THEN CASE valor_n
bloque sentencias 4
bloque_sentencias_n
ELSE
bloque sentencias 5 END SELECT
END IF
Resumen sintaxis FORTRAN 90

• sentencias de control repetitivas

DO contador = valor_inicial,valor_final, incremento


sentencia_1
sentencia_2
.....
sentencia_n
END DO

DO WHILE expresion
sentencia_2
.....
sentencia_n
END DO
Resumen sintaxis FORTRAN 90

• sentencias de entrada y salida

READ *, lista_de_variables
PRINT *, lista_de_variables

También podría gustarte