Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de...

21
Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata Fernandes [email protected] Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.1/tcc-00.157

Transcript of Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de...

Page 1: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

Programação de Computadores III

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

Professor Leandro Augusto Frata [email protected]

Material disponível emhttp://www.ic.uff.br/~laffernandes/teaching/2013.1/tcc-00.157

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

Page 2: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

Considere o Programa a Seguir

program p17codre

real a, b, c

read *, a, b

c = a * b / 2.0print *, 'a vale: ', aprint *, 'b vale: ', bprint *, 'a * b / 2.0 vale: ', c

a = a / 2.0

b = b / 2.0c = a * b / 2.0print *, 'a vale: ', aprint *, 'b vale: ', bprint *, 'a * b / 2.0 vale: ', c

end

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

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

repitam ao longo de umprograma.

Como fazer paraeconomizar código,

evitando a repetição?

Page 3: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

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

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

Page 4: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

Exemplo de Subprogramação em FORTRAN

program p18subpr

real a, bread *, a, bcall mostra(a, b)a = a / 2.0b = b / 2.0call mostra(a, b)

end

subroutine mostra(a, b)

real a, b, cc = a * b / 2.0print *, 'a vale: ', aprint *, 'b vale: ', bprint *, 'a * b / 2.0 vale: ', c

end

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

Page 5: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

Fluxo de Controle

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

Programa PrincipalSubprograma A Subprograma B

Subprograma C

call A

call B

call C

Page 6: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

Fluxo de Controle

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

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

Programa PrincipalSin( x )

y = Sin( x )

Page 7: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

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”

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

Chamar Mostra(a,b)

Page 8: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

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 Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

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 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 Exemplo: call mostra(a,b)

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

Page 10: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

Exemplo de Função e de Sub-Rotina

Veja o arquivo p19fusu.f

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

Page 11: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

Observações Importantes!

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

O FORTRAN faz o casamento dos nomes

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

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

call troca(a,b)

subroutine troca(x,y)

Page 12: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

Observações Importantes!

3. Variáveis declaradas no programa principalnã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

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

Page 13: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

SUBROUTINE

• Declaração ocorre logo após o ENDdo 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

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

Page 14: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

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

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

Page 15: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

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

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

Page 16: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

SUBROUTINE

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

• Sintaxecall <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

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

Page 17: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

Exemplo de SUBROUTINE

Veja o arquivo p20tempe.f

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

Page 18: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

FUNCTION

• Declaração ocorre logo após o ENDdo 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

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

Page 19: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

Exemplos Simples de FUNCTION

integer function f1(a) integer a ... f1 = ...end

real function f2(a,b) real a integer b ... f2 = ...end

TCC-00.157 Programação de Computadores III (2013.1)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 Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

FUNCTION

• Chamada feita do programa principal, ou de outro subprograma

• Precisa ser declarada como uma variável

• Retorna um único valor

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

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

Page 21: Programação de Computadores IIIhbarbalho/pages/slides/slides09.pdf · Programação de Computadores III Subprogramação: Sub-rotinas e Funções Professor Leandro Augusto Frata

Exemplo de FUNCTION

Veja o arquivo p21volum.f

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