FORTRAN 90 Danilo Ueno Takahagi. Breve Histórico da Linguagem - A linguagem FORTAN foi a primeira...
Transcript of FORTRAN 90 Danilo Ueno Takahagi. Breve Histórico da Linguagem - A linguagem FORTAN foi a primeira...
FORTRAN 90FORTRAN 90
Danilo Ueno Takahagi
Breve Histórico da LinguagemBreve Histórico da Linguagem- A linguagem FORTAN foi a primeira linguagem de alto nível usada para programação de computadores, proposta por J. Backus, em 1953;
- primeiro compilador para IBM 704 em 1957;
- criação de FORTRAN 90 devido a pouca capacidade do FORTRAN 77 em relação a C, C++,ADA;
Objetivos:Objetivos:
FORmula TRANslation;Facilidade de transcrição de fórmulas
matemáticas para serem usadas nos computadores;
Direcionada para aplicações em matemática, engenharia e análises científicas;
Itens Fundamentais:Itens Fundamentais:
Tipos de DadoVariáveisComando de AtribuiçãoExpressões AritméticasExpressões LógicasEntrada e SaídaEstrutura CondicionalEstrutura de Repetição
Tipos de DadoTipos de Dado
INTEGER;REAL;COMPLEX;LOGICAL;CHARACTER.
Variáveis:Variáveis:1 a 31 caracteres;1º caractere deve ser uma letra;Apenas letras, undescores, e dígitos são
permitidos;Não são sensíveis a maiúsculo ou
minúsculo;Podem ser utilizadas palavras chaves;Podem ser utilizadas nomes de
procedimentos intrínsecos.
Declaração de Variáveis:Declaração de Variáveis:
Exemplos:
character*3 :: preal :: rcomplex :: c logical :: l
nome-do-tipo :: lista-de-identificadores
Comando de AtribuiçãoComando de AtribuiçãoIdentificador = expressão
- Exemplos: -Variáveis inicializadas:
i = 2 integer :: count = 0
r = 0.0 real :: sum = 0.0
c = “ABC” character*4 :: c = “(cr)”
l = .TRUE. Logical :: l = .FALSE.
Expressões Aritméticas:Expressões Aritméticas:OPERADOR OPERAÇÃO
+ Adição
- Subtração
* Multiplicação
/ Divisão
** Potenciação
prioridade operação
1ª Potenciação
2ª Multiplicação,divisão
3ª Adição,subtração
Algumas Funções Intrínsecas:Algumas Funções Intrínsecas:Nome Definição Tipo da função
ALOG 10(X) logaritmo na base 10 de X Tipo do argumento de X
EXP (X) o Nº e elevado a X Tipo do argumento de X
ABS (X) valor absoluto de X Tipo do argumento de X
BIT_SIZE(I) Retorna o número de bits do inteiro i
Inteiro
INT (A,Kind) conversão de nº. não real para inteiro, truncando
Inteiro
MAX (A1,A2,A3,...) Valor máximo da seqüência Tipo do argumento
Expressões Lógicas:Expressões Lógicas:Operador
(Fortran 90)
Operador
(Fortran 77)
Significado
< .LT. Less than
<= .LE. Less than or equal to
= = .EQ. Equal to
/= .NE. Not Equal to
> .GT. Greater than
>= .GE. Greater than or equal to
Operadores lógicos: .AND. Para conjunção
.OR. Para disjunção
.NOT. Para a negação
Entrada e Saída:Entrada e Saída:
Externo Memória do Computador
INPUT teclado converte forma interna integer array arq disco real fita magnética character
OUTPUT monitor converte forma externa integer array
impressora real fita magnética character
Comandos de Entrada e Saída:Comandos de Entrada e Saída:READ (cilist) input_listWRITE(cilist) output_list
cilist – control information list
Composto pelos especificadores do comando, como a unit (dispositivo de entrada) e a formatação dos dados.
Default – unit 5, para entrada de dados
unit 6, para saída de dados
Exemplos:Exemplos:READ (unit = 5,fmt = ´(3F6.2)´) x,y,zREAD (unit = *,fmt = ´(5F6.3)´) p,q,r,s,tWRITE (unit = 6,fmt = 200) x
200 FORMAT (F5.2)• WRITE (unit = *,fmt = 201) x/y
201 FORMAT (F5.2)
Descritores de edição:Descritores de edição:
I – edita tipo inteiroF ou E – edita tipo realA – edita tipo caractereL – edita tipo lógicoX,T,TL,TR – usado para controlar onde o dado
deve ser lido numa seqüência de entrada e onde deve ser colocado na seqüência de saída.
Exemplos de formatações:Exemplos de formatações:Linha de entrada de dado: 123456789- READ ´(4X,I5)´, num 56789 será armazenado em num- READ ´(T4,I2,T8,I2,T2,I4)´, x,y,z x = 45 y = 89 z = 2345- READ´(F3.1,F2.2,F3.0,TL6,F4.2)´,r1,r2,r3,r4 r1 = 12.3 r2 = 0.45 r3 = 678.0 r4 = 34.56
Estruturas Condicionais:Estruturas Condicionais:
Estrutura condicional simplesComando IF lógicoEstrutura condicional compostaEstrutura CASE
Estrutura condicional simples:Estrutura condicional simples:
IF,THEN e END IF – palavras chaves
Condição B – expressão lógica
IF (condição B) THEN seqüência de A comandosEND IF
Comando IF lógico:Comando IF lógico:
IF (condição B) comando A
IF – palavra chave
Condição B – é uma expressão lógica
Comando A – qualquer comando, exceto um comando DO ou outro comando IF
Estrutura Condicional Composta:Estrutura Condicional Composta:
IF (condição B) THEN
seqüência de comandos
ELSE
seqüência B de comandos
END IF
IF,THEN,ELSE e END IF – palavras chaves
Condição B – uma expressão lógica
PROGRAM quadratic
REAL, PARAMETER :: delta=0.0
REAL :: a,b,c,d,sqrt_d,x1,x2
PRINT *,"Digite os tres coeficientes a,b,and c"
PRINT * !para pular uma linha
READ *,a,b,c
d=b**2-4*a*c
IF (d>delta) THEN
sqrt_d = SQRT(d)
x1 = (-b+sqrt_d)/(a+a)
x2 = (-b-sqrt_d)/(a+a)
PRINT *,"A equacao tem duas raizes reais: ",x1," e ",x2
ELSE IF (d==delta) THEN
x1 = -b/(a+a)
PRINT *,"A equacao tem uma raiz real: ",x1
ELSE
PRINT *,"A equacao nao tem raizes reais"
END IF
END PROGRAM quadratic
Estrutura CASE:Estrutura CASE:SELECT CASE (expressão case)
CASE (case selecionado)
bloco de comandos
CASE (case selecionado)
bloco de comandos
.
.
END SELECT
Exemplo da estrutura CASE:Exemplo da estrutura CASE:! Programa que calcula qual estação do ano pertence o mês
SELECT CASE (mes)
CASE (“08”:”10”)
PRINT *,date, “esta na primavera”
CASE ( “11”,”12”,”01”)
PRINT *,date, “esta no verão”
CASE (“02”,”03”,”04”)
PRINT *,date, “esta no outono”
CASE (“05”,”06”,”07”)
PRINT *,date, “esta no inverno”
END SELECT
Estrutura de Repetição:Estrutura de Repetição:
DO loops controlados DO loops flexíveisDO WHILE
Estrutura DO:Estrutura DO:DO count = initial, final, inc
...
bloco de comandos
...
END DO
DO e END DO – palavras chaves
count – variável contadora
initial – valor inicial
final – valor final
inc - incremento
Exemplo da Estrutura DO:Exemplo da Estrutura DO:estrutura DO contador de iteração valores da
variável
DO i = 1,10 10 1,2,3,4,5,6,7,8,9,10
DO j = 20,50,5 7 20,25,30,35,40,45,50
DO x = -20,20,6 7 -20,-14,-8,-2,4,10,16
DO m = 20,-20,-6 7 20,14,8,2,-4,-10,-16
Estrutura DO mais flexível:Estrutura DO mais flexível:
DO count = 1,max_iterations
...
IF (term < epsilon) EXIT
...
END DO
...
OBS: depois de obedecer o comando EXIT ou após obedecer a quantidade máxima de iterações, a execução do programa continua a partir do próximo comando.
Estrutura DO WHILE:Estrutura DO WHILE:
DO WHILE (condição A) ... bloco de comandos ...END DO
DO, WHILE, END DO - palavras chaves
Condição A – expressão lógica
Ponteiros em FORTRAN 90:Ponteiros em FORTRAN 90:nome-do-tipo, POINTER :: lista-de-identificadores
Exemplos:
REAL, POINTER :: p,q,r,s
INTEGER, POINTER :: i,j,k
nome-do-tipo, TARGET :: lista-de-identificadores
O objeto apontado pelo ponteiro deve ter a seguinte declaração:
Exemplo1:Exemplo1:REAL :: aREAL, TARGET :: bREAL, POINTER :: pINTEGER, POINTER :: q
- p pode apontar para a variável b (real, target);- p não pode apontar para a (não tem target);- q não pode apontar para b (tipos diferentes);
Exemplo2:Exemplo2:REAL, POINTER :: u,v,w
REAL, TARGET :: x
u => x
v => u
u => w
u aponta para x;
v aponta o que x aponta (ou seja, x);
u tem associação indefinida.
Dissociação de ponteiros: Dissociação de ponteiros:
NULLIFY(lista-de-ponteiros)
EXEMPLOS:
NULLIFY(p)
NULLIFY(a,b,c,q,r)
Funções para ponteiros:Funções para ponteiros:ASSOCIATED(ponteiro)- verifica se o ponteiro entre parênteses possui
alguma associação (retorna TRUE ou FALSE)
ALLOCATE(ponteiro)- aloca espaço na memória que fica associado ao
ponteiro
DEALLOCATE(ponteiro)- desaloca o espaço na memória
PROGRAM pointer
TYPE :: cadastro
CHARACTER(10) :: descricao
INTEGER :: numero
END TYPE cadastro
TYPE (cadastro), POINTER :: ptr_1, ptr_2
ALLOCATE (ptr_1) !Cria um local para armazenar o tipo derivado
!cadastro e associa ptr_1 com esse local
ptr_1%descricao = 'carlos' !Armazena valores na estrutura criada
ptr_1%numero = 1234
PRINT "(2A,I6)","ptr_1 = ",ptr_1
ptr_2 => ptr_1 !Associa ptr_2 com o que o ptr_1 apontava
NULLIFY(ptr_1) !faz a dissociação
IF (.NOT. ASSOCIATED (ptr_1)) THEN
PRINT "(A)","ptr_1 esta dissociado"
END IF
PRINT "(2A,I6)","ptr_2 = ",ptr_2
DEALLOCATE(ptr_2) !Desaloca o espaço da memória e dissocia o ptr_2
End Program pointer
Bibliografia:Bibliografia:
1. Professores da UFMG - “Fortran Estruturado”;
2. REDWINE,C. - “Upgrading to Fortran 90”;
3. ELLIS,T.M.R.; PHILIPS.I.R.; LAHEY,T.M. - “Fortran 90 Programing”
FIMFIM