pearson education slide 1. pearson education slide 2 cap í tulo 3 criado por frederick h....
TRANSCRIPT
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
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’
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)
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
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
Pearson Education Slide 8
Um grande exemplo
Painel 3.1 página 62
Pearson Education Slide 9
Um grande exemplo (cont.)
Painel 3.1 página 63
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
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
Pearson Education Slide 12
Mais Funções Matemáticas
Painel 3.2 página 64
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!
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)
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()
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
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
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
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
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
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
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
Pearson Education Slide 23
Exemplo de Função
Painel 3.5
página 70
Pearson Education Slide 24
Exemplo de Função (cont.)
Painel 3.5 página 71
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
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
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’
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”;
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
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
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
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
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
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’
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
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
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!
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
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
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
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