10
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

Subprogramas - Funções e Sub-rotinas

  • 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

Page 1: Subprogramas - Funções e Sub-rotinas

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

Page 2: Subprogramas - Funções e Sub-rotinas

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>]

Page 3: Subprogramas - Funções e Sub-rotinas

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

Page 4: Subprogramas - Funções e Sub-rotinas

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>]

Page 5: Subprogramas - Funções e Sub-rotinas

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

Page 6: Subprogramas - Funções e Sub-rotinas

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.

Page 7: Subprogramas - Funções e Sub-rotinas

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,...)]

Page 8: Subprogramas - Funções e Sub-rotinas

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

Page 9: Subprogramas - Funções e Sub-rotinas

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.

Page 10: Subprogramas - Funções e Sub-rotinas

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