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
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:
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
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.
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.
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