Você está na página 1de 20

Introdução à linguagem

Fortran 90/95
Estrutura e conceitos de
programas e subprogramas

Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Um programa em Fortran 90 é composto por
• Declarações (tipos de dados, constantes e variáveis)
• Comandos executáveis
• Comandos não-executáveis
• Subprogramas internos

Introdução à linguagem Fortran 90/95

2 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Declarações permitem definir variáveis,
constantes, tipos de dados do usuário:
• INTEGER :: I,J
• REAL :: A,B
• COMPLEX, DIMENSION(100) :: AUTOVALORES
• LOGICAL :: EXISTE_ARQUIVO

Introdução à linguagem Fortran 90/95

3 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Comandos executáveis são, por exemplo,
atribuições, chamadas de subprogramas,
operações de entrada-e-saída:
• A=B
• CALL SUBROTINA_1(X,Y,Z)
• PRINT *,A
• READ *,X

Introdução à linguagem Fortran 90/95

4 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Mais de um comando pode ser escrito na mesma
linha, desde que separados por ;
• Nesse caso, a ordem de execução de cada
comando é da esquerda para a direita
• A = 1.0-3.9*X ; B = 1.0-A

Introdução à linguagem Fortran 90/95

5 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Um comando pode ser escrito ocupando mais de
uma linha
• Nesse caso, todas as linhas, com exceção da
última, devem terminar com o caracter &
• A = SIN(X-2.0*PI+SQRT(2.0/ &
(1.0+X)))

Introdução à linguagem Fortran 90/95

6 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Comandos não-executáveis são comandos de
especificação, como comentários, CONTAINS,
PROGRAM, END PROGRAM, FORMAT, dentre
outros:
• A = B ! Este é um comentário
• FORMAT(I2,3X,4(F8.2,1X))

Introdução à linguagem Fortran 90/95

7 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Exemplo:

PROGRAM PRIMEIRO_PROGRAMA
REAL, PARAMETER :: K = 3.1415926/180.0
REAL :: PHI,THETA
READ *,PHI,THETA
PRINT *,SIN(PHI*K)*COS(THETA*K)+ &
SIN(THETA*K)*COS(PHI*K)
END PROGRAM PRIMEIRO_PROGRAMA

Introdução à linguagem Fortran 90/95

8 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• A execução de um programa começa com o
primeiro comando executável após as
declarações, executando cada comando em
seqüência, seguindo o fluxo de execução
• A execução de um programa termina quando:
• o comando END PROGRAM é encontrado, ou
• um comando STOP é executado, ou
• um erro fatal ocorre, como uma divisão por zero, ou é feita a
tentativa de acesso a elementos inexistentes de um arranjo

Introdução à linguagem Fortran 90/95

9 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Em Fortran 90, um programa pode chamar
subprogramas – SUBROUTINEs e FUNCTIONs –
que tanto podem ser internas como externas
• Subprogramas internos são aqueles que
pertencem a um programa principal, listados
após o último comando executável do programa
principal, com o uso do comando não-executável
CONTAINS

Introdução à linguagem Fortran 90/95

10 Prof. Rudnei Dias da Cunha


• Estrutura de um programa
• Exemplo com subprograma interno:

PROGRAM SEGUNDO_PROGRAMA
REAL, PARAMETER :: K = 3.1415926/180.0
REAL :: PHI,THETA
READ *,PHI,THETA
PRINT *,SENO_A_MAIS_B(PHI*K,THETA*K)
CONTAINS
REAL FUNCTION SENO_A_MAIS_B(A,B) RESULT (S)
REAL, INTENT(IN) :: A,B
S = SIN(A)*COS(B)+SIN(B)*COS(A)
END FUNCTION SENO_A_MAIS_B
END PROGRAM SEGUNDO_PROGRAMA
Interno ao
programa
principal

Introdução à linguagem Fortran 90/95

11 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Subprogramas externos são aqueles listados fora
do texto do programa principal
• FUNCTIONs externas normalmente precisam ser
declarados no programa principal com um bloco
INTERFACE

Introdução à linguagem Fortran 90/95

12 Prof. Rudnei Dias da Cunha


