Expressões e Operadores

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
Tabela 1 – Operadores Aritméticos
Operador Descrição Exemplo
+ Operador Adição, soma o primeiro e o segundo operando A + B resulta 8
- Operador Subtração, subtrai o segundo operando do primeiro A - B resulta 2
* Operador Multiplicação, multiplica ambos os operadores A * B resulta 15
/ Operador Divisão, divide o primeiro pelo segundo operando A / B resulta 1
** Operador Exponenciação, eleva o primeiro operando à potência da ordem do segundo A ** B resulta 125

Exemplo

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

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
Tabela 2 – Operadores Relacionais
Operador Equivalente Descrição Exemplo
== .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.
Tabela 3 – Operadores Lógicos
Operador Descrição Exemplo
.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.

Tabela 4 – Ordem de precedência dos peradores
Categoria Operador Associatividade
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

Anúncios