Expressões

As expressões são semelhantes às expressões quotidianas da matemática, elas resultam em valores os quais podem ser atribuídos às variáveis de acordo com o tipo do resultado da expressão e/ou da variável. O Fortran permite as seguintes categorias de expressões:

  • Expressões Numéricas
  • Expressões Lógicas
  • Expressões Literais

Operadores

Um operador é um símbolo que indica ao compilador para efetuar uma manipulação específica matemática ou lógica. O Fortran permite as seguintes categorias de operadores:

  • Operadores Aritméticos
  • Operadores Relacionais
  • Operadores Lógicos
  • Operadores Literais

A seguir vamos estudar cada um desses operadores.

Operadores Aritméticos

A tabela a seguir mostra todos os operadores aritméticos suportados pelo Fortran.

Assumindo que:

  • A contém o valor 5
  • B contém o valor 3
OperadorDescriçãoExemplo
+Operador Adição, soma o primeiro e o segundo operandoA + B resulta 8
-Operador Subtração, subtrai o segundo operando do primeiroA - B resulta 2
*Operador Multiplicação, multiplica ambos os operadoresA * B resulta 15
/Operador Divisão, divide o primeiro pelo segundo operandoA / B resulta 1
**Operador Exponenciação, eleva o primeiro operando à potência da ordem do segundoA ** B resulta 125

Exemplo

Estude o código fonte e tente entender todos os operadores aritméticos disponíveis em Fortran:

program op_aritmetica
! Este programa efetua um cálculo aritmético
!
implicit none
! declaração de variáveis
integer :: a, b, c
! atribuindo valores
a = 5
b = 3
! Exponenciação
c = a ** b
! Mostrando o resultado
print *, “c = “, c
! Multiplicação
c = a * b
! resultado
print *, “c = “, c
! Divisão
c = a / b
! resultado
print *, “c = “, c
! Adição
c = a + b
! resultado
print *, “c = “, c
! Subtracão
c = a – b
! resultado
print *, “c = “, c
end

view rawop_aritmetica.f90 hosted with 

❤

 by GitHub

Compilando e executando o código fonte fortran, o resultado será:

c = 125
c = 15
c = 1
c = 8
c = 2

Operadores Relacionais

A tabela a seguir mostra todos os operadores relacionais suportados pelo Fortran.

Assumindo que:

  • A contém o valor 10
  • B contém o valor 20
OperadorEquivalenteDescriçãoExemplo
==.eq.Verifica se os valores de dois operandos são iguais ou não, se sim, então a condição se torna verdadeira(A == B) é Falso
/=.ne.Verifica se os valores de dois operandos são iguais ou não, se os valores não são iguais, a condição torna-se verdadeira.(A != B) é Verdadeiro
>.gt.Verifica se o valor do operando esquerdo é maior que o valor do operando direito, se sim, a condição se torna verdadeira.(A > B) é Falso
<.lt.Verifica se o valor do operando esquerdo é menor que o valor do operando direito, se sim, a condição se torna verdadeira.(A < B) é Verdadeiro
>=.ge.Verifica se o valor do operando esquerdo é maior ou igual ao valor do operando direito, se sim, a condição se torna verdadeira.(A >= B) é Falso
<=.le.Verifica se o valor do operando esquerdo é menor ou igual ao valor do operando direito, se sim, a condição se torna verdadeira.(A <= B) é Verdadeiro

Exemplo

Estude o código fonte e tente entender todos os operadores relacionais disponíveis em Fortran:

program logicalOp

! this program checks logical operators
implicit none  

   ! variable declaration
   logical :: a, b

   ! assigning values 
   a = .true.   
   b = .false. 

   if (a .and. b) then
      print *, "Line 1 - Condition is true"
   else
      print *, "Line 1 - Condition is false"
   end if

   if (a .or. b) then
      print *, "Line 2 - Condition is true"
   else
      print *, "Line 2 - Condition is false"
   end if

   ! changing values 
   a = .false.   
   b = .true. 

   if (.not.(a .and. b)) then
      print *, "Line 3 - Condition is true"
   else
      print *, "Line 3 - Condition is false"
   end if

   if (b .neqv. a) then
      print *, "Line 4 - Condition is true"
   else
      print *, "Line 4 - Condition is false"
   end if

   if (b .eqv. a) then
      print *, "Line 5 - Condition is true"
   else
      print *, "Line 5 - Condition is false"
   end if

end program logicalOp

Compilando e executando o código fonte fortran, o resultado será:

Line 1 - Condition is false
Line 2 - Condition is true
Line 3 - Condition is true
Line 4 - Condition is true
Line 5 - Condition is false

Operadores Lógicos

Os operadores lógicos em Fortran funcionam apenas com os valores lógicos .true. (0) e .false. (1).

