Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H....

41
Pearson Education Slide 1

Transcript of Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H....

Page 1: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 1

Page 2: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 2

Capítulo 3

Criado por Frederick H. Colclough, Colorado Technical University

Fundamentos das Funções

Page 3: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 3

Objetivos de Estudo Funções Predefinidas

Aquelas que retornam (produzem) um valor e funções

que não retornam um valor.

Funções Definidas pelo Programador Definindo, Declarando e chamando Funções Recursivas

Regras de Escopo Variáveis Locais Constantes Globais e variáveis globais Blocos e escopos aninhados

Page 4: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 4

Introdução às Funções Construindo Blocos de Programas Outras terminologias em outras

linguagens: Procedimento, subprogramas e métodos Em C++: Funções

E-P-S Entrada – Processamento – Saída Subpartes básicas para qualquer programa Utilize funções para estas ‘partes’

Page 5: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 5

Funções Predefinidas Bibliotecas cheias de funções para usar! Dois tipos:

Aquelas que retornam um valor Aquelas que não retornam (void)

Deve-se ‘#include’ a biblioteca apropriada

Ex.: <cmath>, <cstdlib> (Original ‘C’ libraries) <iostream> (for cout, cin)

Page 6: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 6

Usando Funções Predefinidas Funções matemáticas muito abundantes

Encontradas na Biblioteca <cmath.h> A maioria retorna um valor (a ‘resposta’)

Exemplo: aRaiz = sqrt(9.0); Componentes:

sqrt = nome da função na bibliotecaaRaiz = variável usada para atribuir ‘resposta’ ao9.0 = argumento ‘entrada inicial’ para a função

Em E-P-S: E = 9.0 P = ‘Calcula a raiz quadrada’ S = 3, o qual é retornado e atribuído à

aRaiz

Page 7: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 7

Chamada de Função Retorne para essa tarefa:

aRaiz = sqrt(9.0); A expressão ‘sqrt(9.0)’ é conhecida como

chamada de função, ou invocação de função O argumento em uma chamada de função (9.0)

pode ser uma literal, variável ou uma expressão Chamar a si própria pode ser parte de uma expressão :

bonus = sqrt(vendas)/10; A chamada de função é permitida sempre que for

legal usar uma expressão de tipo de retorno de

função

Page 8: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 8

Um grande exemplo

Painel 3.1 página 62

Page 9: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 9

Um grande exemplo (cont.)

Painel 3.1 página 63

Page 10: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 10

Mais Funções Predefinidas #include <cstdlib>

Bibliotecas que contêm funções como: abs() // Retorna o valor absoluto de um int labs() // Retorna o valor absoluto de um long

*fabs() // Retorna o valor absoluto de um double

*fabs() está atualmente na Biblioteca <cmath>! Pode parecer confuso Lembre-se: Bibliotecas foram adicionadas depois

que C++ havia ‘nascido’, em frases incrementais Consulte os apêndices/manuais para detalhes

Page 11: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 11

Mais Funções Matemáticas pow(x, y)

Retorna x elevado a potência de y Resulta um double, x = 3.0, y = 2.0;resultado = pow(x, y);cout << resulto;

Aqui, 9.0 é mostrado, visto que 3.02.0 = 9.0

Observe que esta função recebe doisargumentos

Uma função pode ter qualquer número deargumentos de vários tipos

Page 12: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 12

Mais Funções Matemáticas

Painel 3.2 página 64

Page 13: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 13

Funções void Predefinidas Nenhum valor retornado Executa uma ação, mas não envia nenhuma

‘resposta’

Quando chamadas, são comandos exit(1); // Não retorna valor

Esta chamada termina o programa Funções void podem ainda ter argumentos

Em todos os aspectos, mesmo as funções

que ‘retornam’ um ‘valor’ Elas não retornam simplesmente um valor!

Page 14: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 14

Gerador de Números Aleatórios Retorna um número ‘aleatoriamente escolhido’ Usado em simulações e jogos

rand() Não requer nenhum argumento Retorna um valor entre 0 e RAND_MAX

Scaling (colocar em escala) Posiciona o número aleatório dentro de um pequeno

intervalo rand() % 6 Retorna um valor aleatório entre 0 e 5

Deslocamentorand() % 6 + 1

Desloca o intervalo para 1 e 6 (Ex.: roleta-russa)

Page 15: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 15

Semente de Números Aleatórios Números Pseudo-aleatórios

Chamar rand() produz determinada ‘seqüência’de números aleatórios

Utilize a ‘semente’ para alterar a seqüênciasrand(valor_da_semente);

Função void Recebe um argumento, a ‘semente’ Pode usar qualquer valor de semente, inclusive

