Upload
jera
View
26
Download
0
Embed Size (px)
DESCRIPTION
Aula 6. Subprogramas - Funções e Sub-rotinas Seqüência de instruções compreendida entre uma declaração identificadora do subprograma e o comando END e que fazem parte de um programa. Tanto o programa principal como os subprograma são ditos unidades de programas. - PowerPoint PPT Presentation
Citation preview
1
Subprogramas - Funções e Sub-rotinas
Seqüência de instruções compreendida entre uma declaração identificadora do subprograma e o comando END e que fazem parte de um programa.
• Tanto o programa principal como os subprograma são ditos unidades de programas.
• As unidades de programa podem ser compiladas independentemente
• Os subprogramas só podem ser executados a partir de um programa principal.
Aula 6
2
Funções
Um tipo de subprograma que retorna um valor.
As funções devem combinar em tipo com as variáveis com as quais será associada.
Funções Intrínsecas: Predefinidas dentro da estrutura da linguagem (sin, cos, sqrt, etc)
• Funções definidas pelo usuário: Funções criadas pelos usuários.
[<Tipo da Função>] FUNCTION <Nome> [(argumentos)]Declarações de variáveisComandos executáveisComando de atribuição do resultado[Return]
END [FUNCTION] [<Nome>]
3
Function definida em um arquivo externo (subs.f)
Programa Principal (prog.f)
INTEGER FUNCTION ISOMA(N)
ISOMA=0
DO I=1,N
ISOMA=ISOMA+I
END DO
END FUNCTION ISOMA
PROGRAM TESTESUBS
INTEGER X,S
PRINT *,’Informe um numero inteiro:’
READ *,X
S=ISOMA(X)
PRINT *,’A soma dos ‘,X,’ primeiros número inteiros é: ‘, S
END PROGRAM TESTESUBS
Compilação e “linkedição” (utilizando o ifort)
(1) ifort prog.f subs.f –o prog.exe Compila prog.f e subs.f gerando (*.o)
Faz a ligação (linkedição) dos programas objetos, gerando o executável prog.exe
(2) ifort – c prog.f
ifort – c subs.f
ifort prog.o subs.o –o prog.exe
Compila e gera prog.o
Compila e gera subs.o
Faz a ligação de prog.o e subs.o, gerando o executável prog.exe
4
Sub-rotinas
Podem conter quaisquer tipos de comandos.
Podem retornar nenhum, um, ou mais valores.
• Sub-rotinas Intrínsecas: Predefinidas dentro da estrutura da linguagem (call exit)
• Sub-rotinas definidas pelo usuário: Criadas pelos usuários.
SUBROUTINE <Nome> [(argumentos)]Declarações de variáveisComandos executáveis[Return]
END [SUBROUTINE] [<Nome>]
5
Subrotina definida em um arquivo externo (subs.f)
Programa Principal (prog.f)
SUBROUTINE TRANSMAT3(A,B)
INTEGER I,J
INTEGER, DIMENSION(3,3) :: A,B
DO I=1,3
DO J=1,3
B(I,J)=a(J,I)
END DO
END DO
END SUBROUTINE TRANSMAT3
PROGRAM TESTSUBS
INTEGER X,S,I,J
INTEGER, DIMENSION (3,3) :: C,D
DATA C/1,4,7,2,5,8,3,6,9/
!
PRINT *,'Informe um número inteiro: '
READ *,X
S=ISOMA(x)
PRINT *,'A soma dos ',x,' primeiros inteiros é: ',S
PRINT *,'---------- x ----------'
!
PRINT *,'Matriz C: '
PRINT '(3(I1,1X))',((C(i,j),j=1,3),i=1,3)
! Transposta da matriz C
CALL TRANSMAT3(C,D)
! Escreve a matriz transposta (D)
PRINT *,'Matriz transposta (D): '
PRINT '(3(I1,1X))',((D(i,j),j=1,3),i=1,3)
PRINT *,'*** FIM ***'
END PROGRAM testsubs
6
O comando COMMON
Bloco de memória comum. Usado para transferir valores entre unidades de programas.
Sintaxe:
COMMON [/ [ r1 ] /] <lista1> [/ [ r2 ] / <lista2>] ...
r: rótulo do bloco COMMON. Poder “branco”. Se o primeiro for “branco” o par de barras pode ser suprimido. O nome do rótulo não pode coincidir com o nome de uma unidade de programa.
lista1, lista2: listas de variáveis
• Variáveis especificadas no COMMON compartilham posição de memória em comum entre subprogramas.
• A lista de variáveis num COMMON pode ser diferente entre unidades de programas.
• Em uma unidade de programa pode-se ter apenas um bloco COMMON não rotulado, entretanto pode-se ter vários rotulados.
7
Programa Principal
COMMON A(2),B,C(3)
Sub-Rotina
COMMON A,B,C,D,E,F
A(1) A
A(2) B
B C
C(1) D
C(2) E
C(3) F
Comando CALL
Usado para chamar a execução de uma sub-rotina.
Sintaxe:
CALL <nome da sub-rotina> [(a,b,...)]
8
PROGRAM PROGCOMM
REAL Y,K,M,TP,TH
COMMON /PEND/Y,TP
COMMON /MH/M,TH
!
PRINT *,'===== Período do Pendulo ====='
PRINT *,'Qual o comprimento do Pendulo (m)?'
READ *,Y
CALL PENDULO
PRINT *,'O periodo do pendulo é: ',TP,' s'
!
PRINT *,'===== Periodo do MHS ====='
PRINT *,'Qual a massa da particula (Kg):'
READ *,M
CALL MHS
PRINT *,'O periodo do sistema é: ',TH,' s'
!
END PROGRAM PROGCOMM
SUBROUTINE PENDULO
REAL, PARAMETER :: PI=3.1415926,G=9.8
REAL Y,TP
COMMON /PEND/Y,TP
!
TP=2.0*PI*SQRT(Y/G)
!
END SUBROUTINE PENDULO
!
SUBROUTINE MHS
REAL, PARAMETER :: PI=3.1415926,K=1.0
REAL M,TH
COMMON /MH/M,TH
!
TH=2*PI*SQRT(M/K)
!
END SUBROUTINE MHS
9
O comando INCLUDE
Inclui declarações, atribuições e comandos em uma unidade de programa.
Sintaxe:
INCLUDE ‘nome.ext’ ou INCLUDE “nome.ext”
É permitido o uso de caminhos completos no lugar de nome.ext
• nome.ext pode ter qualquer extensão (.inc é mais comum).
•Permite que linhas de programas, comuns a várias unidades de programa, sejam agrupadas em um único arquivo que será incluído quando necessário.
• As instruções no arquivo “nome.inc” são interpretadas como parte do programa e por isso devem seguir as mesmas regras do programa.
10
CSUBS2.F CTS.INC
SUBROUTINE PENDULO
INCLUDE ‘CTS.INC’
REAL Y,TP
COMMON /PEND/Y,TP
!
TP=2.0*PI*SQRT(Y/G)
!
END SUBROUTINE PENDULO
!
SUBROUTINE MHS
INCLUDE “CTS.INC”
REAL M,TH
COMMON /MH/M,TH
!
TH=2*PI*SQRT(M/K)
!
END SUBROUTINE MHS
REAL, PARAMETER :: PI=3.1415926,G=9.8,K=1.0