Mini Curso de
Programação Fortran
Universidade Federal de Pelotas
XVII Semana Acadêmica da Meteorologia
29 de novembro a 03 de dezembro
Prof. Marcello Macarthy
[email protected]
Sumário
1 Introdução
2 Formato do Código-Fonte
3 Tipos de Variáveis
4 Expressões e Atribuições Escalares
5 Comandos
6 Matrizes
7 Subprogramas e Módulos
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
2
Introdução
• Lógica  Não há consenso quanto à definição da lógica. Alguns
autores definem-na como o estudo do processos válidos e gerais
pelos quais atingimos a verdade, outros como a ciência das leis
do pensamento, ou somente como o estudo dos princípios da
inferência válida. Esta pluralidade de definições dá-nos conta da
diversidade de estudos que são abrangidos pela Lógica.
• Algoritmos  Define por uma seqüência lógica de passos que o
computador executara fielmente para que se obtenha um resultado
satisfatório. Estas seqüências podem ou não ser executadas
dependendo do andamento do algoritmo, porém estes passos sempre
serão alcançados em algum momento do algoritmo.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
3
Introdução
• Programação  É o processo de definir, utilizando uma linguagem
de programação , os comandos, as instruções que o computador
deve executar para realizar determinada tarefa em síntese solução
de problemas em diversas áreas.
• Linguagem de Programação  FORTAN (FORmula TRANslation)
– Primeira linguagem de alto nível usada para programação de
computadores, proposta por J. Backus, em 1953.
– Facilidade de transcrição de fórmulas matemáticas.
– Direcionada para aplicações em física, matemática, engenharia,
meteorologia e análises científicas entre outras...
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
4
Linguagem
Fortran
Formato do Programa Fonte
Três formatos básicos de arquivos
• Programa-Fonte  Trata-se do programa e/ou dos subprogramas
escritos pelo programador, usando algum tipo de editor de texto, de acordo
com as regras definidas pela linguagem de programação de alto nível.
• Programa-Objeto  Trata-se do programa-fonte compilado pelo
compilador. Esta é a transcrição realizada pelo compilador do programafonte fornecido pelo programador para uma linguagem de baixo nível, como
Assembler ou outro código diretamente interpretável pela CPU.
• Programa executável  Após a fase de compilação, onde os
programas objetos são criados, o agente de compilação aciona o linker, o
qual consiste em um programa especial que agrupa os programas objetos
de forma a criar um arquivo final, o programa executável.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
5
Linguagem Fortran
Algoritmo – Pseudo Código
Fortran
Inicio Algoritmo
Declarar variaveis
Entrada - Ler
Processamento - Executar
Saída – Imprimir (Escrever)
Fim Algoritmo
Program <nome do programa>
Declaração de variáveis>
Read
Processamento
(sequencial / decisão/repetição)
Print
Pause (pausa)
Stop (fim da execução
End (programa)
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
6
Linguagem Fortran
• Todo programa em fortran deve começar pela palavra program e
em seguida deve ser dado um nome para esse programa. Evitar
deixar espaço entre palavras, quando for necessário utilizar o
underline (_). Não usar acentuação;
• Ponto de exclamação “!” significa que pode inserir comentários
em qualquer ponto do código-fonte.
• Impicit none  se não for usado o fortran entende que todas as
variaveis são reais, ou seja, impede a possibilidade de haver nomes
de variáveis não definidos, os quais possuem o seu tipo implícito
• Declaração de Variáveis (mesmas regras das variáveis em
pseudocódigo) Não utilizar acentuação; Variáveis com nomes
compostos: deve ser usado o símbolo underline para separá-las;
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
7
Linguagem Fortran
Exemplo 1
program apresentação
implicit none
print *, “Semana Acadêmica da Meteorologia”
end program
Exemplo 1.1
program format1
print 1
1 format (100x," Semana Acadêmica da Meteorologia ")
pause
stop
end
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
8
Linguagem Fortran
• Format  Descreve o formato em que os dados devem ser
transferidos. Especifica conversão interna e externa sofrida pelos
mesmos. Sintaxe n format(ef,[ef,...,ef]])
Onde: n Rótulo associado aos comandos de entrada e saída. e Ef Especificação do formato.
• Formato para mensagens
Print 1
1 format (///3x,”escrever o seu nome”///)
Onde: / : indica quebra de linha.
3x: indica espaçamento horizontal.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
9
Linguagem Fortran
Formato para variáveis:
• Inteiras  Iw- Inteiro
(posições) ocupados.
w- Tamanho Maximo de bytes
• Caracteres  aw- Inteiro
(posições) ocupados.
w- Tamanho Maximo de bytes
• Reais  Fw.d – Constante inteira indicando largura do campo
externo, em caracteres. w- Tamanho Maximo de bytes (posições)
ocupadas d- número de casas decimais
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
10
Linguagem Fortran
Comandos para entrada e saída de dados
• READ - Entrada de Dados – Ler dados a partir do teclado;
Sintaxe  read (unit, fmt) lista de variáveis
Unit – dispositivo de entrada(arquivo, teclado) padrão teclado *
Fmt – formato pode ser um rotulo ou *
• PRINT - Saída de dados - Transferir dados para o monitor
Sintaxe  print * , lista de variáveis ou print *,”mensagem”
• Write - Saída de dados
Sintaxe  write * , lista de variáveis ou write *,”mensagem”
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
11
Linguagem Fortran
• Conjunto de caracteres aceitos
Caractere
Nome/Função
Caractere
Nome/Função
=
Igual
)
Parênteses D
+
Soma
,
Virgula
-
Subtração
.
Ponto Decimal
*
Multiplicação
$
Cifrão
/
Divisão
:
Dois Pontos
(
Parênteses E
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
12
Linguagem Fortran
Declaração de tipo de variável
A forma geral de uma declaração de tipo de variáveis é:
<tipo>[([KIND=]<parâmetro de espécie>)][,<lista de atributos>] :: <lista de entidades>
• onde <tipo> especifica o tipo de variável, <parâmetro de espécie>
especifica a espécie da variável, <lista de atributos> é um dos
seguintes:
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
13
Linguagem Fortran
•
•
•
•
•
•
PARAMETER DIMENSION(<lista de extensões>)
PUBLIC INTENT(<inout>)
PRIVATE OPTIONAL
POINTER SAVE
TARGET EXTERNAL
ALLOCATABLE INTRINSIC
e cada entidade é
<nome do objeto> [(lista de extensões)] [*char-len] [= expressão de inicialização]
ou <nome da função> [*char-len]
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
14
Linguagem Fortran
• Aritméticas  +, -, *, /,** - Resultado sempre um número real,
inteiro ou complexo.
• Caracteres  Produz um valor que é sempre uma cadeia de
caracteres. // Concatenar. ‘AB’//’CDE’ ‘ABCDE’
• Relacionais Um valor que é sempre uma constante lógica.
Igual a
a.EQ.b
Diferente de
a.NE.b
Menor que
a.LT.b
Menor ou igual
a.LE.b
Maior
a.GT.b
Maior ou igual
a.GE;b
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
15
Linguagem Fortran
Exemplo
• Inteiros
A=10
Print 1,a
1 format(3x,i2)
• Caracter
A=‘abc’
Print 1,a
1 format(3x,a3)
• Reais
A=32.5894
Print 1,a
1 format(3x,f7.2)
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
16
Linguagem Fortran- Expressões
• Logicas Um valor que é sempre uma constante lógica.
.NOT.
.NOT.a
.AND.
a.AND.b
.OR.
a.OR.b
• Funções
MOD (EAx, EAy) Onde : EAx – Dividendo e EAy – Divisor
SQRT (EA)
IFIX (EA) conversão de real para inteiro – parâmetro = real, retorno = inteiro
FLOAT (EA) conversão de inteiro para real – parâmetro = inteiro, retorno = real
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
17
Linguagem Fortran
• Variáveis do tipo INTEGER
program inteiro
implicit none
integer :: x
read *, x
print*, "Valor lido:",x
end program inteiro
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
18
Linguagem Fortran
Variáveis do tipo REAL
program var_real
implicit none
real :: a, b= 10.5e-2
print *, ’Valor de a:’
read *, a
print *, ’Valor de a:’, a
print *, ’Valor de b:’, b
end program var_real
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
19
Linguagem Fortran
Variáveis do tipo COMPLEX
program var_complexa
implicit none
complex :: a= (5,-5),b,c
print *, "Valor de b:"
! O valor de b deve ser entrado como um literal complexo.
! Exemplo: (-1.5,2.5)
read *, b
c= a*b
print *, "O valor de c:", c
end program var_complexa
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
20
Linguagem Fortran
Variáveis do tipo CHARACTER
program le_caractere
implicit none
character(len=10) :: str_read
print *, "Entre com texto":
read ’(a)’, str_read
print *, "Texto lido:", str_read
end program le_caractere
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
21
Linguagem Fortran
• Variáveis do tipo LOGICAL
• O conceito de espécie (kind)
– Em Fortran 90/95, cada um dos cinco tipos intrínsecos,
INTEGER, REAL, COMPLEX, CHARACTER e LOGICAL possui
associado um valor inteiro não negativo denominado parâmetro
de espécie do tipo (kind type parameter).
– Por exigência do padrão, um processador deve suportar, no
mínimo, duas espécies para os tipos REAL e COMPLEX e uma
espécie para os tipos INTEGER, CHARACTER e LOGICAL.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
22
Linguagem Fortran
– Os valores da espécie são dependentes do processador e/ou do
compilador empregado.
– Contudo, há funções intrínsecas fornecidas pelo compilador que
verificam as precisões suportadas pelo processador e que
podem ser usadas para definir o valor do parâmetro KIND,
possibilitando assim a portabilidade do código, isto é, a
possibilidade deste rodar em diferentes arquiteturas usando
uma precisão mínima especificada pelo programador.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
23
Linguagem Fortran
Expressões e Atribuições Escalares
• Em uma expressão, o programa descreve as operações que devem
ser executadas pelo computador.
• O resultado desta expressão pode então ser atribuído a uma
variável.
• Há diferentes conjuntos de regras para expressões e atribuições,
dependendo se as variáveis em questão são numéricas, lógicas,
caracteres ou de tipo derivado; e também se as expressões são
escalares ou matriciais
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
24
Linguagem Fortran
• Ressaltadas Anteriormente, observa-se que as regras básicas são:
• operador operando
Ex: -X
• operando operador operando
Ex: X+Y
–
–
–
–
Expressões numéricas escalares
Atribuições numéricas escalares
Operadores relacionais
Etc...
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
25
Linguagem Fortran
Comandos de Decisão
Se .... Então
Se .... Então .... Senão
If (condição) then
<instruções>
endif
If (condição) then
<instruções>
else
<instruções>
endif
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
26
Linguagem Fortran
Se .... Então... Senão Encadeados
If (condição) then
<instruções>
else
If (condição) then
<instruções>
else
<instruções>
endif
endif
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
27
Linguagem Fortran
•
program if_fat
!Calcula o fatorial de um número natural.
implicit none
integer :: i, fat, j
!
print *, "Entre com valor:"
read *, i
if (i < 0) then
print *, "Não é possível calcular o fatorial."
else if (i == 0) then
print *, "fat(",i,")=",1
else
fat= 1
do j= 1, i
fat= fat*j
end do
print *, "fat(",i,")=",fat
end if
end program if_fat
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
28
Linguagem Fortran
Comandos Repetição
Do While (condição)
<instruções>
end do
program exer17
integer contador
do 1 contador=100,200
resto=mod(contador,2)
if (resto.eq.0) then
print *,contador," ‚ um numero par"
endif
1 Enddo
end
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
29
Linguagem Fortran
Case
SELECT CASE (NUMERO) ! NUMERO é do tipo inteiro.
CASE (:-1)
! Todos os valores de NUMERO menores que 0.
N_SINAL= -1
CASE (0)
! Somente NUMERO= 0.
N_SINAL= 0
CASE (1:)
! Todos os valores de NUMERO > 0.
N_SINAL= 1
END SELECT
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
30
Linguagem Fortran
•
program testa_case
implicit none
integer :: a
print *, "Entre com a (inteiro):"
read *, a
select case (a)
case (:-1)
print *, "Menor que zero."
case (0)
print *, "Igual a zero."
case (1:)
print *, "Maior que zero."
end select
end program testa_case
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
31
Linguagem Fortran
• Uma matriz ou vetor é um outro tipo de objeto composto suportado
pelo Fortran.
• Por definição  Uma matriz consiste de um conjunto retangular de
elementos, todos do mesmo tipo e espécie do tipo.
• Uma outra definição  uma matriz é um grupo de posições na
memória do computador as quais são acessadas por intermédio de
um único nome, fazendo-se uso dos subscritos da matriz.
• Este tipo de objeto é útil quando for necessário se fazer referência a
um número grande, porém a princípio desconhecido, de variáveis
do tipo intrínseco ou outras estruturas, sem que seja necessário
definir um nome para cada variável.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
32
Linguagem Fortran
• É recomendável as declarações de matrizes sejam declaradas na
forma de atributos de tipos de variáveis. Por exemplo:
•
•
•
•
REAL, DIMENSION(50) :: W
REAL, DIMENSION(5:54) :: X
CHARACTER(LEN= 25), DIMENSION(5) :: COLUMN
CHARACTER(LEN= 30), DIMENSION(10) :: ROW
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
33
Linguagem Fortran
• Posto  O posto (rank) de uma matriz é o número de dimensões
da mesma. Assim, um escalar tem posto 0, um vetor tem posto 1 e
uma matriz tem posto maior ou igual a 2.
• Extensão  A extensão (extent) de uma matriz se refere a uma
dimensão em particular e é o número de componentes naquela
dimensão.
• Forma  A forma (shape) de uma matriz é um vetor cujos
componentes são a extensão de cada dimensão da matriz.
• Tamanho  O tamanho (size) de um matriz é o número total de
elementos que compõe a mesma. Este número pode ser zero, em
cujo caso esta se denomina matriz nula.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
34
Linguagem Fortran
A forma geral da declaração de uma ou mais matrizes:
<tipo>[[, DIMENSION(<lista de extensões>)] [, < outros atributos>] ::]
<lista de nomes>
A forma recomendável da declaração é a seguinte:
<tipo>, DIMENSION(<lista de extensões>) [, <outros atributos>] :: <list
a de nomes>
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
35
Linguagem Fortran
Os <outros atributos> podem ser quaisquer da seguinte lista:
–
–
–
–
–
–
–
–
–
–
–
PARAMETER
ALLOCATABLE
INTENT(INOUT)
OPTIONAL
SAVE
EXTERNAL
INTRINSIC
PUBLIC
PRIVATE
POINTER
TARGET
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
36
Linguagem Fortran
Segue a <lista de nomes> válidos no Fortran, onde os mesmos são
atribuídos às matrizes
• Inicialização de vetores contendo 3 elementos:
INTEGER :: I
INTEGER, DIMENSION(3) :: IA= (/1,2,3/), IB= (/(I, I=1,3)/)
• Declaração da matriz automática LOGB. Aqui, LOGA é uma matriz
qualquer (“muda” ou “dummy”) e SIZE é uma função intrínseca que
retorna um escalar inteiro correspondente ao tamanho do seu
argumento:
LOGICAL, DIMENSION(SIZE(LOGA)) :: LOGB
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
Linguagem Fortran
•
Declaração das matrizes dinâmicas, ou alocáveis, de duas
dimensões A e B. A forma das matrizes será definida a posteriori
por um comando ALLOCATE:
REAL, DIMENSION(:,:), ALLOCATABLE :: A,B
•
Declaração das matrizes de forma assumida de três dimensões A
e B. A forma das matrizes será assumida a partir das informações
transferidas pela rotina que aciona o sub-programa onde esta
declaração é feita.
REAL, DIMENSION(:,:,:) :: A,B
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
Linguagem Fortran
Observações
• Expressões e atribuições envolvendo matrizes
• Soma,Multiplicação, divisão e outras operações matriciais
• A Linguagem possibilita realizar operações envolvendo a matriz na
sua totalidade, possibilitando o tratamento de uma matriz como um
objeto único, o que, no mínimo, facilita enormemente a construção,
leitura e interpretação do código.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
39
Linguagem Fortran
• Programa principal e subrotina para produto 2 matrizes de 2x2, com
saída não formatada:
Fonte: João Tavares/JOF CFAC
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
40
Linguagem Fortran
Fonte: João Tavares/JOF CFAC
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
41
Linguagem Fortran
Fonte: João Tavares/JOF CFAC
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
42
Linguagem Fortran
Fonte: João Tavares/JOF CFAC
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
43
Linguagem Fortran
Fonte: João Tavares/JOF CFAC
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
44
Linguagem Fortran
Funções e Subrotinas
• A ideia é construir programas que sejam reutilizáveis. Por exemplo
uma média calcula-se sempre da mesma maneira. Portanto deve
fazer-se o programa uma vez e depois utilizar sempre esse
programa.
• Outro exemplo:
– Se quiser calcular um seno usa a função intriseca do
FORTRAN, sin e não vai programar o seu cálculo.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
45
Linguagem Fortran
• Para isso o FORTRAN dispõe de 2 ferramentas diferentes, que
correspondem aos subprogramas:
– As funções
– As subrotinas
• As funções podem dividir-se em:
– Funções intrinsecas.
– Funções não intrinsecas.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
46
Linguagem Fortran
Subprogramas
• Um subprograma é uma unidade de programa independente.
Sua execução é subordinada ao programa principal ou a uma
outra unidade de programa.
• A linguagem FORTRAN 90 permite dois tipos de subprogramas:
FUNÇÕES E SUB-ROTINAS.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
47
Linguagem Fortran
Funções – Sintaxe
• Em adição às funções intrinsecas, o Fortran permite o desenho de
novas funções. Uma função de Fortran function, tem a seguinte
sintaxe:
type FUNCTION function-name (arg1, arg2, ..., argn)
IMPLICIT NONE
[specification part]
[execution part]
[subprogram part]
END FUNCTION function-name
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
48
Linguagem Fortran
• Como invocar uma função no programa principal
• Uma função só produz um resultado.
• O resultado é passado para o programa principal no final da função
com a instrução em que o nome da função é igualado ao resultado
a transmitir.
• A função é invocada no programa principal com uma instrução em
que o nome da função e a sua lista de argumentos são invocados.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
49
Linguagem Fortran
Subrotinas
• Uma Function, recebe input por via dos seus argumentos formais e
devolve um valor, o valor da função, que fica armazenado na
variável que tem o nome da função.
• Nalguns casos, não queremos devolver nenhum valor, ou queremos
devolver mais do que um.
• Nesse caso, o Fortran tem as subrotinas que podem resolver este
problema.
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
50
Linguagem Fortran
SUBROUTINE subroutine-name (arg1, arg2, ..., argn)
IMPLICIT NONE
[specification part]
[execution part]
[subprogram part]
END SUBROUTINE subroutine-name
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
51
Considerações Finais
Aspectos importantes a se investir
• Idiomas (Inglês) – 1,2,3,...
• Áreas de Base  Matemática, Física e Informática
• METEOROLOGIA
Programação em Meteorologia
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
52
Exercício
•
!Dados acerca de alunos usando tipo derivado.
program alunos_met
implicit none
integer :: i,ndisc= 5 !Mude este valor, caso seja maior.
type:: aluno
character(len= 20):: nome
integer:: codigo
real:: n1,n2,n3,mf
end type aluno
type(aluno), dimension(5):: disc
!
do i= 1,ndisc
print*, "Nome:"
read "(a)", disc(i)%nome
print*, "código:"
read*,disc(i)%codigo
print*, "Notas: N1,N2,N3:"
read*,disc(i)%n1,disc(i)%n2,disc(i)%n3
disc(i)%mf= (disc(i)%n1 + disc(i)%n2 + disc(i)%n3)/3.0
end do
do i= 1,ndisc
print*, " "
print*, "-----------> ",disc(i)%nome," (",disc(i)%codigo,") <-----------"
print*, "
Média final: ",disc(i)%mf
end do
end program alunos_met
Prof. Marcello Macarthy
UFPel - CDTEC - Informática
53
Obrigado!
54
Download

XVII SAMET [Marcello Macarthy] – Mini