a ‘hora do sistema’ srand(time(0)); time() retorna a hora do sistema como uma valor

numérico Biblioteca <time> contém funções time()

Page 16: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 16

Exemplos Aleatório double entre 0.0 e 1.0:

(RAND_MAX – rand())/static_cast<double>(RAND_MAX)

Conversão de tipo usada para forçar uma divisão de

precisão double

Aleatório int entre 1 e 6:rand() % 6 + 1

‘%’ é o operador de módulo (resto) Aleatório int entre 10 e 20:

rand() % 10 + 10

Page 17: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 17

Funções Definidas pelo Programador

Escreva suas próprias funções! Construindo blocos de programas

Dividir e Conquistar Legibilidade Reutilização

Sua ‘definição’ pode estar: No mesmo arquivo que main() Em um arquivo separado, assim outros

podem

usá-la também

Page 18: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 18

Componentes de Função 3 partes para utilizar funções:

Declaração de função/protótipo Informação para o compilador Para interpretar corretamente as chamadas

Definição de função Implementação atual/código para o que faz a

função Chamada de função

Tranfere o controle para a função

Page 19: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 19

Declaração de Função Também chamada protótipo de função Uma declaração ‘informativa’ para o compilador Informa ao compilador como interpretar chamadas

Sintaxe<tipo_retorno> FnName(<lista-de-parametros-formais>);

Exemplo:double custoTotal ( int numeroParametro,

double precoParametro);

Colocada antes de quaisquer chamadas No espaço de declaração de main() Ou acima de main() no espaço global

Page 20: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 20

Definição de Função Implementação da função Exatamente como a implementação de main() Exemplo:

double custoTotal(int numeroParametro,double precoParametro)

{const double IMPOSTO = 0.05;double subTotal;subtotal = precoParametro * numeroParametro;return (subtotal + subtotal * IMPOSTO);

}

Observe o alinhamento próprio

Page 21: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 21

Localização da Definição de Função Colocada depois da função main()

Não ‘dentro’ da função main()! Funções são ‘iguais’; nenhuma função é

‘parte’ de outra Parâmetros formais na definição

‘Guardador de lugar’ para dados enviados ‘Nome de Variável’ usado para referência a dados

em uma definição Comando return

Retorna dados a quem chamou

Page 22: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 22

Chamada de Função Exatemente como chamadas de funções predefinidas

conta = custoTotal(numero, preco); Lembre-se: custoTotal retorna um valor double

Atribuído à variável chamada ‘conta’ Argumentos: numero, preco

Lembre-se que argumentos podem ser literais,variáveis, expressões, ou uma combinação

Na chamada de função, os argumentos são

freqüentemente chamados de ‘argumentos atuais’ Porque eles contém os ‘dados atuais’ sendo enviados

Page 23: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 23

Exemplo de Função

Painel 3.5

página 70

Page 24: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 24

Exemplo de Função (cont.)

Painel 3.5 página 71

Page 25: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 25

Declaração Alternativa de Funções Lembre-se: Declaração de função é ‘informação’ para o compilador O compilador somente necessita saber:

Tipo de retorno Nome da função Lista de parâmentros

Não são necessários nomes de parâmetrors formais:double custoTotal(int, double);

Colocar nomes de parâmetro formal Melhora a legibilidade

Page 26: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 26

Parametros vs. Argumentos Termos freqüentemente usados Parâmetros/Argumentos Formais

Em declaração de função Em cabeçalho de definição de função

Parâmetros/Argumentos Atuais Em chamada de função

Tecnicamente, parametro é a parte ‘formal’

enquanto, argumento é a perte ‘atual’ * *Esses termos não são sempre usados dessa maneira

Page 27: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 27

Funções Chamando Funções Nós já estamos fazendo isso!

main() É uma função! Único requerimento :

A declaração de função deve aparecer primeiro Definição de função tipicamente em outro lugar

Depois da definição de main() Ou em um arquivo separado

É comum para funções chamar muitas outrasfunções

Funções podem até chamar a si próprias ‘recurso’

Page 28: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 28

Funções que retornam um valor booleano Tipo retornado pode ser qualquer tipo válido

Dada a declaração/protótipo de função:bool apropriada (int taxa);

