Definindo uma função
• A lista de parâmetros, também chamada de lista de argumentos, é opcional. A função pode não ter entrada (void).
tipo_da_função nome_da_função (lista de parâmetros){
corpo da função}
O comando return
Sintaxe de um comando return:
A instrução return expressão; tem os seguintes efeitos:1) avaliação da expressão2) conversão automática do resultado da expressão para
o tipo da função3) retorno do resultado4) término da execução da função e retorno do controle
para a instrução seguinte do código de chamada
• return;
• return expressão;
• return (expressão);
O comando return• No exemplo anterior, temos a definição das funções:
Função com um comando return
Função com mais de um comando return
O comando return• Funções do tipo void podem ter um
comando return sem expressão, servindo para terminar a execução da função
• Em funções do tipo void, o comando returnnão é obrigatório
• Uma função sem comando return termina quando encontra a chave de fechamento
• O valor de retorno é obtido através de uma chamada àfunção, como no exemplo:
Declaração e definição de funções• Em geral, o nome de uma função aparece em três
lugares em um programa:1) na declaração (protótipo/assinatura)2) na definição3) na chamada
• Uma função não pode ser chamada sem antes ter sido declarada
• No exemplo, temos a declaração das funções:
Declaração de uma funçãoA declaração de uma função, dita protótipo da função, é uma instrução, geralmente colocada no início do programa, que estabelece o tipo da função e os argumentos que ela recebe.
• a função de nome le_numero() é do tipo int e não recebe argumentos
• a função de nome max() é do tipo inte recebe como argumento dois valores do tipo int
Observações1) No protótipo de uma função, o seu tipo,
o número e o tipo dos parâmetros devem corresponder àqueles do cabeçalho da definição.
2) O nome dos parâmetros podem ser omitidos na declaração.
3) Se uma função não tem parâmetros, pode-se declarar a lista de parâmetros como (void) ou simplesmente ()
Outras observações1) Se uma função é definida antes da sua
primeira chamada, esta não precisa ser declarada.
2) O comando return pode retornar somente um único valor.
3) Se uma função não tem valor de retorno, deve-se indicar o tipo de retorno como void
4) Não se pode definir funções dentro de uma outra função.
Escopo de variáveis
• As variáveis podem ser declaradas em três lugares:
1)dentro de funções variáveis locais
2)como parâmetros de funçõesparâmetros formais
3)fora de todas as funçõesvariáveis globais
O escopo de uma variável é o bloco de código onde esta variável é válida
Variáveis locaisvoid funcao1(void)
{
int x;
x = -10;
}
void funcao2(void)
{
int x, y;
x = 2;
y = 18;
}
• São visíveis apenas dentro de seu próprio bloco de código.
Um bloco de código é delimitado por { }.
• O espaço de memória usado pela variável é liberado na saída do bloco de código.
Variáveis globais• São visíveis no programa inteiro.• O espaço de memória fica
reservado durante toda a execução do programa.
Variáveis globais
São úteis quando o mesmo dado é usado em muitas funçõesOcupam espaço de memória mesmo quando desnecessáriasPodem levar a erros no programa
Variáveis globais x locais
Qual a diferença entre as funções?
int produto(int x, int y)
{
return (x * y);
}
}
int x, y;
int produto(void)
{
return (x * y);
}
Variáveis globais x locais
int produto(int x, int y)
{
return (x * y);
}
}
int x, y;
int produto(void)
{
return (x * y);
}
Qual a diferença entre as funções?
Parâmetros de uma função
• São visíveis apenas dentro da função: são criadas na entrada e destruídas na saída da função
• No momento da chamada de uma função, o número e o tipo dos parâmetros devem corresponder à declaração da função
• Os parâmetros são convertidos automaticamente para os tipos da declaração antes de serem passados à função
Variáveis locais que são inicializadas pelos valores passados na chamada da função.
Passagem de parâmetros• Em geral, pode-se passar parâmetros para
funções de duas maneiras:1) Por valor: o valor do argumento é copiado
para o parâmetro e as alterações feitas no parâmetro não tem efeito sobre a variável usada na chamada da função
2) Por referência: o endereço de uma variável copiado para o parâmetro, assim as mudanças feitas no parâmetro afetam a variável usada na chamada da função
Passagem de parâmetros por valor
o valor de n é copiado para o parâmetro x da função quadrado()
na atribuição, apenas a variável local x é modificada
a variável n, usada para chamar quadrado(), ainda tem o valor 10
Passagem de parâmetros por referência
A referencia de n é passado para o parâmetro x da função quadrado()
na atribuição, a variável referenciada por x é modificada
a variável n, usada para chamar quadrado(), teve seu valor modificado
Operador unário de referência &
ExercícioFaça um programa que calcula as raízes de uma equação do segundo grau , onde a, b e c são números reais fornecidos pelo usuário. Observação: use funções para calcular e imprimir o resultado.
)0( 2 cbxax
Exercício• Implemente duas funções uma que converte em
Real para dólar e outra que faz a operação inversa.
• Chame essa função através do main.• O programa deve ter uma boa interação com
usuário.• Mostre a cotação do dólar utilizado.
Problema 1• Crie uma função para encontrar o maior entre 3
inteiros. O usuário entra com os inteiros e o programa imprime os 3 inteiros e mostrando o maior elemento.
Problema 2
• Escreva um programa que calcula a soma dos quadrados de dois números fornecido pelo usuário.
• Implemente 3 funções: Calcula a soma dos quadrados de dois números, calcula o quadrado de um número e calcula a soma de dois números.
• A função main deve chamar somente a função que apresente todo o resultado.
Passando array a função• Para passar um argumento array a uma função,
especifique o nome do array sem colocar colchetes. Por exemplo, se o array temperaturaPorHora for declarado como
Exercício
• Crie um programa em que o usuário entre com o tamanho do vetor.
• A função main deve chamar outra função que preenche os valores desse vetor aleatoriamente (passando como parâmetro o vetor e seu tamanho).
• Crie uma função que imprima esse vetor (passando como parâmetro o vetor e seu tamanho).
• A função deve ser chamada pelo main.• Pesquise na Internet a função rand.
Problema 3: Passeio do cavalo• Um dos problemas mais interessantes para os
fãs do jogo de xadrez é o problema do Passeio do Cavalo, proposto originalmente pelo matemático Euler.
• A questão é esta: a peça do jogo de dez chamada ao cavalo pode se mover ao longo de um tabuleiro vazio e passar uma única vez em cada uma 64 casas?
Problema 3: Passeio do cavalo• O cavalo faz movimentos em formato de L
(percorre duas casas em uma direção e uma no sentido perpendicular às duas primeiras). Dessa forma, de uma casa no meio do tabuleiro, o cavalo pode fazer movimentos diferentes (numerados de 0 a 7).
Problema 3: Passeio do cavalo• Desenhe um tabuleiro de xadrez 8-por-8 em
uma folha de papel e tente fazer o Passeio do Cavalo a mão, Coloque um 1 no primeira casa para a qual se mover, um 2 na segunda casa, um 3 na terceira etc.
• Antes de começar os movimentos, imagine até onde você chegará, lembrando-se que um passeio completo consiste em 64 movimentos.
• Até onde você chegou? Você chegou perto do quanto havia imaginado?
Problema 3: Passeio do cavalo• Escreva um programa para mover o cavalo pelo
tabuleiro de xadrez.• Rode o programa. • Quantos movimentos o cavalo fez? • Depois de tentar escrever e rodar o programa do
Passeio do Cavalo, provavelmente você adquiriu alguns conceitos valiosos.
Problema 4: Puzzle15
• 1.3 trilhões de estados alcançáveis• Instâncias aleatórias são resolvidas otimamente em
alguns milissegundos pelos melhores algoritmos de busca
• 24-puzzle (5 x 5): possui 10 estados.• Resolver através da busca em profundidade.
Problema 4: Puzzle8
• A estratégia deve “tentar” uma regra e, se mais tarde
descobrir que essa regra não era apropriada, “voltar
atrás” e tentar outra regra. Essa estratégia é chamada
Backtracking (Tentativa e erro).
Ponteiros• Os ponteiros são variáveis que contêm
endereços de memória como valores. • Normalmente, uma variável faz uma
referência direta a um valor específico. • Um ponteiro, por outro lado, contém um
endereço de uma variável que contém um valor específico.
Ponteiros• Os ponteiros devem ser inicializados ao serem
declarados.• Um ponteiro pode ser inicializado com 0,
NULL ou um endereço. • Um ponteiro com o valor NULL não aponta
para lugar algum. • Inicializar um ponteiro com 0 é equivalente a
inicializar um ponteiro com NULL
Operadores de Ponteiros• O & ou operador de ponteiro é um operador que
retorna o endereço de seu operando. Por exemplo, admitindo as declarações
a instrução
Operadores de Ponteiros• O operador *, chamado frequentemente
operador de referência indireta ou operador de desreferenciamento, retorna o valor do objeto ao qual seu operando (i.e., um ponteiro) aponta.
Usar * dessa maneira é chamado desreferenciar um poteiro.
Chamando funções por referência• Há duas maneiras de passar argumentos a uma
função — chamada por valor e chamada por referência.
• Usar ponteiros e o operador de referência indireta para simular chamadas por referência.
Passagem por referência• Funções que recebem argumentos por referencia
utilizam o operador & somente na definição do tipo de argumento.
• Pelo comando return só é possível retornar um valor.
• Por referência podemos retornar mais de um valor.
Exercício
• Implemente um programa que ordene 3 números de forma ascendente fornecido pelo usuário.
• Utiliza chamada por referência.• A função main deve chamar a função
ordena que apresenta os resultados.
Expressões e aritmética com ponteiro
• Quando um inteiro é adicionado ou subtraído de um ponteiro, este último não é simplesmente incrementado ou decrementado por tal inteiro, mas sim por tal inteiro vezes o tamanho do objeto ao qual o ponteiro se refere.
• O número de bytes depende do tipo de dado do objeto.
• vPtr += 2, produziria 3008 (3 000 + 2 * 4) admitindo que um inteiro está armazenado em 4 bytes de memória
Expressões e aritmética com ponteiro
• Se um ponteiro for incrementado ou decrementado de um, os operadores de incremento e decremento podem ser usados. Qualquer uma das instruções ++vPtr; vPtr++;
• As variáveis de ponteiros podem ser subtraídas entre si.
• Por exemplo, se vPtr possuir o local 3000 e v2Ptr possuir o endereço 3008, a instrução x = v2Ptr -vPtr;
• A Aritmética de ponteiros não tem significado algum se não for realizada em um array.
Ponteiros e Arrays• bPtr = &b[0];• O elemento b [ 3 ] do array pode ser referenciado
alternativamente com a expressão de ponteiro *(bPtr + 3).
• Notação ponteiro/offset• Os parênteses são necessários porque a precedência
do * é maior do que a precedência do +.• O array em si pode ser tratado como um ponteiro e
usado com a aritmética de ponteiros. Por exemplo, a expressão *(b + 3).
Ponteiros e Arrays• Os arrays podem conter ponteiros. Um uso
comum de tais estruturas de dados é para formar um array de strings.
Ponteiros e Arrays• Embora pareça que essas strings estão sendo
colocadas no array naipe, apenas os ponteiros são de fato colocados no array.
Operador new e delete• O operador new é utilizado para alocar um bloco
de memória.• Primeiro o operador new solicita ao SO um bloco
de memória, após alocar o bloco de memória, new retorna um ponteiro para o bloco alocado.
• Se new falhar, retorna um bad_aloc.
Operador new e delete• Para destruir o objeto e devolver a memória para o
SO utiliza-se o operador delete.• Delete destrói o objeto e devolve o bloco de
memória para o SO.• Observe que apenas o bloco de memória é
destruído. O ponteiro continua existindo, e continua apontando para o bloco de memória que agora não existe mais.
• Depois de usar delete, o ponteiro aponta para um monte de lixo e não deve mais ser utilizado.
Problema 5
Faça um programa na linguagem C++ que imprima os 50 primeiros números inteiros pares positivos. Utilize ponteiros e funções.
Problema 6
Num frigorífico existem 90 bois. Cada boi traz preso no pescoço um cartão contendo seu número de identificação e seu peso. Fazer um programa na linguagem C++ que escreva o número e peso do boi mais gordo e do boi mais magro.
Problema 7
Suponha que no ano N a população americana seja maior que a brasileira. Sabendo-se que os Estados Unidos possuem um crescimento anual de 2% na sua população e que o Brasil tem crescimento anual de 4%, determinar o ano em que as duas populações serão iguais (em quantidade). São dados os números de habitantes dos Estados Unidos e do Brasil no ano N.
Top Related