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:
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:
|
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 é:
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 , , , , , e , 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: , , , , , , . 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