22
Luis Martí Instituto de Computação Universidade Federal Fluminense [email protected] - http://lmarti.com Programação de Computadores: Subprogramação: Sub-rotinas e Funções Instituto de C

Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Luis Martí Instituto de Computação

Universidade Federal Fluminense [email protected] - http://lmarti.com

Programação de Computadores: Subprogramação: Sub-rotinas e Funções

Instituto de

C

Page 2: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Considere o Programa a Seguir

program p17codre

real a, b, c

read *, a, b

c = a * b / 2.0

print *, 'a vale: ', a

print *, 'b vale: ', b

print *, 'a * b / 2.0 vale: ', c

a = a / 2.0 b = b / 2.0

c = a * b / 2.0

print *, 'a vale: ', a

print *, 'b vale: ', b

print *, 'a * b / 2.0 vale: ', c

end

2

É muito comum quevários trechos de código se

repitam ao longo de um programa.

Como fazer paraeconomizar código,

evitando a repetição?

Page 3: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Subprogramas

• Pedaços de código que são chamadas pelo programa principal ou por outros subprogramas

• Vantagens ▪ Defeitos podem ser facilmente corrigidos, pois as

modificações são feitas em um único local ▪ Defeitos podem ser evitados, pois a replicação de código

pode levar a modificações incompletas ▪ O código fica mais legível ▪ Facilita o design de algoritmos, pois um problema é

dividido em subproblemas

3

Page 4: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Exemplo de Subprogramação em FORTRAN

program p18subpr

real a, b

read *, a, b

call mostra(a, b)

a = a / 2.0

b = b / 2.0

call mostra(a, b)

end

subroutine mostra(a, b)

real a, b, c

c = a * b / 2.0

print *, 'a vale: ', a

print *, 'b vale: ', b

print *, 'a * b / 2.0 vale: ', c

end

4

Page 5: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Fluxo de Controle

5

Programa PrincipalSubprograma A Subprograma B

Subprograma C

call Acall B

call C

Page 6: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Fluxo de Controle

• O mesmo acontece quando usamos uma das funções pré-definidas do FORTRAN

6

Programa PrincipalSin( x )

y = Sin( x )

Page 7: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Fluxograma

• Um novo símbolo é utilizado na representação de subprograma chamado em um fluxograma

• O subprograma passa a ter um fluxograma próprio ▪ O símbolo de início contém o nome do subprograma ▪ O símbolo de término contém a palavra “Retorno”

7

Chamar Mostra(a,b)

Page 8: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

TCC-00.157 Programação de Computadores III (2013.1)

Exemplo de Fluxogramas

8

Início a b

Mostra(a,b)

a ← a / 2.0

b ← b / 2.0

Mostra(a,b)

Fim

Mostra

c ← a * b / 2.0

Retorna

a

b

c

Page 9: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Tipos de Subprogramas

• Função ▪ Sempre retorna um valor ▪ A chamada é feita pelo identificador (nome) da função e argumentos

entre parênteses, separados por vírgula o Exemplo: sin(x)

▪ O valor retornado é do tipo especificado na declaração da função

• Sub-rotina ▪ Não retorna um valor, necessariamente ▪ A chamada é feita por CALL seguido pelo identificado da sub-rotina e

argumentos entre parênteses, separados por vírgula o Exemplo: call mostra(a,b)

9

Page 10: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Exemplo de Função e de Sub-Rotina

Veja o arquivo p19fusu.f

10

Page 11: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Observações Importantes!

1. O nome dos argumentos de funções e sub-rotinasnão precisa ser igual ao nome das variáveisO FORTRAN faz o casamento dos nomes

2. Modificações no valor dos argumentos são visíveis fora do subprograma

11

call troca(a,b)

subroutine troca(x,y)

Page 12: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Observações Importantes!

3. Variáveis declaradas no programa principal não podem ser acessadas pelo subprograma, apenas aquelas passadas como argumento

4. Variáveis declaradas no subprograma não podem ser acessadas pelo programa principal

5. Funções devem ser declaradas no programa principal de forma semelhante a uma variável

12

Page 13: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

SUBROUTINE

• Declaração ocorre logo após o END do programa principal

• Sintaxe subroutine <nome>(<arg1>, <arg2>, ..., <argn>)

<declaração dos tipos do parâmetros> <declaração de variáveis locais>

<corpo do subprograma>

end

13

Page 14: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Exemplos Simples de SUBROUTINE

subroutine s1(a) integer a ... end

subroutine s3(a,b) real a integer b ... end

subroutine s2(a,b) integer a, b ... end

subroutine s4 ... end

14

Page 15: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

SUBROUTINE

• Declaração de variáveis em sub-rotina ▪ As variáveis declaradas dentro de uma sub-rotina

pertencem somente a ela (variáveis locais)

• Passagem de argumentos por referência ▪ A mesma região de memória do programa principal é

utilizada pelos argumentos da sub-rotina

▪ Alterações no valor das variáveis passadas como argumento são refletidas no programa principal

15

Page 16: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

SUBROUTINE

• Chamada feita do programa principal, ou de outro subprograma, com o comando CALL

• Sintaxe call <nome>(<v_arg1>, <v_arg2>, ..., <v_argn>)

• v_argi é o valor passado como argumento, pode ser um valor constante ou uma variável ▪ Se for modificado dentro da sub-rotida, v_argi deverá ser

uma variável

16

Page 17: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Exemplo de SUBROUTINE

Veja o arquivo p20tempe.f

17

Page 18: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

FUNCTION

• Declaração ocorre logo após o END do programa principal

• Sintaxe <tipo de retorno> function <nome>(<arg1>, ...)

<declaração dos tipos do parâmetros> <declaração de variáveis locais>

<corpo do subprograma>

end

18

Page 19: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Exemplos Simples de FUNCTION

integer function f1(a)

integer a

...

f1 = ...

end

real function f2(a,b)

real a

integer b

...

f2 = ...

end

19

O FORTRAN cria automaticamente uma

variável com onome da função,

que deve ser utilizada para definir o valor de retorno

Page 20: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

FUNCTION

• Chamada feita do programa principal, ou de outro subprograma

• Precisa ser declarada como uma variável

• Retorna um único valor

• Sintaxe var = <nome>(<v_arg1>, <v_arg2>, ..., <v_argn>)

20

Page 21: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Exemplo de FUNCTION

Veja o arquivo p21volum.f

21

Page 22: Programação de Computadoreslmarti.com/wp-content/uploads/2015/12/slides_09-Subprogramacao-sub... · O FORTRAN faz o casamento dos nomes 2. Modificações no valor dos argumentos

Material adaptado por Luis Martí a partir dos slides de Leandro Augusto Frata Fernandes.