|
Como citado no item
3, um programa em linguagem C é formado por um conjunto de funções.
As funções , na maioria das linguagens de programação,
seguem a seguinte metodologia em relação a passagem de parâmetros
e retorno de resultados (quando não
nos referimos a passagem por referência):
1 - Funções
Sem
Passagem de Parâmetros e
Sem Retorno
de Resultado |
Este tipo de função
pode ser considerado como um procedimento quase independente da função
principal.
Costumo dizer que
este tipo de função não exerce controle algum sobre
as variáveis do programa (isso é lógico).
Ex.:
void
entra_mat(void)
{
int i, j;
for(i=1;i<=3;i++)
for(j=1;j<=4;j++)
scanf("%d",&mat[i][j]);
} |
Neste
exemplo, a função dá entrada em uma variável
matriz (vetor bidimensional) que foi anteriormente declarada globalmente.
Veja o uso da palavra reservada void, indicando que não haverá
passagem de parâmetros ou retorno de resultados. |
int
mat[3][3];
void main(void)
{
...
entra_mat( );
} |
Ao
lado teríamos a declaração da matriz globalmente e
a chamada para a função entra_mat no programa principal. |
2 - Funções
Sem
Passagem de Parâmetros e
Com Retorno
de Resultado |
Este tipo de função
retorna ao programa (função) principal, um resultado através
do comando return( ).
Costumo dizer que
este tipo de função exerce um controle médio sobre
as variáveis do programa.
Ex.:
int
media_mat(void)
{
int i, j, media;
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
media=media+mat[i][j];
media = media/9;
return(media);
} |
Neste
exemplo, a função acumula a soma de todos os valores de uma
variável matriz (vetor bidimensional) que foi anteriormente declarada
globalmente e coloca o resultado na variável media. Em seguida calcula
a média aritmética, já que a matriz 3X3 possui 9 valores
ao todo. Só então a função retorna o valor
da média |
int
mat[3][3];
void main(void)
{
int K,A;
...
K=media_mat( );
A=K*3;
...
} |
Ao
lado teríamos a declaração da matriz globalmente e
o retorno do resultado da função media_mat na variável
K. Quando o programa tenta fazer a atribuição do valor para
K, necessita resolver primeiro a função. Note que a variável
deverá ter o mesmo tipo retornado pela função. |
3 - Funções
Com
Passagem de Parâmetros e
Sem Retorno
de Resultado |
Este tipo de função
recebe parâmetros porém não retorna resultados ao programa
(função) principal.
Costumo dizer que
este tipo de função também exerce um controle médio
sobre as variáveis do programa.
Ex.:
void
calc_desc(float sal){
float desc;
if(sal<1000)
printf("Isento");
else
if(sal<=2500)
{desc=0.25*sal;
printf("Desc = %f",desc);}
else
{desc=0.37*sal;
printf("Desc = %f",desc);}
} |
Neste
exemplo, a função recebe a variável real sal (na
verdade, o parâmetro salario passado), calcula em qual faixa
se encontra tal valor e mostra na tela o resultado de acordo com a faixa
salarial. Nenhum valor é retornado para o programa(função)
principal. |
void
main(void)
{
float salario;
printf("Digite seu salário");
scanf("%f",&salario);
cal_desc(salario);
} |
Ao
lado teríamos a declaração da variável salario,
que será recebida do teclado (do usuário) através
de scaf(). De posse desse valor, executa-se a chamada da função
cal_desc()
que receberá o salario como parâmetro mas não
retornará nenhum resultado ao programa principal. |
4 - Funções
Com
Passagem de Parâmetros e
Com Retorno
de Resultado |
Costumo dizer que
este tipo de função exerce controle forte sobre as variáveis
do programa.
Ex.:
float
calc_desc(float sal)
{
float desc;
if(sal<1000)
desc=0;
else
if(sal<=2500)
desc=0.25*sal;
else
desc=0.37*sal;
return(desc);
} |
Agora
modificamos o exemplo anterior fazendo com que a função retorne
o valor do desconto, que deverá ser um float. |
void
main(void)
{
float desconto;
printf("Digite seu salário");
scanf("%f",&salario);
desconto=cal_desc(salario);
printf("Seu desconto será de R$ %f",desconto);
} |
Dessa vez, o programa principal passará um parâmetro para a função que calculará o desconto, devolvendo-o na variável desconto. |
|