Buscar

16 Funções

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Funções
Ao final desta aula o aluno deverá estar apto a escrever funções que o
auxiliem na montagem de programas mais longos.
Uma função é um conjunto de instruções em um bloco à parte da função principal (main),
referenciada no programa principal pelo seu nome seguido de (). A principal vantagem de utilizar
funções é, além de deixar o programa mais claro, permitir que outros programas acessem a função
criada evitando sempre o recomeço.
Ao longo das últimas aulas utilizamos diversas funções previamente armazenadas, por
exemplo, a função getch() que armazena o caractere digitado. Se toda vez o programador que
quisesse armazenar o caractere digitado tivesse que montar um programa, o código final seria
imenso. Isso nos dá outra vantagem: a existência de funções evita que o programador tenha de
escrever o mesmo código repetidas vezes.
Qualquer sequência de instruções que apareça mais de uma vez no programa é candidata a ser
uma função. O código de uma função é agregado ao programa uma única vez e pode ser executado
muitas vezes no decorrer do programa. O grande princípio das linguagens estruturadas é o de dividir
um programa em funções.
Chamando uma função
Chamar uma função é similar a uma terceirização de serviço: ao invocar a função, deve-se
passar alguns parâmetros para que o retorno seja o esperado. Desta forma, quando um programa
encontra uma função, o desvio do controle é feito para a função e o seu retorno ocorre na linha
subsequente à linha a qual houve a chamada.
Considere o exemplo a seguir:
O simples código acima possui quatro chamadas às funções previamente programadas: duas
vezes a printf(), uma vez a scanf() e uma vez a system().
Podemos criar quaisquer funções que sejam úteis para nós mesmos. A sintaxe da instrução da
chamada a uma função é a mesma tanto para funções escritas por outros programadores como para
as que escrevemos.
Funções simples
Todo programa contém no mínimo uma função, sendo que a função main() deve estar presente
em todos eles. A execução de um programa sempre começa na função main, sendo o seu controle
desviado para outra função sempre que há uma chamada a outra função no corpo da função
principal.
Veja o exemplo a seguir:
O exemplo numero_ao_cubo.cpp utiliza uma função simples para elevar um número ao cubo.
Note que a chamada a essa função está dentro de uma outra função, o que é totalmente normal. A
função é chamada dentro do printf(), então, o controle é desviado para a função cubo(), em que
cálculo é feito. O retorno ocorre e o resultado é impresso na tela.
Os componentes necessários para adicionar uma função a um programa são: o protótipo da
função, a chamada à função e a definição desta.
O comando return termina a execução da função e retorna o controle para a instrução
seguinte do código de chamada.
O protótipo da função
Uma função deve sempre ser declarada antes de ter sido chamada. A declaração de uma
função é o que chamamos de protótipo da função. O protótipo da função permite que o compilador
verifique a sintaxe de chamada à função.
O exemplo dado pelo programa numero_ao_cubo.cpp declara a função na instrução:
Essa declaração informa que a função de nome cubo() é do tipo int e recebe como argumento
um valor int.
A definição de uma função
O código C que descreve o que a função faz é denominado definição da função. Sua forma
geral é a seguinte:
A primeira linha é o cabeçalho da definição da função, e tudo o que estiver entre as chaves
constitui o corpo da definição da função. A definição de qualquer função C começa com o nome do
tipo da função, o mesmo de seu protótipo.
Passando vários argumentos para uma função
Se vários argumentos são solicitados, eles podem ser passados entre os parênteses na
chamada à função, separados por vírgulas. Uma função pode receber quantos argumentos forem
necessários, porém sempre retornará apenas um valor.
A seguir, vemos o exemplo de um programa que passa dois argumentos para a função
retangulo(), cujo propósito é desenhar retângulos de vários tamanhos na tela. Os dois argumentos
são a largura e a altura do retângulo; cada retângulo representa um cômodo de uma casa.
A primeira linha é o cabeçalho da definição da função, e tudo o que estiver entre as chaves
constitui o corpo da definição da função. A definição de qualquer função C começa com o nome do
tipo da função, o mesmo de seu protótipo.
Passando vários argumentos para uma função
Se vários argumentos são solicitados, eles podem ser passados entre os parênteses na
chamada à função, separados por vírgulas. Uma função pode receber quantos argumentos forem
necessários, porém sempre retornará apenas um valor.
A seguir, vemos o exemplo de um programa que passa dois argumentos para a função
retangulo(), cujo propósito é desenhar retângulos de vários tamanhos na tela. Os dois argumentos
são a largura e a altura do retângulo; cada retângulo representa um cômodo de uma casa.
Chamadas a funções usadas como argumentos de outras
funções
Uma função pode ser utilizada numa expressão da mesma forma que utilizamos valores
numéricos e variáveis. Podemos também utilizar a chamada a uma função como argumento para
outra função. O exemplo a seguir é a modificação do programa numero_ao_cubo.cpp visto na última
aula.
Note que a função cubo() está sendo chamada dentro da função printf(). Nesse caso, não há o
armazenamento do retorno da função cubo(), pois ela é simplesmente impressa na tela.
Macros
Na linguagem C há um pré-processador que nada mais é do que um programa que examina o
código e executa algumas modificações antes da compilação, com base em instruções chamadas
diretivas. As diretivas devem fazer parte do texto-fonte que criamos, mas não farão parte do
programa após compilado; elas são retiradas do texto pelo pré-processador antes da compilação.
Há uma série de diretivas que são reconhecidas pelo pré-processador, como a #include que já
conhecemos. Agora a #define será apresentada.
A diretiva #define
A diretiva #define, na sua forma mais simples, é usada para definir constantes com nomes
apropriados.
Quando o compilador encontra a diretiva #define, procura em cada linha abaixo dela a
ocorrência da palavra PI e a substitui por 3,14. O nome que segue a palavra #define é chamado
identificador. A frase escrita após o identificador é chamada texto.
Por convenção, o identificador é sempre escrito em letras maiúsculas. Observe que não há
pondo e vírgula após a diretiva do pré-processador. Cada diretiva deve ser escrita em uma nova
linha.
Por meio da diretiva #define, podemos definir mais do que apenas uma constante.Veja o
exemplo:
Com a definição acima, onde for encontrada a palavra ERRO, haverá a substituição por
printf("\a\aERRO!!).
Criação de macros
A diretiva #define também pode ser utilizada para aceitar argumentos. A utilização de #define
com este propósito é conhecida como macro. Veja o exemplo:
Após o pré-processamento, nosso programa será o seguinte:
Referências
DASGUPTA, Sanjoy; PAPADIMITRIOU, Christos; VAZIRANI, Umesh. Algoritmos. São Paulo: McGraw
Hill, 2009.
HEINEMAN, George T.; POLLICE, Gary; SELKOW, Stanley. Algoritmos: o guia essencial. Rio de
Janeiro: Alta Books, 2009.
MANZANO, André Luiz N. G.; MANZANO, Maria Izabel N. G. Estudo dirigido de informática básica.
São Paulo: Érica, 2008.
MANZANO, José Augusto N. G. Estudo dirigido de linguagem C. São Paulo: Érica, 2009.
MANZANO, José Augusto N. G.; OLIVEIRA, Jayr Figueiredo de Oliveira. Algoritmos, Lógica para
desenvolvimento de programação de computadores. São Paulo: Érica, 19 ed., 2006.
MIZRAHI, Victorine Viviane. Treinamento em linguagem C. São Paulo: Pearson, 2008. 2v.
SCHILDT, Herbert. Mayer. C completo e total. São Paulo: Pearson, 2006.
VILARIM, Gilvan. Algoritmos de programação para Iniciantes. São Paulo: Ciência Moderna, 2004.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando