Declaración de variables. Sentencias de entrada/salida

Anuncio
Lección 2 – Declaración de variables. Sentencias de entrada/salida
Declaración de variables. Sentencias de entrada/salida
Introducción
En los capítulos anteriores se introdujo la notación algorítmica y unas nociones básicas del lenguaje de
programación FORTRAN; se describió el concepto de tipo de datos, variable y constante, así como las sentencias de
asignación y entrada/salida.
En el caso de la notación algorítmica se describió la estructura fundamental de un algoritmo, no así en el caso
de FORTRAN; en este capítulo se profundizará en el lenguaje explicando conceptos como la declaración de variables o
los distintos formatos aceptados por las sentencias de entrada/salida.
Declaración de variables
Estructura de un programa FORTRAN y declaración implícita de variables
Sabemos que tanto la notación algorítmica como FORTRAN disponen de una serie de tipos de datos, cada
variable utilizada en un algoritmo pertenecerá obligatoriamente a uno de tales tipos; para indicar el tipo de una variable
ésta debe ser “declarada”.
En el primer capítulo se mostró la forma en que se declaraban variables en nuestra notación algorítmica:
variables
v1 ∈ tipo1
v2 ∈ tipo2
...
Existía una sección especial del algoritmo, antes de que se proporcionase ninguna instrucción, donde se
declaraban los tipos de todas las variables a utilizar en el algoritmo; el lenguaje FORTRAN funciona de manera similar
aunque con algunas diferencias que es necesario tener en cuenta.
Todo programa FORTRAN presenta la siguiente estructura:
program nombre_programa
sentencia 1
sentencia 2
...
end
Como se puede apreciar, un programa FORTRAN comienza siempre por la palabra reservada program y
termina en la palabra reservada end; siguiendo siempre a program el nombre del programa que debe ser un
identificador válido (ver capítulo anterior). Entre ambos extremos se colocan las sentencias que componen el programa
en sí; pudiendo ser tales sentencias:
•
Declaraciones de variables.
•
Definiciones de constantes.
•
Instrucciones.
Una característica muy importante es que cualquier declaración de variable o definición de constante debe
preceder obligatoriamente a todas las instrucciones del programa; es decir, no se pueden declarar variables o definir
constantes en mitad de un algoritmo descrito en FORTRAN. De esta manera, la estructura de un programa FORTRAN
es la siguiente:
program nombre_programa
declaración de variable o definición de constante 1
declaración de variable o definición de constante 2
...
sentencia 1
sentencia 2
...
end
Otra peculiaridad que hay que tener en cuenta es debida a una característica (muy desafortunada, por cierto)
del lenguaje FORTRAN 77; en este lenguaje no era estrictamente necesario declarar el tipo de las variables que iba a
utilizar el programa, existían una serie de reglas mnemotécnicas que definían de manera implícita el tipo de cada
variable.
Así, cualquier variable cuyo identificador comenzase por I, J, K, L, M o N era de tipo integer, y las que
empezasen por otro carácter de tipo real. Obviamente, las variables de tipos distintos a los dos mencionados debían
declararse de manera explícita; esta característica aunque puede parecer interesante puede resultar muy peligrosa
puesto que un simple error en la escritura del nombre de una variable pasaría desapercibido con consecuencias difíciles
de determinar.
FORTRAN 90 conserva muchas de las peculiaridades de las versiones anteriores del lenguaje por lo que
también admite declaraciones implícitas; dado que es una característica muy desaconsejable es necesario utilizar la
1
Lección 2 – Declaración de variables. Sentencias de entrada/salida
sentencia IMPLICIT NONE en todos los programas de tal manera que se indique al compilador que todas las variables
deben ser declaradas para su uso. De esta forma la estructura de un programa FORTRAN sería la siguiente:
program nombre_programa
implicit none
declaración de variable o definición de constante 1
declaración de variable o definición de constante 2
...
sentencia 1
sentencia 2
...
end
Declaración explícita de variables en FORTRAN
La sintáxis de las sentencias de declaración de variables es la siguiente:
tipo variable1 [, variable2]*
Donde tipo puede ser integer, real, character o logical. Como se puede ver en la expresión anterior
se emplea una notación con corchetes y asteriscos; el significado de la misma es el siguiente: los corchetes indican que
su contenido es opcional mientras que el asterisco indica que la expresión puede repetirse cero o más veces; es decir,
las siguientes sentencias son declaraciones de variables válidas:
integer velocidad
real a, b, c
logical entrada, salida
character cadena
Declaración de cadenas de caracteres
Como ya sabemos, existe un tipo peculiar que es el character; mientras que en la notación algorítmica existe
un tipo caracter que permite almacenar secuencias de caracteres de longitud arbitraria, en FORTRAN hay que indicar
de manera específica la longitud de cada cadena puesto que, por defecto, una variable de tipo character tiene una
longitud de un único carácter. A continuación se muestran declaraciones de variables para almacenar cadenas de
caracteres de diferentes longitudes:
character a, b, c
character*8 dni
character*9 telefono, nif
Las tres primeras variables pueden almacenar un único carácter cada una, la segunda cadenas de 8 caracteres
y las dos últimas, cadenas de 9 caracteres.
Vectores y matrices (FORTRAN y notación algorítmica)
Una característica de todas las declaraciones de variables anteriores es que sólo pueden almacenar un único
dato del tipo declarado: un integer, un real o una secuencia de caracteres; sin embargo, en muchas ocasiones es
necesario manejar datos no puntuales sino multidimensionales como vectores y matrices.
Para trabajar con vectores y matrices en la notación algorítmica se dispone de la palabra reservada vector
con la sintáxis siguiente:
vector (n [,m]*) de tipo
Así, las siguientes serían sentencias válidas que permiten declarar un vector de tres coordenadas y una matriz
cuadrada de lado 3:
coordenadas ∈ vector (3) de real
tres_en_raya ∈ vector (3,3) de logico
Por lo que respecta a la declaración de vectores y matrices en FORTRAN difiere un poco respecto a la
notación algorítmica y puede hacerse de dos formas distintas:
tipo variable (n [,m]*)
o bien
tipo variable
dimension variable (n [,m]*)
Ambas formas son igualmente válidas, aunque la primera es más breve y se aproxima más a la forma en que
se trabaja en la notación algorítmica. Para declarar en FORTRAN las variables anteriores se procedería de la forma
siguiente:
real coordenadas (3)
logical tres_en_raya (3,3)
Hay que señalar que aunque existen lenguajes de programación que permiten trabajar con vectores y matrices
como tipos de datos elementales no es éste el caso de FORTRAN (y tampoco de nuestra notación algorítmica); los
operadores existentes sólo pueden manejar tipos de datos simples por lo que siempre será necesario acceder a las
componentes individuales de un vector o matriz. La forma de realizar este acceso es la siguiente tanto en FORTRAN
como en la notación algorítmica:
variable (i [,j]*)
2
Lección 2 – Declaración de variables. Sentencias de entrada/salida
Así, para acceder a la segunda coordenada del vector anterior o a una de las “esquinas” de la matriz se
procedería como sigue:
coordenadas(2)
tres_en_raya(3,3)
Sentencias de entrada/salida
Tanto en la notación algorítmica como en FORTRAN existen dos sentencias para llevar a cabo operaciones de
entrada/salida, se trata de las sentencias leer y escribir y sus equivalentes read y print. Como se recordará, el
formato de las primeras era:
leer variable1 [, variableN]*
escribir expresión1 [, expresiónN]*
Sus equivalentes en FORTRAN son similares aunque tienen como característica no existente en la notación
algorítmica el empleo de formatos:
read formato, variable1 [, variableN]*
print formato, expresión1 [, expresiónN]*
Los formatos permiten especificar las características de presentación de la información (tipo de dato,
posiciones ocupadas, número de decimales, etc.) En caso de que el programador no desee especificar información
sobre formato, es decir, emplear un formato libre debe emplear el carácter asterisco (*); a continuación se muestran
algunas sentencias de entrada/salida en notación algorítmica y su traducción a FORTRAN:
leer temperatura
leer velocidad, aceleracion
escribir longitud
escribir ‘hola’, nombre
read *, temperatura
read *, velocidad, aceleracion
print *, longitud
print *, ‘hola’, nombre
Sin embargo, aún cuando la utilización del formato libre es muy cómoda hay ocasiones en las que resulta
necesario fijar un formato determinado para los datos, especialmente, al producir salidas. A continuación se describirán
los códigos de formato más habituales y su forma de utilización.
Códigos de formato
Por cada tipo de dato FORTRAN existe al menos un código de formato; así, los más comunes son I para
integer, F y E para real (sin exponente y con exponente), L para logical y A para character. Cada código de
formato va acompañado de una serie de cifras que permiten controlar con mayor precisión la forma en que se
representa la información. A continuación se presentará cada código de formato junto con las formas en que puede
aparecer, proporcionando una descripción del mismo y algunos ejemplos.
Tipo de dato
integer
Código de
formato
I
Forma
In
In.d
cIn.d
Descripción
Ejemplos
n es un entero sin signo
distinto de cero.
Esta forma indica que se va
a
leer/escribir
una
expresión de tipo entero
empleando n posiciones
para la misma contando el
signo si existe.
n es un entero sin signo
distinto de cero.
d es un entero sin signo
distinto de cero.
Esta forma indica que se va
a
leer/escribir
una
expresión de tipo entero
empleando n posiciones
para la misma (contando el
signo) de las cuales se
utilizarán, al menos, d.
En lectura In.d equivale a In
c es un entero sin signo
distinto de cero.
n es un entero sin signo
distinto de cero.
d es un entero sin signo
distinto de cero.
Esta forma indica que se
van a leer/escribir c
expresiones de tipo entero
empleando n posiciones
para cada una (contando el
signo) de las cuales se
utilizarán, al menos, d.
print '(I5)', 2
print '(I1,I1,I2)', 2, 3, -1
2
23-1
print '(I5.5)', 2
print '(I1,I1,I5.3)', 2, 3, -1
00002
23 -001
print '(3I5.3)',2,2,2
3
Resultado de los
ejemplos
002
002
002
Lección 2 – Declaración de variables. Sentencias de entrada/salida
real
F
Fn.d
n es un entero sin signo print '(F5.1,F5.3)',3.142, 3.142
distinto de cero.
d es un entero sin signo
distinto de cero.
Esta forma indica que se va
a
leer/escribir
una
expresión de tipo real
empleando n posiciones
para la misma (contando el
signo y el punto decimal)
de las cuales se utilizarán d
para posiciones decimales.
cFn.d
c es un entero sin signo print '(2F5.3)',3.142, 3.142
distinto de cero.
n es un entero sin signo
distinto de cero.
d es un entero sin signo
distinto de cero.
Esta forma indica que se
van a leer/escribir c
expresiones de tipo real
empleando n posiciones
para cada una (contando el
signo y el punto decimal)
de las cuales se utilizarán d
para posiciones decimales.
n es un entero sin signo print '(E6.1,E8.3)',3.142, 3.142
distinto de cero.
d es un entero sin signo
distinto de cero.
Esta forma indica que se va
a
leer/escribir
una
expresión de tipo real con
exponente empleando n
posiciones para la misma
(contando el signo de
mantisa y exponente y el
punto decimal) de las
cuales se utilizarán d para
la mantisa.
cEn.d
c es un entero sin signo print '(2E6.1)',3.142, 3.142
distinto de cero.
n es un entero sin signo
distinto de cero.
d es un entero sin signo
distinto de cero.
Esta forma indica que se
van a leer/escribir c
expresiones de tipo real
con exponente empleando
n posiciones para cada una
(contando el signo de
mantisa y exponente y el
punto decimal) de las
cuales se utilizarán d para
la mantisa.
cEn.dEe c es un entero sin signo print '(2E7.1E3)',3.142, 3.142
distinto de cero.
n es un entero sin signo
distinto de cero.
d es un entero sin signo
distinto de cero.
e es un entero sin signo
distinto de cero.
Esta forma indica que se
van a leer/escribir c
expresiones de tipo real
con exponente empleando
n posiciones para cada una
(contando el signo de
mantisa y exponente y el
punto decimal) de las
cuales se utilizarán d para
la mantisa y e para el
exponente.
En.d
4
3.13.142
3.1423.142
.3E+01.314E+01
.3E+01.3E+01
.3E+001.3E+001
Lección 2 – Declaración de variables. Sentencias de entrada/salida
logical
L
Ln
character
A
An
cAn
n es un entero sin signo print '(L1,L5)', .true., .true.
distinto de cero.
Esta forma indica que se va
a
leer/escribir
una
expresión de tipo lógico
empleando n posiciones
para la misma.
n es un entero sin signo print '(A2,A4)', 'hola', 'hola'
distinto de cero.
Esta forma indica que se va
a
leer/escribir
una
expresión de tipo cadena
de caracteres empleando n
posiciones para la misma.
c es un entero sin signo print '(2A3)', 'hola', 'adios'
distinto de cero.
n es un entero sin signo
distinto de cero.
Esta forma indica que se
van a leer/escribir c
expresiones de tipo cadena
de caracteres empleando n
posiciones para cada una.
T
T
hohola
holadi
Para terminar con los códigos de formato tan sólo resta decir que en el caso de que una expresión no pudiera
encuadrarse dentro del formato solicitado en una sentencia de salida el resultado que se obtendría sería una secuencia
de n asteriscos donde n sería el ancho de formato especificado.
Resumen
1.
Tanto en la notación algorítmica como en FORTRAN existe una zona donde se pueden declarar variables
y definir constantes.
2.
En FORTRAN las variables y constantes deben declararse y definirse antes de ninguna instrucción
ejecutable.
3.
FORTRAN posee declaración implícita de variables enteras y reales, es decir, en caso de que una variable
no sea declarada de forma específica se le asigna un tipo entero o real en base a la primera letra del
identificador. Para evitar esta característica indeseable es necesario utilizar la sentencia IMPLICIT NONE
antes de ninguna declaración de variables.
4.
La estructura de un programa FORTRAN es la siguiente:
program nombre_programa
implicit none
declaración de variable o definición de constante 1
declaración de variable o definición de constante 2
...
sentencia 1
sentencia 2
...
end
5.
La sintáxis de las sentencias de declaración en FORTRAN es la siguiente:
tipo variable1 [, variable2]*
6.
En el caso de que se deseen declarar cadenas de caracteres la sintáxis es:
7.
Tanto en FORTRAN como en la notación algorítmica es posible declarar vectores y matrices; en el caso de
la notación algorítmica la sintáxis es:
character*longitud variable1 [, variable2]*
variable ∈ vector (n [, m]*) de tipo
mientras que en FORTRAN es:
tipo variable (n [, m]*)
8.
Para acceder a un componente de un vector o matriz tanto en la notación algorítmica con en FORTRAN se
emplea la sintáxis siguiente:
variable (i [, j]*)
9.
FORTRAN tiene dos sentencias de entrada salida: read y print; a diferencia de la notación algorítmica
estas sentencias incluyen un parámetro para “formatear” la entrada o la salida de los datos siendo su
sintáxis la siguiente:
read formato, variable1 [, variableN]*
print formato, expresión1 [, expresiónN]*
10. Existe la posibilidad de utilizar ambas sentencias con el denominado formato libre, para ello basta con
indicar como formato un asterisco *.
5
Descargar