• Estrutura de um programa
• Exemplo com subprograma externo:
PROGRAM TERCEIRO_PROGRAMA
REAL, PARAMETER :: K = 3.1415926/180.0
REAL :: PHI,THETA
INTERFACE
REAL FUNCTION SENO_A_MAIS_B(A,B) RESULT (S)
REAL, INTENT(IN) :: A,B
END FUNCTION SENO_A_MAIS_B
END INTERFACE
READ *,PHI,THETA
PRINT *,SENO_A_MAIS_B(PHI*K,THETA*K)
END PROGRAM TERCEIRO_PROGRAMA Externo ao
programa
REAL FUNCTION SENO_A_MAIS_B(A,B) RESULT (S) principal
REAL, INTENT(IN) :: A,B
S = SIN(A)*COS(B)+SIN(B)*COS(A)
END FUNCTION SENO_A_MAIS_B
Introdução à linguagem Fortran 90/95

13 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Recomenda-se agrupar subprogramas
relacionados entre si dentro de um MODULE, os
quais permitem que um compilador possa extrair
informações mais completas sobre a aplicação
(por exemplo, com relação ao número de
argumentos de um subprograma, bem como os
seus tipos)

Introdução à linguagem Fortran 90/95

14 Prof. Rudnei Dias da Cunha


• Estrutura de um programa
• Exemplo com módulo
PROGRAM QUARTO_PROGRAMA
USE MEU_MODULO
REAL, PARAMETER :: K = 3.1415926/180.0
REAL :: PHI,THETA
READ *,PHI,THETA
PRINT *,SENO_A_MAIS_B(PHI*K,THETA*K)
END PROGRAM QUARTO_PROGRAMA

MODULE MEU_MODULO Subprograma


integrante de
CONTAINS
um módulo
REAL FUNCTION SENO_A_MAIS_B(A,B) RESULT (S)
REAL, INTENT(IN) :: A,B
S = SIN(A)*COS(B)+SIN(B)*COS(A)
END FUNCTION SENO_A_MAIS_B
END MODULE MEU_MODULO

Introdução à linguagem Fortran 90/95

15 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Um subprograma pode ser invocado no programa
principal ou em outro subprograma, de duas
formas:
• Através do comando CALL, caso seja uma SUBROUTINE
• Através de seu nome, caso seja uma FUNCTION (como nos
exemplos mostrados)

Introdução à linguagem Fortran 90/95

16 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Quando um subprograma é invocado:
• o fluxo de execução é desviado do ponto onde ele foi invocado
para o primeiro comando executável do subprograma, retornando
ao próximo comando executável após o ponto de invocação,
quando encontra um comando END FUNCTION ou END
SUBROUTINE, ou quando um comando RETURN é executado

• Valores podem ser transmitidos a um


subprograma através do uso de argumentos de
entrada e/ou de entrada-e-saída

Introdução à linguagem Fortran 90/95

17 Prof. Rudnei Dias da Cunha


• Estrutura de um programa
• Os argumentos de um subprograma podem ser
passados ao subprograma de duas maneiras:
• Por valor
• Por referência

• Argumentos passados por valor não podem ter


atribuídos a eles quaisquer expressões dentro de um
subprograma
• São especificados com o atributo INTENT(IN)

• Argumentos passados por referência (tanto de saída


como de entrada-e-saída) podem ter atribuídos
valores a eles e, dessa forma, transferir valores do
subprograma ao trecho de programa/subprograma
onde foi invocado
• Especificado através dos atributos INTENT(OUT) e INTENT(INOUT)

Introdução à linguagem Fortran 90/95

18 Prof. Rudnei Dias da Cunha


•Estrutura de um programa
• Um subprograma também pode ser recursivo,
isto é, ele pode invocar-se a si mesmo
• Em Fortran 90, tais subprogramas devem ser
especificados com a cláusula RECURSIVE

Introdução à linguagem Fortran 90/95

19 Prof. Rudnei Dias da Cunha


•Compiladores de uso livre
• Existem vários compiladores Fortran 90/Fortran
95 de uso livre:
• O compilador gfortran da GNU Software
Foundation https://gcc.gnu.org/wiki/GFortran
• https://gcc.gnu.org/wiki/GFortranBinaries

• O compilador da Silverfrost, que vem com um


ambiente de programação integrado (Plato)
http://www.silverfrost.com/
• http://www.ftn95.co.uk/ftn95/ftn95-
8.10/ftn95_personal.exe

Introdução à linguagem Fortran 90/95

20 Prof. Rudnei Dias da Cunha

Você também pode gostar