A tabela a seguir mostra todos os operadores lógicos suportados pelo Fortran.

Assumindo que

  • A contém o valor .true.
  • B contém o valor .false.
OperadorDescriçãoExemplo
.and.Operador lógico E. Se ambos operandos forem não-zero, então a condição se torna verdadeira.(A .and. B) é falso
.or.Operador lógico OU. Se qualquer um dos operandos for não-zero, então a consdição se torna verdadeira.(A .or. B) é verdadeiro
.not.Operador lógico NÃO. Usado para inverter o estado lógico do seu operando. Se a condição for não-zero (falso) então o operador NÃO a tornará verdadeiro.!(A .and. B) é verdadeiro
.eqv.Operador lógico EQUIVALENTE. Usado para checar a equivalência de dois valores lógicos.(A .eqv. B) é falso
.neqv.Operador lógico NÃO-EQUIVALENTE. Usado para checar a não-equivalência de dois valores lógicos.(A .neqv. B) é verdadeiro

Exemplo

Estude o código fonte e tente entender todos os operadores lógicos disponíveis em Fortran:

program logicalOp

! this program checks logical operators
implicit none  

   ! variable declaration
   logical :: a, b

   ! assigning values 
   a = .true.   
   b = .false. 

   if (a .and. b) then
      print *, "Line 1 - Condition is true"
   else
      print *, "Line 1 - Condition is false"
   end if

   if (a .or. b) then
      print *, "Line 2 - Condition is true"
   else
      print *, "Line 2 - Condition is false"
   end if

   ! changing values 
   a = .false.   
   b = .true. 

   if (.not.(a .and. b)) then
      print *, "Line 3 - Condition is true"
   else
      print *, "Line 3 - Condition is false"
   end if

   if (b .neqv. a) then
      print *, "Line 4 - Condition is true"
   else
      print *, "Line 4 - Condition is false"
   end if

   if (b .eqv. a) then
      print *, "Line 5 - Condition is true"
   else
      print *, "Line 5 - Condition is false"
   end if

end program logicalOp

Compilando e executando o código fonte fortran, o resultado será:

Line 1 - Condition is false
Line 2 - Condition is true
Line 3 - Condition is true
Line 4 - Condition is true
Line 5 - Condition is false

Ordem de precedência dos Operadores em Fortran

A precedência de operadores determina o agrupamento na solução de termos em uma expressão. Isto afeta a manaira como a expreção será solucionada. Certos operadores têm uma precedência (preferência) sobre os outros, por exemplo, o operador multiplicação tem precedência maior do que o operador adição.Exemplo

x = 7 + 3 * 2

Nessa expressão o valor 13 será atribuído à variável x e não 20. Embora o fortran lei as expressões da esquerda para a direita, isso acontece porque o operador * tem precedência maior do que o operador +, então, primeiro o compilador efetua a multiplicação 3*2 e depois a adição com 7.

Na tabela a seguir se encontra a listagem dos operadores que sua ordem decrescente de precedência do topo para baixo na tabela, os operadores de menor precedência estao bem abaixo.

CategoriaOperadorAssociatividade
NÃO lógico e sinal negativo.not.(-)Da esquerda para direita
Exponenciação**Da esquerda para direita
Multiplicativos*/Da esquerda para direita
Aditivos+-Da esquerda para direita
Relacionais<,<=>>=Da esquerda para direita
Equivalências==/=Da esquerda para direita
E lógico.and.Da esquerda para direita
OU lógico.or.Da esquerda para direita
Atribuição=Da direita para esquerda

NOTA Em uma expressão, os operadores com maior precedência serão solucionados primeiro.

Exemplo

Estude o código fonte e tente entender a ordem de precedência dos operadores em Fortran:

program precedenceOp
! this program checks logical operators

implicit none  

   ! variable declaration
   integer :: a, b, c, d, e

   ! assigning values 
   a = 20   
   b = 10
   c = 15
   d = 5

   e = (a + b) * c / d      ! ( 30 * 15 ) / 5
   print *, "Value of (a + b) * c / d is :    ",  e 

   e = ((a + b) * c) / d    ! (30 * 15 ) / 5
   print *, "Value of ((a + b) * c) / d is  : ",  e 

   e = (a + b) * (c / d);   ! (30) * (15/5)
   print *, "Value of (a + b) * (c / d) is  : ",  e 

   e = a + (b * c) / d;     !  20 + (150/5)
   print *, "Value of a + (b * c) / d is  :   " ,  e 

end program precedenceOp

Compilando e executando o código fonte fortran, o resultado será:


Value of (a + b) * c / d is : 90
Value of ((a + b) * c) / d is : 90
Value of (a + b) * (c / d) is : 90
Value of a + (b * c) / d is : 50

			
Verified by MonsterInsights