Asignación y Expresiones:
1) Constantes
2) Expresiones
3) Asignación
4) Conversión de Tipos
5) Expresiones Lógicas
6) Asignación de Variables Lógicas
7) La sentencia if
8) Sentencias if anidadas
9) Ciclos
10) Ciclos-do
La lista de variables está conformada por nombres de variables, separados por comas.
Cada variable deberá ser declarada una vez. Si una variable no está declarada, Fortran 77 usa un conjunto implícito de reglas para establecer el tipo. Todas las variables que comiencen con el conjunto de letras in son enteros y el resto tipo real. Varios programas viejos de Fortran usan estas reglas implícitas, pero la probabilidad de errores en el programa crece exponencialmente si no se declaran las variables de forma explícita.
Fortran 77 tiene dos tipos diferentes para punto flotante: real y doble precisión.
Por lo general el tamaño para el tipo real de 4 bytes y, para el doble precisión es de 8 bytes, pero depende de la máquina y el compilador. Algunas versiones no estandarizadas de Fortran usan la sintaxis real*8 para indicar una variable de punto flotante de 8 bytes.
program circuloEste programa toma como entrada un número real r dado por el usuario y muestra el área del círculo con radio r.
real r, area, pi
parameter ( pi = 3.14159 )
write (*,*) 'Entrar el radio r:'La sintaxis de la sentencia parameter es
read (*,*) r
area = pi*r*r
write (*,*) 'Area = ', areastop
end
Lo que se define en la sentencia parameter no es una variable, sino una constante, con lo que su valor nunca cambiará. Se define sólo una vez. La(s) sentencia(s) parameter deberán estar antes que cualquier sentencia de ejecución.
Ejemplos de constantes de tipo real:
El quinto tipo son las constantes lógicas. Estas sólo pueden tener uno de dos posibles valores, que son:
Observar que se requiere que se encierren con punto las palabras.
El último tipo son las constantes de caracteres, por lo general usadas como un arreglo de caracteres, llamado cadena. Consisten de una secuencia arbitraria de caracteres encerradas con apóstrofes (comillas sencillas), por ejemplo:
'ABC'
'Mi perro es muy bello. Su perra es muy traviesa'
Las constantes de cadenas son sensibles a mayúsculas y minúsculas. Se presenta un problema cuando se quiere poner un apóstrofe dentro de la cadena. En este caso la cadena debe ser encerrada entre comillas dobles, por ejemplo:
"Estos CD's están vacíos".
operando operador operando
y un ejemplo es:
x + y
Con lo anterior se presenta la pregunta de la precedencia, ¿la última expresión significa x + (2*y) o (x+2)*y? La precedencia de los operadores aritméticos en Fortran 77 es (de la más alta a la más baja):
** {exponenciación}
* / {multiplicación, división}
+ - {suma, resta}
Todos los operadores son evaluados de izquierda a derecha, excepto el operador de exponenciación, el cual tiene precedencia de derecha a izquierda. Si se desea cambiar el orden de evaluación, se pueden usar paréntesis.
Todos los operadores anteriores son binarios. Se tienen también operadores unarios, uno de ellos es el de negación - y que tiene una precedencia mayor que los anteriores. Por lo que la expresión -x+y significa lo que se esperaría.
Se debe tener cuidado al usar el operador de división, el cual devolverá distintos valores dependiendo del tipo de datos que se estén usando. Si ambos operandos son enteros, se hace una división entera, de otra forma se hace una división que devuelve un tipo real. Por ejemplo:
nombre_de_variable = expresión
La interpretación es como sigue: se evalúa el lado derecho y se asigna el valor del resultado a la variable de la izquierda.
La expresión de la derecha puede contener otras variables, pero estas nunca cambiarán de valor. Por ejemplo:
area = pi * r**2
no cambia el valor de pi, ni de r, solamente de área.
real x
x = x + 1
El 1 será convertido al tipo real, y se incrementa la variable x en uno. Sin embargo, en expresiones más complicadas, es una buena práctica de programación forzar explícitamente la conversión de tipos. Para números se tienen las siguientes funciones disponibles:
int
real
dble
ichar
char
Las primeras tres no requieren explicación. Con ichar se toma un caracter y se convierte a un entero y con char se hace lo contrario.
.LT. meaning <
.LE. <=
.GT. >
.GE. >=
.EQ. =
.NE. /=
Cómo no se pueden usar símbolos como < or = para comparación en Fortran 77, se tienen que usar abreviaturas de dos letras encerradas con puntos. Sin embargo en Fortran 90 ya pueden ser usados.
Las expresiones lógicas pueden ser combinadas con los operadores lógicos .AND. .OR. .NOT. que corresponden a los operadores lógicos conocidos Y, O y negación respectivamente.
logical a, b
a = .TRUE.
b = a .AND. 3 .LT. 5/2
El orden de precedencia es importante, como se muestra en el último ejemplo. La regla es que las expresiones aritméticas son evaluadas primero, después las que contienen operadores relacionales, y finalmente las de operadores lógicos. Por lo que a b se le asigna .FALSE. en el ejemplo anterior.
Las expresiones lógicas son usadas frecuentemente en sentencias condicionales como if.
Si más de una sentencia necesita ser ejecutada dentro de la sentencia if, entonces la siguiente sintaxis deberá ser usada:
if (expresión lógica) then
sentencias
endif
La forma más general de la sentencia if tiene la siguiente forma:
if (expresión lógica) then
sentencias
elseif (expresión lógica) then
sentencias
:
:
else
sentencias
endif
El flujo de ejecución es de arriba hacia abajo. Las expresiones condicionales son evaluadas en secuencia hasta que se encuentra una que es verdadera. Entonces el código asociado es ejecutado y el control salta a la siguiente sentencia después de la sentencia endif.
Se debe evitar anidar muchos niveles de sentencias if ya que es difícil de seguir.
Nota: La variable del ciclo do nunca deberá ser modificada por otras sentencias dentro del ciclo, ya que puede generar errores de lógica.
Muchos compiladores de Fortran 77 permiten que los ciclos do sean cerrados por la sentencia enddo. La ventaja es que la sentencia etiqueta puede ser omitida, ya que en este caso la sentencia enddo cierra la sentencia do más cercana. La construcción enddo es ampliamente usada, pero no es parte del ANSI Fortran 77.