Algoritmos Acadêmico: _________________________________ IP 06 Subprogramação (funções)
Até agora, em todos os programas que criamos, codificamos uma única função: main(). Entretanto, em todos eles, diversas funções foram utilizadas: printf(), scanf(), getch(), putch(), etc. Essas funções estão disponíveis no sistema através de bibliotecas que acompanham o compilador C++, mas podemos definir nossas próprias funções e utilizá-las da mesma maneira. Para definir uma função, empregamos a seguinte forma básica:
tipo nome(parâmetros) {
// declarações // comandos }
Sendo que:
– Tipo refere-se ao tipo de resposta que a função devolve e deve ser void (vazio) se a função não tem valor de resposta;
– Nome é o identificador da função no resto do programa;
– Parâmetros é uma lista de variáveis que representam valores de entrada para a função e deve ser void caso não haja valores de entrada;
Dentro do corpo da função, a primeira seção é destinada à declaração das variáveis e a segunda, aos comandos.
Nosso primeiro exemplo é uma função que não tem valor de resposta e não recebe argumentos ao ser chamada. Esta função tem como objetivo simular o som de um alarme e poderia ser utilizada, por exemplo, num programa que desejasse alertar o usuário sobre alguma operação indevida.
void alarme(void) { int f; sound(f); delay(100); for(f=100; f<=5000; f+=20) { } nosound(); }
Uma função do tipo void, quando executada, apenas produz um determinado efeito desejado, sem contudo devolver um valor de resposta. Sendo assim, o compilador não permite que funções void sejam usadas em expressões. Por exemplo, a chamada a seguir causaria um erro de compilação:
int a = alarme();
A declaração de uma função, conhecida como assinatura ou protótipo, consiste em seu tipo, nome e lista de parâmetros seguida de ponto-e-vírgula:
A declaração pode ser omitida se a implementação da função ocorre antes que ela seja referenciada no restante do programa. Por exemplo, a declaração da função alarme() torna-se desnecessária torna-se colocarmos a sua implementação antes da definição da função main(). Para que uma função seja reconhecida durante a compilação devemos declará-la ou defini-la antes de qualquer referência que é feita a ela no resto do programa.
Nosso próximo exemplo é uma função que nos permite dizer se um número é maior que outro, a partir de dois determinados valores. Para isso, será necessário que o números em questão, sejam passados à rotina sob a forma de uma lista de argumentos.
void maior(int num1, int num2) { if (num1>num2){
printf (" é o número é o maior"); }else {
printf(" é o número é o menor"); }
}
A vantagem de se ter uma função parametrizada é que, a cada chamada, podemos lhe passar valores diferentes. Isto permite, no caso da função maior(), que os numeros possam ter qualquer valor e que sejam exibidas em qualquer ponto da tela que julgarmos adequado. Exemplo de programa:
#include <stdio.h>
void maior(int num1, int num2); int main(void) { int num1,num2; printf("\nInforme os números: "); scanf ("%d-%d",&num1,&num2); printf("\nMaior %d ?", num1); maior(num1,num2); printf("\nMaior %d ?", num2); maior(num2,num1); return 0; }
void maior(int num1, int num2) { if (num1>num2){
printf (" é o número é o maior"); }else {
printf(" é o número é o menor"); }
}
INSTITUTO FEDERAL DO PARANÁ | Palmas
Se uma função não é do tipo void, então ela deve, necessariamente, devolver um valor como resultado de sua execução. Para isso, a função deve empregar o comando return. Esse comando, além de especificar a resposta da função, faz com que o controle retorne ao ponto onde ela foi chamada no programa, interrompendo imediatamente sua execução. Exemplo, calculando a soma de dois números reais:
float soma(float a, float b) { float x;
x = a + b; return x; }
Mesmo quando o comando return aparece em diversos pontos dentro de uma função, apenas uma dessas ocorrências pode ser executada a cada vez que a função é chamada. Como exemplo, considere a função a seguir que devolve o máximo entre os dois valores que lhe são passados como argumentos.
double max(double a, double b) { if( a>b ) {
return a; }
return b; }
Note que a execução do primeiro return impede a execução do segundo, mesmo sem termos colocado a parte else do if. Um comando return só devolve um único valor e, como ele interrompe a execução da função, não há como criar uma função que devolva mais que um valor por vez.
Fonte:
Exercícios Propostos desta IP:
* resolver no caderno e entregar para correção com esta folha
E) Funções
31
Construa uma estrutura modular que calcule o Gasto Energético Basal (GEB), utilizando as seguintes fórmulas:
para os homens: GEB = 66.47 + (13.75 * PC) + (5 * Alt) – (6.76 * I); para as mulheres: GEB = 655.1 + (9.56 * PC) + (1.85 * Alt) – (4.67 * I); onde: PC - Peso Corporal em "kg"; Alt- altura em "cm" e I- Idade.
Obs. No corpo do programa principal deve-se obter os dados de entrada: sexo, peso corporal, altura e idade e uma função deverá receber estes dados através de parâmetros retomando o gasto energético basal calculado.
32
Implemente uma função que recebe um parâmetro inteiro n e que ao ser chamada imprime uma sequência de linhas, como mostra o exemplo a seguir para n = 3:
1 1 1 2 2 3 2 2 1 1 1 33
Escreva uma função que recebe um parâmetro inteiro n e que ao ser chamada imprime uma sequência de linhas, como mostra o exemplo a seguir para n = 3:
1 * * 1 2 * 1 2 3 1 2 * 1 * * 34
Escreva uma função que recebe dois parâmetros inteiros n e vezes, onde: n- indica o final da sequência e vezes- o nro de vezes que a sequência deverá ser repetida. Veja o exemplo abaixo para n = 3 e vezes = 2. 1 2 2 3 3 3 1 2 2 3 3 3
INSTITUTO FEDERAL DO PARANÁ | Palmas
35
Escreva uma função que recebe um parâmetro inteiro n e que ao ser chamada imprime uma sequência de linhas, como mostra o exemplo a seguir para n = 3:
===== 1 2 3 1 2 1 ===== 1 1 2 1 2 3 ===== 36
Escreva uma função que receba através de parâmetros: o valor de uma aplicação, o percentual de rendimento mensal obtido por esta aplicação e o período do investimento; e retome o valor da aplicação ao fmal do período de investimento. Obs. a cada 12 meses o percentual de rendimento deve ser aumentado em 0,25 %.
37
Construa uma estrutura modular com as funções que:
1) calcula e retoma o Índice de Massa Corpórea (IMC) através da seguinte fórmula: IMC = PC / (Alt * Alt);
onde: PC - Peso Corporal em kg e Alt- altura em metros.
2) recebe através de parâmetro o índice de massa corpórea e retoma a interpretação conforme a tabela a seguir: IMC Interpretação Menos de 20 Magro 20 – 24 Normal 25 – 29 Acima do peso 30 – 34 Obeso