E a definição de função: bool apropriada (int taxa); {

return (((taxa>=10)&&(taxa <20))||(taxa ==0);}

Retorna ‘true’ ou ‘false’ Chamada de função, de alguma outra função:

if (apropriada(taxa))cout << “Taxa é válida\n”;

Page 29: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 29

Definindo Funções void Similar a funções que retornam um valor Tipo retornado especificado como ‘void’ Exemplo:

Declaração/protótipo de função :void mostraResultados (double fDegrees,

double cDegrees); Tipo retornado é ‘void’ Nada é retornado

Page 30: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 30

Declarando Funções void Definição de função :

void mostraResultados(double fDegrees, double cDegrees){

cout.setf(ios::fixed);cout.setf(ios::showpoint);cout.precision(1);cout << fDegrees

<< “ degrees fahrenheit igual a \n”<< cDegrees << “ degrees celsius.\n”;

}

Observação: Nenhum comando return Opcional para funções void

Page 31: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 31

Chamando Funções void O mesmo que chamar funções predefinidas void De alguma outra função, como main():

mostraResultados(degreesF, degreesC); mostraResultados(32.5, 0.3);

Observe: nenhuma atribuição, uma vez que nenhum valor é retornado Argumentos Atuais (degreesF, degreesC)

Passados para a função A função é chamada para ‘fazer seu trabalho’

com os dados passados

Page 32: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 32

Mais sobre Comandos Return Transfere o controle de volta para a função que

chamou Para retornar dados, qualquer função

diferente

de void, DEVE ter o comando return Tipicamente o ÚLTIMO comando na definição

da função O comando return é opcional para funcões void

Fechando } implicitamente retorna o controleda função void

Page 33: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 33

Pré-Condições e Pós-Condições Semelhante a discussão ‘E-P-S’ Comentário da declaração de função:

void mostraJuro(double saldo, double taxa);// Pré-condição: saldo é um saldo não-negativo de uma conta de

// poupança// taxa é a taxa de juros expressa como porcentagem// Pós-condição: O valor em juros sobre um dado saldo

Freqüentemente chamados Entradas

e Saídas

Page 34: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 34

main( ): ‘Especial’ Lembre-se: main() É uma Função tão ‘especial’ que:

Uma e somente uma função chamada main()existirá em um programa

Quem chama a função main()? O Sistema Operacional Por tradição ela deveria ter um comando

return Valor retornado para o Sistema Operacional

Retorna ‘int’ ou ‘void’

Page 35: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 35

Regras de Escopo Variáveis Locais

Declarada dentro do corpo de uma dada função Disponível somente dentro daquela função

Podemos ter variáveis com os mesmos nomesdeclaradas em diferentes funções

Escopo é local: ‘a função é o escopo’ Prefira variáveis locais

Mantém o controle individual sobre os dados Necessário conhecimentos básicos Deveriam ser declaradas na função não impor-

ta as variáveis necessárias para executar o trabalho

Page 36: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 36

Abstração Procedural Precisa saber ‘o que’ a função faz, não

‘como’ ela faz! Pense em uma ‘caixa preta’

Dispositivo que você sabe como usar, mas nãoseu método de operação

Implemente funções como uma caixa preta O usuário da função só necessita: declaração Não necessita da definição de função

Chamado ocultação de informação. Esconder detalhes de ‘como’ a função trabalha

Page 37: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 37

Constantes Globais e Variáveis Globais Declarada ‘fora’ do corpo da função

Global para todas as funções do programa Declarada ‘dentro’ do corpo da função

Local para aquela função Declarações globais são típicas para

constantes: const double IMPOSTO = 0.05; Declare constantes globalmente

Variáveis Globais? Possível , mas RARAMENTE USADAS Perigoso: nehum controle sobre o uso!

Page 38: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 38

Blocos Uma variável declarada dentro de um comando composto

Chamado ‘bloco’ Tem ‘escopo de bloco’

Note: todas as definições de funções são blocos! Isto fornece um ‘escopo de função’ local

Blocos de Loops:for (int n = 1; n <= 10; n++){

for (int n = 1; n <= 10; n++) soma = soma + n;}

Variável n tem escopo somente no bloco do corpo do loop

Page 39: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 39

Escopos Aninhados Variáveis de mesmo nome declaradas em

múltiplos blocos Muito Legal; o escopo é o ‘escopo de

bloco’ Nenhuma ambigüidade Cada nome é distinto dentro de seu escopo

Page 40: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 40

Sumário 1 Dois tipos de funções:

As que retornam valor e funções void Funções deveriam ser ‘caixas pretas’

Esconder detalhes: ‘como’ Declarar suas próprias variáveis locais Declarações de Funções deveriam ser

documentos independentes que: Fornecem pré e pós-condições em comentários Fornecem todas as chamadas necessárias

para a sua utilização

Page 41: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.

Pearson Education Slide 41

Sumário 2 Variável Local

Declarada na definição de função Variável Global

Declarada acima da definição de função OK para constantes, não para variáveis

Parametros/Argumentos Formal: Em declaração de função e definição

Guarda-lugar para dados de entrada Atual: Na chamada da função

Dados atuais passados para a função