6. Asignación y Expresiones

Constantes

La forma más simple de una expresión es una constante. Hay seis tipos de constantes, que corresponden con los tipos de datos que maneja Fortran. Se muestran a continuación ejemplos de constantes enteras:
1
0
-100
32767
+15
Ejemplos de constantes de tipo real:
1.0
-0.25
2.0E6
3.333E-1
La notación E se usa para números que se encuentran escritos en notación científica. Por lo que 2.0E6 es dos millones, mientras que 3.333E-1 es aproximadamente la tercera parte de uno

Para constantes que rebasen la capacidad de almacenamiento de un real se puede usar doble precisión. En este caso, la notación usada es el símbolon "D" en vez de "E". Por ejemplo:

2.0D-1
1D99
Por lo que 2.0D-1 es la quinta parte de uno almacenada en un tipo doble precisión y 1D99 es un uno seguido por 99 ceros.

El siguiente tipo son constantes complejas. Los cuales son indicados por un par de constantes (enteras o reales), separadas por una coma y encerrados entre paréntesis. Por ejemplo:

(2, -3)
(1., 9.9E-1)
El primer número denota la parte real y el segundo la parte imaginaria.

El quinto tipo, son las constantes lógicas. Estas sólo pueden tener uno de dos posibles valores, que son:

.TRUE.
.FALSE.
Observar que se requiere que se encierren con punto las palabras.

El último tipo son las constantes de caracteres. Estas son por lo general usadas como un arreglo de caracteres, llamado cadena. Estas consisten de una secuencia arbitraria de caracteres encerradas con apóstrofes (comillas sencillas), por ejemplo:

'ABC'
'¡Cualquier cosa!'
'Es un magnífico día'
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:
"Hay muchos CD's piratas"

Expresiones

Las expresiones más sencillas son de la forma
operando   operador   operando
y un ejemplo es
x + y
El resultado de una expresión es por si misma otro operando, por lo que se puede hacer anidamiento como lo siguiente:
x + 2 * 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, 3/2 es igual a 1 y 3./2. es igual a 1.5.

Asignación

Una asignación tiene la forma
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 cambiaran de valor. Por ejemplo:
area = pi * r**2
no cambia el valor de pi, ni de r, solamente de area.

Conversión de Tipos

Cuando diferentes tipos de datos ocurren en una expresión se lleva a cabo una conversión de tipos ya sea explícita o implícitamente. Fortran realiza algo de conversión ímplicita. Por ejemplo
real x
x = x + 1
el uno 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.

Ejemplo: ¿Cómo multiplicar dos variables tipo real x e y usando doble precisión y guardando el resultado en una variable de doble precisión w?

w = dble(x)*dble(y)
Observar que es diferente de:
w = dble(x*y)

Ejercicios

Exercicio A
Calcular el valor de las siguientes expresiones de Fortran 77 a mano:
2+1-10/3/4
2**3/3*2-5
-(3*4-2)**(3-2**1+1)/-2

Exercicio B
Escribir un programa en Fortran 77 que declare x e y como variables del tipo real y les asigne un tercio y dos tercios respectivamente. Sea w una variable de doble precisión y compara los valores de w después de asignar w = x*y y w = dble(x)*dble(y). Usar el comando write(*,*) para mostrar los resultados. Compara los dos resultados y explica brevemente por que se obtuvo o no se obtuvo 0.22222222...

 [5. Variables, declaraciones y tipos ]  [Tutorial de Fortran]  [7. Expresiones Lógicas ]