Programação C - Funções



 

        O objetivo de trabalharmos com funções é o de modularizar o programa, tornando os códigos reutilizáveis em momentos distintos da execução do sistema. Sendo que o objetivo principal, mas não obrigatório, é que cada função execute uma única tarefa. Podendo ser chamada e executada ‘n’ vezes ao logo do programa.
Uma questão muito importante para o processamento do sistema, é que uma função somente existe na memória do computador no momento em que é chamada, e deixa de existir assim que é finalizada. Deste modo, nosso programa pode conter mil funções que não vai afetar o desempenho do programa.

Declarando uma função

        As funções podem ser declaradas em qualquer local do programa, e respeitam as questões de “Local” e “Global” como as variáveis. Se for declarada dentro do “main()”,  vai existir somente dentro dele, se for declarado fora vai existir em qualquer local, podendo inclusive ser acessada por outras funções. Sim, uma função pode chamar outra.

        A declaração consiste em definirmos primeiro o tipo da função entre void, int ou char. Este é que vai definir qual o tipo de dado que a função poderá retornar para quem a chamou (veremos a frente). Após o tipo, é definido um nome para a função seguido de abre e fecha parênteses.

        O bloco dos comandos de execução da função vem em seguida dentro do abre e fecha chaves. Após a declaração, para chamarmos a execução da função, basca colocar seu nome seguido do abre e fecha parênteses e “ponto e vírgula”. Observar que o ponto e vírgula é somente na chamada da função, na declaração não tem.

 

 

        As funções podem ser declaradas antes ou após a função principal “mail()”. No entanto, se declararmos a função “após” a chamada dela para execução, temos que colocar no início do programa uma declaração da função. Informando ao compilador que a função vai existir e será declara mais à frente. A este fato chamamos de “colocar um protótipo da função“. Veja, “void fim();”.

 

 

Retornando valores da função

        Quando declaramos uma função e dizemos que ela é de um determinado tipo (int, float, char), estamos informando ao compilador que o dado retornado desta função, por intermédio do comando “return”, é deste tipo. Lembrando que se o tipo void, não retorna nada.

 

 

Passagem de parâmetros por valor

        Podemos passar para uma determinada função, valores que estejam em outra função. Neste caso, a função que está recebendo os valores, vai ter que colocar em sua linha de declaração, uma variável do mesmo tipo para receber este valor. Estas duas variáveis (a de origem e a de destino) com este mesmo valor, são independentes, elas ocupam espaços de memória independentes. Deste modo a alteração de valor de uma variável de destino não altera automaticamente o valor da variável de origem.

        Outro fato, é que podemos declarar variáveis com o mesmo nome em funções diferentes. Lembrando o main é uma função. Pois como ocupam espaços de memória diferentes, elas são totalmente independentes uma das outras.

 

 

Passagem de parâmetros por referência

        Podemos passar para uma determinada função, o “endereço de memória” de uma variável que esteja em outra função. Neste caso, na chamada da função termos que colocar a frente da variável de origem o “&”. Informando ao compilador que estamos enviando o endereço desta vaiável. Na função que está recebendo o dado, teremos que colocar a frente da variável o “*” informando ao compilador que esta é uma variável do tipo “ponteiro”, ou seja, que aponta para o endereço da outra.

        Estas duas variáveis (a de origem e a de destino) vão compartilhar o mesmo endereço de memória, assim, se o valor de uma é alterado, altera automaticamente o valor da outra.

 

 

Recursividade

        Outro recurso para se trabalhar com funções é a “Recursividade”. Uma função recursiva, é uma função que tem dentro de si uma chamada a ela mesma. Como a função somente existe na memória quando é chamada, a cada chamada de uma função é criada uma instância desta na memória.

        Vamos supor que uma função fez 4 chamadas dela mesma, neste caso teremos 4 instâncias da mesma função na memória. Onde cada uma possui espaço de memória diferente e consequentemente espaços de memória diferente para suas variáveis. Ou seja, totalmente independentes. Aqui deve-se tomar muito cuidado para não cair em um loop eterno, onde a função vai ficar chamando ela mesma sem um fim.

 

 

 

 

 

 


Exercícios

 

1) Fazer um algoritmo que simule uma calculadora onde além das 4 operações básicas, o usuário poderá calcular um número X elevado ao quadrado (x2), um número X elevado a Y (xy) e a raiz quadrada de um número. Também poderá realizar estas operações sobre o resultado de um cálculo anterior, assim como guardar na memória um determinado resultado para cálculos futuros. Criar funções específicas para cada necessidade.

 

2) Tem-se um conjunto de dados contendo a altura e o sexo (M ou F) de 15 pessoas. Faça um programa que calcule e mostre: A) a maior e a menor altura do grupo; B) a média de altura das mulheres; C) o número de homens; C) o sexo da pessoa mais alta. Criar tudo em funções.

 

3) Fazer um programa que possibilite armazenar, pesquisar e excluir nomes de pessoas em um vetor de strings. Poderá ser armazenado até no máximo 10 nomes. O usuário é quem determina se deseja armazenar, pesquisar ou excluir. Se não for possível incluir novos nomes, avisar o Usuário que o vetor está lotado. Utilizar funções.

 

4) Faça um programa onde o usuário tenha as seguintes opções de cálculo: I) área de um quadrado; II) área de um círculo; III) área de um triângulo; IV) Perímetro de um círculo; V) Sair.

 

5) Dado um vetor X de n elementos faça um algoritmo que: A) crie outro vetor Y contendo os elementos de x que estão na faixa entre 10 e 40; B) crie outro vetor W contendo os números que estão nas posições pares; C) pesquise a existência de um determinado elemento Y no vetor X; D) escreva o menor e maior elemento do vetor X.

 

6) Faça um algoritmo onde o usuário tenha a qualquer momento as seguintes opções: A) Informar para uma lista o nome, as 4 notas e o sexo dos alunos de uma sala qualquer. (Máximo de 30 alunos); B) poderá incluir novos alunos na lista a qualquer momento até o limite de 30; C) poderá ter a opção de limpar a lista; D) informar o percentual de meninos e meninas; E) informar o percentual de aprovados (média >= 7); F) informar o nome dos reprovados (média < 4).

 

7) Fazer um algoritmo onde após informar um número, o usuário deverá informar se pretende obter o fatorial deste número, a tabuada, retornar o elemento da série de Fibonacci ou verificar se ele está na série de Fibonacci.