15 – PROGRAMAÇÃO
MODULARIZADA
Bruno B. F. Leonor
INTRODUÇÃO A PROGRAMAÇÃO
Funções e Procedimentos
• Toda f() que é criada pro obrigação tem que ter um retorno;
• Utilizadas geralmente quando é preciso calcular algo, retornar um
valor verdadeiro, ou retornar um teste.
• É quase igual a uma f(), mas não precisa necessariamente ter retorno
algum;
• Utilizamos quando precisamos utilizar alguns códigos que vamos ter
que repetir.
• Em C existe apenas fç.
Funções e Procedimentos
float fmedia(float n1, float n2)
{
float m = 0;
m = (n1 + n2)/2;
return m;
}
float pmedia()
{
float n1 = 0, n2 = 0, m = 0;
printf("Digite a nota 1 do aluno: ");
scanf("%f", &n1);
printf("Digite a nota 2 do aluno: ");
scanf("%f", &n2);
m = (n1 + n2)/2;
printf("\n\nA media do aluno foi %6.2f", m);
}
Características de uma f()
• Cada f() tem que ter um nome único;
• Uma f() pode ser invocada através de outra f();
• Uma f() deve realizar uma única tarefa bem definida;
• Uma f() deve comportar-se como uma caixa preta. Não interessa
como funciona, o que interessa é que o resultado final seja o
esperado, sem efeitos colaterais.
Características de uma f()
• O código de uma f() deve ser o mais independente possível do resto
do programa, e deve ser tão genérico quanto possível (reutilizado).
• Uma f() pode receber parâmetros que alterem o seu comportamento
de forma a adaptar-se facilmente a situações distintas;
• Uma f() pode retornar, para a entidade que a invocou um valor como
resultado do seu trabalho.
Como funciona uma f()
float fmedia(float n1, float n2) //Função
{
float m = 0;
m = (n1 + n2)/2;
return m;
}
main()
{
float num1 = 0, num2 = 0;
int op = 0;
printf("Digite a nota 1 do aluno: ");
scanf("%f", &num1);
printf("Digite a nota 2 do aluno: ");
scanf("%f", &num2);
printf("\nA media foi %6.2f", fmedia(num1, num2));
}
Como funciona uma f()
float fmedia(float n1, float n2) //Função
{
float m = 0;
m = (n1 + n2)/2;
return m;
}
main()
{
float num1 = 0, num2 = 0;
int op = 0;
printf("Digite a nota 1 do aluno: ");
scanf("%f", &num1);
printf("Digite a nota 2 do aluno: ");
scanf("%f", &num2);
printf("\nA media foi %6.2f", fmedia(num1, num2));
}
Como funciona uma f()
float fmedia(float n1, float n2) //Função Cabeçalho da f()
{
float m = 0;
m = (n1 + n2)/2;
return m;
}
main()
{
float num1 = 0, num2 = 0;
int op = 0;
printf("Digite a nota 1 do aluno: ");
scanf("%f", &num1);
printf("Digite a nota 2 do aluno: ");
scanf("%f", &num2);
printf("\nA media foi %6.2f", fmedia(num1, num2));
}
Como funciona uma f()
float fmedia(float n1, float n2) //Função
{
float m = 0;
m = (n1 + n2)/2;
return m;
}
Parâmetros e Argumentos
main()
{
float num1 = 0, num2 = 0;
int op = 0;
printf("Digite a nota 1 do aluno: ");
scanf("%f", &num1);
printf("Digite a nota 2 do aluno: ");
scanf("%f", &num2);
printf("\nA media foi %6.2f", fmedia(num1, num2));
}
Corpo da f()
• É constituído por instruções;
• Tem que se seguir imediatamente ao cabeçalho da f();
• Pode-se escrever qualquer instrução (if, for, switch, ...);
• Não existe limite para o número de instruções, devendo ser
relativamente pequeno e responsável por realizar uma única tarefa.
return
• Permite terminar a execução de uma f() e voltar ao programa que o
invocou;
• Na f() main faz com que o programa termine,
f() com retorno de valor
• É possível que uma f() seja responsável por realizar uma determinada
tarefa e que, uma vez terminada essa tarefa, devolva um único
resultado. Esse resultado pode ser armazenado em uma variável ou
aproveitado por qualquer instrução.
int soma( int x, int y )
{
int res;
res = x + y;
return res;
}
f() com retorno de valor
• Uma f() pode ser invocada dentro de outra f().
prinf(“%d”, dobro( soma( dobro(2), 3) ) );
f() com retorno de valor
• Uma f() pode ser invocada dentro de outra f().
prinf(“%d”, dobro( soma( dobro(2), 3) ) );
2*2
f() com retorno de valor
• Uma f() pode ser invocada dentro de outra f().
prinf(“%d”, dobro( soma( dobro(2), 3) ) );
4+3
f() com retorno de valor
• Uma f() pode ser invocada dentro de outra f().
prinf(“%d”, dobro( soma( dobro(2), 3) ) );
7*2
f() com retorno de valor
• Uma f() pode ser invocada dentro de outra f().
prinf(“%d”, dobro( soma( dobro(2), 3) ) );
14
O tipo void
• É uma palavra reservada que permite indicar que uma f() não
devolve qualquer tipo.
void f()
void f( void )
• Uma f() que retorna void é chamada normalmente de procedimento.
Onde colocar a f()?
• Podem ser colocadas em qualquer local do arquivo, antes ou depois
de serem invocadas, antes ou depois da f() main;
main()
{
f();
}
void f(){
instruções;
}
Variáveis Locais
• Variáveis podem ser declaradas dentro do corpo de uma f();
• São visíveis apenas dentro da própria f();
• Só podem ser utilizadas dentro da própria f();
• Terminada a execução de uma f() todas as suas variáveis locais são
destruídas;
• Sempre que possível recorrer as variáveis locais, evitando efeitos
colaterais com o uso de variáveis globais.
Chamada por valor
• A f() chamada não pode alterar diretamente uma variável na f()
chamadora.
void troca( int a, int b )
{
int temp;
temp = a;
a = b;
b = temp;
}
Chamada por referência
• A troca efetiva é obtida através da chamada por referência.
void troca( int *a, int *b )
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}