Buscar

Slides_Funcoes[1]

Prévia do material em texto

Introdução à Ciência da Computação
Disciplina: 113913 
Professores: André Barros de Sales
Georges Amvame-Nze
Universidade de Brasília – UnB 
Campus Gama 
8. FUNÇÕES E PROCEDIMENTOS
Funções e Procedimentos
� Às vezes, como programadores temos de desenvolver
programas para resolver problemas muito complicados, o 
que provavelmente envolve programas grandes e 
complexos. Isso costuma implicar em códigos mais difíceis
de ler e em repetição de trechos de código ao longo do 
programa.
Funções e Procedimentos
Imagine uma fábrica de automóveis. Ela
projeta e monta os carros, mas não
fabrica os pneus e os vidros, por
exemplo. Ela os produz em outros
lugares, pois seria complicado
manter uma linha de montagem de 
veículos, uma fábrica de pneus e 
uma de vidros juntas e gerir isso
tudo. Em programação podemos
fazer um processo análogo, 
“terceirizando” a solução de um 
pedaço de nosso problema, 
repassando o trabalho para uma
funções do programa, com o qual
nos preocupamos em outro
momento.
Funções e Procedimentos
� Na matemática também fazemos algo análogo para
simplificarmos a representação de um problema. Um 
exemplo disso é quando escrevemos 2²³ ao invés de 
2x2x...(outras 19 vezes)...x2x2. 
Podemos ver a função 2²³ como um artifício que torna a 
exposição do problema mais clara do que escrever
multiplicativamente.
� Como fazer isso em programação?
Funções e Procedimentos
� Em programação podemos dividir os programas em
programas menores e de mais fácil compreensão, 
dividindo também um problema difícil em vários problemas
mais fáceis, juntando tudo em um programa principal e 
formando uma solução completa.
� A maioria das linguagens de programação oferece esse
suporte e especifica formalmente a sintaxe e semântica
necessários para realizar tal divisão. 
Uma função ou procedimento consiste em um subprograma 
que pode atuar sobre dados e retornar um valor. Todo programa 
em C tem pelo menos uma função (a main) que pode chamar 
outras funções ou procedimentos, algumas das quais, podem 
ainda chamar outras e assim por diante.
Funções e Procedimentos
Toda função tem seu próprio nome, e quando este nome é
encontrado a execução do programa é desviado para o corpo da 
função. Quando ela retorna, a execução recomeça na linha 
seguinte a chamada da função.
int main(void )
{
instrução;
função1( );
instrução;
função2( );
}
função1
{
instrução;
return..;
}
função2
{
instrução;
função3( );
return ..;
}
função3
{
instrução;
return..;
}
Programa
Funções e Procedimentos
Uma função ou procedimento bem elaborada efetua uma 
tarefa específica, conclui corretamente a execução e depois 
retorna ao programa.
Funções e Procedimentos
Exemplo
Exemplo
- Cada função tem que ter um nome único, o qual serve para a 
sua invocação em algum lugar no programa a que pertence.
- Uma função pode ser invocada a partir de outras funções.
- Uma função deve realizar UMA ÚNICA TAREFA bem 
definida.
- Uma função deve comportar-se como uma caixa preta.
- O código de uma função deve ser o mais independente 
possível do resto do programa.
- Uma função pode retornar, para a entidade que a invocou, 
um valor como resultado do seu trabalho. 
Características de uma Função ou Procedimento
TIPOS DE OBJETOS
DECLARAÇÃO DE VARIÁVEIS
• Variáveis locais são internas as funções ou blocos
• Parâmetros formais são parâmetros de funções
• Variáveis globais estão fora de todas as funções
VARIÁVEIS LOCAIS
• Só podem ser referenciadas dentro da função ou no 
bloco onde foram declaradas
• Só existem dentro do bloco de instrução onde foram 
declaradas, quando este estiver sendo executado
• Elas podem ser declaradas no início de qualquer bloco 
de instrução e não somente no início das funções
PARÂMETROS FORMAIS
• São variáveis que recebem os valores dos argumentos 
das funções e devem ser do mesmo tipo
• Comportam-se como qualquer outra variável local 
dentro de uma função
VARIÁVEIS GLOBAIS
• São reconhecidas dentro de todo o contexto onde foram 
declaradas
• Estão declaradas fora das funções
• São armazenadas em área específica da memória (devendo 
ser evitadas) � no curso elas não devem ser usadas
TIPOS DE OBJETOS
Pode-se passar variáveis para a função, assim como também 
pode-se declarar variáveis locais dentro do corpo da função. Estas 
variáveis recebem esta denominação porque só existem dentro da 
função, pois quando a função retorna (ou termina) elas deixam de 
estar disponíveis.
Os parâmetros passados para a função também são considerados 
variáveis locais. Por exemplo:
Desenvolvimento de FUNÇÕES
#include<stdio.h>
float converter(float tempfar2); // protótipo
int main(void)
{ float tempfar,tempcel;
printf(“Temp.em Fahrenheit: ”);
scanf(“%f”,&tempfar);
tempcel = converter(tempfar);
printf(“Em Celsius %f”, tempcel);
return 0;
}
// Definição do corpo da função
float converter(float tempfar2)
{
float tempcel;
tempcel = ((tempfar2–32)*5)/9; 
return tempcel;
}
A declaração, denominada protótipo da função, informa ao 
compilador qual o seu tipo de retorno, seu nome e os seus 
parâmetros, enquanto que a sua definição diz o que ela executa 
(faz). 
O protótipo da função deve ser usado quando a função é
definida após a sua chamada em outra função, com isso o 
compilador sabe que essa função existe.
O protótipo da função é uma instrução, o que significa que 
ele é encerrado com um ‘;’.
<tipo retorno> <identificador> (<lista parâmetros>);
A <lista parâmetros> é uma lista de todos os parâmetros e 
seus respectivos tipos separados por ‘,’. Os parâmetros, o nome e 
o tipo de retorno devem ter compatibilidade entre a definição e a 
declaração da função.
Funções
Tarefas complicadas devem ser divididas em múltiplas 
funções para que possam ser chamadas uma a uma. Isso torna o 
código mais fácil de entender e manter.
parâmetros – argumentos formais
argumentos – argumentos reais 
VARIÁVEIS GLOBAIS
As variáveis definidas fora das funções tem um escopo 
global e portanto podem ser acessadas a partir de qualquer 
função do programa (inclusive a main). Este tipo de variável é
evitada (não usada) pelo fato de que tornam o código confuso e 
de difícil manutenção.
As variáveis globais, quando forem extremamente 
necessárias, devem ser declaradas em apenas um arquivo ( .c ou 
.cpp) e usadas como externas (extern) nos outros.
Desenvolvimento de FUNÇÕES
}programadores usam estes termos indistintamente
COMANDO return
As funções retornam um valor ou void (nenhum valor). Para 
que elas retornem um valor, insira a palavra reservada return
seguida pelo valor que se deseja retornar, sendo ele do mesmo 
tipo definido na função.
Exemplo:
return 5;
return (x > 5);
return (Outra( ) );
Com return a execução do programa retorna imediatamente 
para a função responsável pela chamada, e qualquer instrução 
que esteja após o return não é executada.
É permitido mais que um return em uma função, mas uma vez 
que um deles seja executado a função é encerrada.
Deve-se sempre retornar um valor
compatível para uma função que não seja
do tipo void. As funções void caracterizam
os procedimento (função sem retorno)
Desenvolvimento de FUNÇÕES
Função como parâmetro de outra Função
Embora seja possível, isto pode dificultar a leitura e a 
depuração do código. Por exemplo:
resposta = (dobro(quadrado(raiz(valor))));
Mudanças feitas nos argumentos não afetam os valores da 
função de chamada, pois é feita uma cópia local para cada 
argumento. Essa cópia é tratada como uma outra variável 
qualquer. Esta forma de passagem de parâmetro recebe o nome 
de “argumento por valor” (ou passagem por valor).
Desenvolvimento de FUNÇÕES
O argumento por referência acontece quando é passado o 
endereço do argumento para o parâmetro (passando um ponteiro 
para o argumento). Com isso, as alterações efetuadas sobre o 
parâmetro afetarão também o valor da variável usada na 
chamada da função. Será visto mais a frente que os ponteiros sãopassados para as funções como qualquer outra variável.
Desenvolvimento de FUNÇÕES
PARÂMETROS PADRÃO
Quando uma função possui algum parâmetro (na sua 
definição ou no protótipo) a função de chamada deve passar um 
valor quando a chamar, a menos que ela tenha um valor padrão. 
Um valor padrão é um valor a ser usado caso nenhum valor seja 
fornecido (informado).
Exemplo: long int testar(int x = 10); // protótipo
O cabeçalho da função não é alterado pela definição padrão.
Exemplo: long int testar(int x)
{ ...
}
Desenvolvimento de FUNÇÕES
Quando uma função possui um valor padrão todos os 
parâmetros posteriores desta função deverão ter parâmetros 
padrões definidos.
Exemplo: long int testar(int par1, int par2=9, int par3=7);
long int testar(int par1, int par2, int par3=5);
long int testar(int par1=3, int par2=5, int par3=7);
Só poderá ser atribuído um parâmetro padrão a par2 se 
atribuir a par3 e a atribuição poderá ser feita a par1 se for 
atribuído a par2 e par3.
Desenvolvimento de FUNÇÕES
Um procedimento consiste em uma função, porém sem 
retorno algum.
O desenvolvimento de um procedimento na linguagem C 
é realizado seguindo todas as regras de criação e uso de 
funções, porém o seu tipo é sempre definido como void
(tipo de dado não definido ou vazio), além de não existir 
nenhum tipo de retorno no corpo da função.
Pode ser usado o comando return, mas não se deve 
retornar nada, ficando somente a instruções return seguida 
do ponto e vírgula.
Exemplo:
Observe um simples procedimento que calcula e já
apresenta a média aritmética de dois valores apenas.
void media (int valor1, int valor2); // protótipo
Desenvolvimento de PROCEDIMENTOS
Repetição com teste no Final
1) Leia a Sessão didática 9 – Funções.
2) Execute a Parte A do item D - Procedimentos.
3) Resolva a lista de exercícios sobre Funções.
4) Postem os programas no moodle até o dia 26/10/2009 às 17h30.
27
Damas, Luis M. Dias, Linguagem C
Mizrahi, Victorine Viviane, Treinamento em Linguagem C++, módulo 
1 2.ed, São Paulo, Pearson Prentice Hall, 2006
Deitel, C++: Como Programar 
Barbosa, Jair Alves, DESENVOLVIMENTO DE FUNÇÕES, Notas de 
aula. 
Referência de Criação e Apoio ao Estudo

Outros materiais