3.3 Expressões

Como o nome da linguagem sugere iremos trabalhar com expressões matemáticas. O primeiro passo para construir uma expressão em Fortran é que a atribuição de uma expressão à uma variável, que sempre fazemos da forma:

nome-da-variável = expressão-matemática

e não o contrário tipo expressão-matemática = nome-da-variável. A expressão é calculada do lado direito da igualdade de atribuída à variável do lado esquerdo.

Dentro das expressões matemáticas podemos realizar as operações:


Tabela 3.1: Operações matemáticas no fortran.
Comando Descrição do Comando          
$+$ Adição ($a=b+c$)          
$-$ Subtração ($a=b-c$)          
$*$ Multiplicação ($a=b*c$)          
$/$ Divisão ($a=b/c$)          
$**$ Exponenciação ($a=b**c$)          


As operações matemáticas serão utilizadas combinadas em uma expressão. Para isso é necessário estabelecer uma sequência onde qual operação aritmética é realizada primeiro. Em uma expressão o que é realizado primeiro a multiplicação ou a soma? No Fortran a sequência é:

  1. O conteúdo dos parênteses são realizados primeiro, partindo do mais interno para o mais externo;
  2. Todas as exponenciais são calculadas partindo da direita para a esquerda;
  3. Todas as multiplicações e divisões são calculadas partindo da esquerda para a direita;
  4. Todas as adições e subtrações são calculadas partindo da esquerda para a direita.

Para testarmos crie o programa prog3.f90 como dado abaixo:

!
program prog3
implicit none
!
real(kind=8) :: distancia1,distancia2,distancia3      
real(kind=8) :: aceleracao,tempo
!
aceleracao = 3.0D0
tempo = 12.0D0
!
distancia1 = 0.5 * aceleracao * tempo ** 2.0D0
distancia2 = (0.5 * aceleracao * tempo) ** 2.0D0
distancia3 = 0.5 * aceleracao * (tempo ** 2.0D0)
!
write(*,*) distancia1,distancia2,distancia3
!
stop
end program prog3

compile (gfortran -o prog3.x prog3.f90) e rode (./prog3.x) e veja como qual operação é realizada primeiro.

Para reforçar esta parte, considere os números reais $a=3.0$, $b=2.0$, $c=5.0$, $d=4.0$, $e=10.0$, $f=2.0$ e $g=3.0$, faça um programa que calcule a expressões abaixo3.6:

res1 = a*b+c*d+e/f**g
res2 = a*(b+c)*d+(e/f)**g
res3 = a*(b+c)*(d+e)/f**g

Arredondamento na Divisão de Inteiros e Reais

Para desenvolver esta parte, nada melhor do que fazer um programa e entender como o Fortran exprime os resultados de uma divisão.

Declare somente variáveis inteiras e realize as seguintes divisões: $3/4=?$, $4/4=?$, $5/4=?$, $6/4=?$, $7/4=?$, $8/4=?$, $9/4=?$. Para a divisão com reais não teremos problemas e na mistura entre declarações de reais e inteiros, podemos complementar o programa para tirar essas dúvidas, como o programa prog4,f90.

program prog4
implicit none
!
real(kind=8) :: r1, r2, r3, r4, r5
real(kind=8) :: r_r1, r_r2
integer :: i1, i2, i3, i4, i5, i6, i7
integer :: i_r1, i_r2, i_r3, i_r4, i_r5
integer :: i_r6, i_r7, i_r8, i_r9, i_r10
!
i1=3; i2=4; i3=5; i4=6; i5=7; i6=8; i7=9
!
r1=3.0d0; r2=4.0d0; r3=5.0d0; r4=6.0d0; r5=7.0d0
!
i_r1=i1/i2; i_r2=i2/i2; i_r3=i3/i2
i_r4=i4/i2; i_r5=i5/i2; i_r6=i6/i2
i_r7=i7/i2; i_r8=i6/r1; i_r9=i7/r1
i_r10=i1/r1
!
r_r1 = i5 / r3
r_r2 = r1 / i6
!
write(*,*) ':-) Resultado - Inteiro (-:'
write(*,*) '3/4=',i_r1,'4/4=',i_r2,'5/4=',i_r3
write(*,*) '6/4=',i_r4,'7/4=',i_r5,'8/4=',i_r6
write(*,*) '9/4',i_r7
write(*,*) '8/3.0=',i_r8,'9/3.0=',i_r9,'3/3.0=',i_r10
write(*,*) ':-) Resultado - Real (-:'
write(*,*) '7/5.0=',r_r1,'3.0/8=',r_r2
!
stop
end program prog4

O resultado deve ser como abaixo:

[16:10][sato@df2]~/prog]
$./prog4.x 
 :-) Resultado - Inteiro (-:
 3/4=           0 4/4=           1 5/4=           1
 6/4=           1 7/4=           1 8/4=           2
 9/4           2
 8/3.0=           2 9/3.0=           3 3/3.0=           1
 :-) Resultado - Real (-:
 7/5.0=   1.3999999999999999      3.0/8=  0.37500000000000000     
[16:10][sato@df2]~/prog]
$

Observações



Subsecções