Funções
Conclusão esperada desta atividade em 17/05
Funções definidas pelo usuário
Um dos princípios das linguagens estruturadas é dividir o código em sub-rotinas (que em C, são
chamadas de funções).
Função é um conjunto de instruções projetadas para cumprir uma tarefa particular e agrupadas
numa unidade com um nome para referenciá-la.
Funções permitem dividir grandes tarefas de programação em partes menores, trazendo
vantagens como:
Legibilidade: o código pode ser melhor modularizado, facilitando sua compreensão.
Encapsulamento: funções apropriadas podem esconder detalhes de operação quando
necessário, facilitando alterações.
Reuso: evita que o programador tenha que escrever o mesmo código repetidas vezes,
inclusive em novos programas.
Redução do código: qualquer sequência de instruções que apareça mais de uma vez no
programa é candidata a ser substituída por uma função.
1. Conceitos básicos
Veja o vídeo a seguir.
https://youtu.be/umTyQAY-qHU
2. Funções sem parâmetros
Veja o vídeo a seguir.
https://youtu.be/TeG1q2vBmuc
Implemente o código apresentado no vídeo (abaixo) para ver o funcionamento na prática.
#include <stdio.h>
void linha() // definição da função (código efetivo da função)
{
int i;
for (i=0; i<=25; i++)
printf("*");
printf("\n");
}
int main()
{
int i;
linha(); // chamada da função
printf("Números de 1 a 10: \n");
for (i=1; i<=10; i++)
printf("%d ", i);
printf("\n");
linha(); // chamada da função
return 0;
}
Alternativamente, é até mais comum definir as funções após o main()
Porém, neste caso, é preciso fazer a declaração (ou protótipo) da função antes do main(), como
no exemplo abaixo.
#include <stdio.h>
void linha(); // declaração (protótipo) da função -- a definição da função vem agora
abaixo da função principal main()
int main()
{
int i;
linha(); // chamada da função
printf("Números de 1 a 10: \n");
for (i=1; i<=10; i++)
printf("%d ", i);
printf("\n");
linha(); // chamada da função
return 0;
}
void linha() // definição da função (código efetivo da função)
{
int i;
for (i=0; i<=25; i++)
printf("*");
printf("\n");
}
3. Escopo de variáveis
O escopo de uma variável determina como e onde uma variável poderá ser utilizada dentro de um
programa.
Variável local
São declaradas dentro de uma função.
Não podem se acessadas fora da função onde foi declarada.
Não podem ser utilizadas diretamente por outras funções.
Variáveis locais de mesmo nome declaradas em funções diferentes são variáveis distintas
(mesmo que tenham o mesmo nome).
Quando a função onde a variável local foi declarada termina sua execução, a variável é
destruída (desalocada da memória).
Variável global
São declaradas fora das funções (incluindo a função principal main()).
São acessíveis a partir de qualquer parte do programa (incluindo dentro de qualquer
função).
Permanecem disponíveis durante toda a execução do programa.
Devem ser evitadas ao máximo a fim de permitir uma maior clareza, modularização e
manutenibilidade do programa como um todo.
Exemplo do vídeo:
#include <stdio.h>
int x; // variável global
void f()
{
int y; // variável local à função f()
x = 2;
y = 2;
printf("x no f(): %d\n", x);
printf("y no f(): %d\n", y);
}
int main()
{
int y; // variável local à função main()
x = 5;
y = 5;
printf("x no main antes de f(): %d\n", x);
printf("y no main antes de f(): %d\n", y);
f();
printf("x no main depois de f(): %d\n", x);
printf("y no main depois de f(): %d\n", y);
return 0;
}
4. Funções com parâmetros
Veja o vídeo a seguir.
https://youtu.be/Eo4tMZ00VaA
Implemente o código apresentado no vídeo (abaixo) para ver o funcionamento na prática.
#include <stdio.h>
#include <ctype.h> // biblioteca que contém a função toupper() que converte caracteres
alfabéticos para maiúsculas
void peso_ideal(char sexo, float altura)
{
float peso_ideal;
switch(toupper(sexo))
{
case 'F':
peso_ideal = altura * 62.1 - 44.7;
break;
case 'M':
peso_ideal = altura * 72.7 - 58.0;
break;
default:
printf("Sexo inválido! Digite F ou M\n");
peso_ideal = 0;
}
printf("Peso ideal: %.2f\n", peso_ideal);
}
int main()
{
char sexo;
float altura;
printf("Digite o sexo (F ou M): ");
scanf("%c", &sexo);
printf("Digite a altura (metros): ");
scanf("%f", &altura);
peso_ideal(sexo, altura);
return 0;
}
5. Funções com retorno
Veja o vídeo a seguir.
https://youtu.be/niTmi2OiCto
Implemente o código apresentado no vídeo (abaixo) para ver o funcionamento na prática.
#include <stdio.h>
#include <ctype.h>
float peso_ideal(char sexo, float altura)
{
float peso_ideal;
switch(toupper(sexo))
{
case 'F':
peso_ideal = altura * 62.1 - 44.7;
break;
case 'M':
peso_ideal = altura * 72.7 - 58.0;
break;
default:
printf("Sexo inválido! Digite F ou M\n");
peso_ideal = 0;
}
return (peso_ideal);
}
int main()
{
char sexo;
float altura;
float peso;
printf("Digite o sexo (F ou M): ");
scanf("%c", &sexo);
printf("Digite a altura (metros): ");
scanf("%f", &altura);
peso = peso_ideal(sexo, altura);
printf("Peso ideal: %.2f\n", peso);
// ou pode-se imprimir diretamente o resultado função
printf("Peso ideal: %.2f\n", peso_ideal(sexo, altura));
return 0;
}
6. Mais exemplos
Assista aos vídeos abaixo e implemente os exemplos mostrados na plataforma OnlineGDB.
https://youtu.be/tzBq7_Cn_D4
https://youtu.be/GGkaN_LwR0w
Funções definidas pelo usuário HYPERLINK
"https://turing.inf.ufg.br/mod/book/view.php?id=12821"Livro
Lista de exercícios (funções) HYPERLINK
"https://turing.inf.ufg.br/mod/resource/view.php?id=13093"Arquivo
Atividade avaliativa 4 HYPERLINK
"https://turing.inf.ufg.br/mod/url/view.php?id=13184"URL
Esta atividade avaliativa deve ser feita e submetida na plataforma OnlineGDB.
O prazo final para a submissão é o dia 08/06 (quarta-feira) às 23:55h
Observações
Não deixem para fazer no último dia!!
À medida que um programa já esteja pronto, ele pode ser submetido na plataforma,
ou seja, não é necessário submeter todos os programas de uma só vez!