Tipos de Dados

O Fortran trabalha com 5 tipos de dados intrínsecos, contudo, é possível derivar seus próprios tipos de dados.

Os 5 tipos intrínsecos de dados são:

  • Tipo Inteiro integer
  • Tipo Real real
  • Tipo Complexo complex
  • Tipo Lógico logical
  • Tipo Literal (Caractere) character

Tipo Inteiro

O tipo inteiro pode armazenar apenas valores inteiros. O exemplo a seguir extrai o maior valor que pode ser armazenado em um tipo inteiro usual de 4 bytes.

program testingInt
implicit none

   integer :: largeval
   print *, huge(largeval)

end program testingInt

Após compilar o código fonte fortran e executar o programa, o resultado produzido será:

2147483647

Perceba que a função huge() retorna o maior número possível que pode ser armazenado pelo tipo de dado inteiro específico. É permitido especificar o número de bytes usando o especificador kind.

Por exemplo:

program testingInt
implicit none

   !two byte integer
   integer(kind=2) :: shortval

   !four byte integer
   integer(kind=4) :: longval

   !eight byte integer
   integer(kind=8) :: verylongval

   !sixteen byte integer
   integer(kind=16) :: veryverylongval

   !default integer 
   integer :: defval

   print *, huge(shortval)
   print *, huge(longval)
   print *, huge(verylongval)
   print *, huge(veryverylongval)
   print *, huge(defval)

end program testingInt

Após compilar o código fonte fortran e executar o programa, o resultado produzido será:

32767
2147483647
9223372036854775807
170141183460469231731687303715884105727
2147483647

Tipo real

Dados do tipo real real type são usadaos para armazenar numeros de ponto flutuante, ou seja valores numéricos com casas decimais, por exemplo: 2.03.1415-100.8e3.

Tradicionalmente há dois tipos de dados reais:

  • Real de precisão simples (padrão)
  • Real de precisão dupla

As versões a partir Fortran 90 provém mais controles sobre a precisão de dados do tipo real e inteiros mediante o especificadorkind, que iremos estudar com mais detalhes no capítulo de Números.

O exemplo a seguir mostra o uso de dados do tipo real:

program division   
implicit none  

   ! Define real variables   
   real :: p, q, realRes 

   ! Define integer variables  
   integer :: i, j, intRes  

   ! Assigning  values   
   p = 2.0 
   q = 3.0    
   i = 2 
   j = 3  

   ! floating point division
   realRes = p/q  
   intRes = i/j

   print *, realRes
   print *, intRes

end program division  

Após compilar o código fonte fortran e executar o programa, o resultado produzido será:

0.666666687    
0

Tipo complexo

This is used for storing complex numbers. A complex number has two parts, the real part and the imaginary part. Two consecutive numeric storage units store these two parts.

Por exemplo, os números complexos (3.0, -5.0) e 3.0 – 5.0i são equivalentes.

Discutiremos os tipos complexos com mais detalhes em um capítulo específico para Números.

Tipo lógico

Há somente dois valores possíveis para um tipo de dados lógico:

  • .true.
  • .false.

Tipo literal (caractere)

O tipo character armazena caracteres e strings. O comprimento da string pode ser especidficado pelo especificador len . Se nenhum especificador for definido o padrão será 1.

Por exemplo,

character(len=40) :: nome  
nome = "Portal Fisica”

A expressão, nome(1:4) resultará na substring "Port".

Tipo implicito

Versões antigas do Fortran (FORTRAN 77 e anteriores) permitiam uma característica chamada tipagem implícita, ou seja, não era necessário declarar o tipo das variáveis antes de usá-las. Se uma variável não fosse declarada, então o primeiro caractere do seu nome determinaria o seu tipo.

Seguindo as regras da tipagem implícita, o nome de varáveis iniciando pelas letras i, j, klm, ou n, serão consideradas variáveis de tipo inteiro (integer) todas as demais serão consideradas variáveis de tipo real (real).

NOTA Recomendado como Boa prática de programação, você deve procurar sempre declarar todas as variáveis utilizadas em seu programa. Para tanto, você deve sempre colocar após a instrução do nome do programa a instrução implicit none

Por exemplo:

program teste
implicit none
!A instrução acima desliga a tipificação implícita

    ...

end program teste