Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
cindy.fernandes@unifesspa.edu.br ↔ cindystella@ufpa.br
Abordagem top-down
Escopo de variáveis
Passagem de parâmetros
Funções
São estruturas que agrupam um conjunto de comandos, que são executados
quando a função é chamada.
Exemplo:
scanf("%d", &x);
Funções
As funções podem retornar um valor ao final de sua execução.
Exemplo:
x = sqrt(4);
2. Modularizando Algoritmos
Por que utilizar funções?
• Toda função deve ter um tipo que determina seu valor de retorno.
• Os parâmetros são variáveis que serão utilizadas pela função. Tais variáveis são
inicializadas com valores na chamada de execução da função.
2. Modularizando Algoritmos
Definindo uma função
• Quando o comando return é executado, a função termina sua execução e retorna o valor
indicado para quem fez a chamada da função.
2. Modularizando Algoritmos
modulo1.c
• Supondo um programa que chame uma rotina em C. A rotina executa e no final ela me
retorna um número. Para o meu programa que chamou essa rotina eu posso fazer uma
lógica baseada nesse retorno.
• Se o retorno for zero, sei que correu tudo bem e marco como sucesso, por exemplo.
• Se retornar 1, sabemos que deu erro.
• Podemos então notificar algum outro sistema ou chamar alguma outra rotina.
• Isso ocorre com todos os módulos do programa, com exceção do programa principal. É
sempre por esse módulo que o algoritmo inicia sua execução.
• Dentro desse módulo, pode haver chamada para outros módulos. Cada módulo que é
chamado é executado do início ao fim.
• Após seu término, o algoritmo prossegue do ponto em que o módulo foi chamado, ou
seja, do ponto da ativação.
2. Modularizando Algoritmos
#include <stdio.h>
int main() {
float a = 0, b = 5;
printf("%f\n", soma(a, b));
return 0; Ocorrerá um erro de compilação, já que a
} função soma não foi definida antes do ponto
em que ela foi invocada.
float soma(float op1, float op2) {
return (op1 + op2);
}
2. Modularizando Algoritmos
Declarando uma função sem definí-la
#include <stdio.h>
int main() {
float a = 0, b = 5;
printf("%f\n", soma(a, b));
return 0;
}
Exemplo
Exemplo
modulo3.c
#include <stdio.h>
#include <stdlib.h>
A função main possui um menu que fica lendo caracteres e se o caractere for F,
chama a função do fatorial, se for T chama a função da tabuada, se for A chama
a função do código ASCII, se for M chama a função da média e se for qualquer
outro caractere, o programa é encerrado. (modulo4.c)
* ASCII é um código numérico usado para representar os caracteres
3. Escopo de variáveis
3. Escopo de variáveis
• Como a variável pode ser acessada em qualquer módulo, uma alteração no valor dela
será vista em todos os outros módulos.
• Na manutenção de programas uma alteração em uma variável global pode ter efeitos
colaterais não previstos pelo programador, causando resultados indesejáveis.
Supondo que exista uma variável local e uma global com o mesmo nome, qual
prevalece?
Prevalece sempre a variável local.
As variáveis declaradas dentro da função main() são locais à mesma, pois embora
seja uma função especial main não deixa de ser uma função.
É muito comum programadores iniciantes confundirem as variáveis declaradas na
main() com variáveis globais. Isto é um erro conceitual. Para ser global a variável
tem que ser declarada fora do bloco de qualquer outra função, inclusive fora da
main().
4. Passagem de Parâmetros
2. float pi (int n)
5. Passagem de Parâmetros
5.1 Passagem de parâmetro por valor - Exemplo
• Deve ser usado quando mais de um valor deve ser retornado pelo
módulo.
Exemplo: modulo6.c
5. Passagem de Parâmetros
5.2 Passagem de parâmetro por referência
Exemplo:
5. Passagem de Parâmetros
5.2 Passagem de parâmetro por referência
• Em alguns casos pode ser
necessário criar uma função
que retorne mais de um
valor, ou que permita que as
outras funções alterem suas
variáveis. Nesses casos
utiliza-se a passagem por
referência e é fundamental o
uso de ponteiros.
5. Passagem de Parâmetros
6. Lista de Exercícios
1. São dadas as coordenadas (xc,yc) do centro de uma circunferência e a medida r de seu
raio. Também são dadas as coordenadas (x,y) de uma série de pontos, sendo que o último
deles é igual ao centro. Determine quantos pontos desta série estão dentro da
circunferência, quantos estão fora e quantos estão sobre ela. Crie a função dist(x1,y1,x2,y2)
que dá a distância entre os pontos (x1,y1) e (x2,y2) e, depois, utilize-a num programa que
resolva o problema proposto.
Suponha n= 345702159.
1. calculamos s = 3*10 + 4*9 + 5*8 + 7*7 + 0*6 + 2*5 + 1*4 + 5*3 + 9*2 = 202.
2. calculamos x = 11 − s%11 = 11 − 202%11 = 11 − 4 = 7.
3. O dígito verificador é 0 se x>9 e é o próprio x, caso contrário. Então, d= 7.
4. Codifique a função cpf(n,d) que devolve verdade só se o CPF não tem dígito
verificador d.
Use o método descrito no exercício anterior para calcular o dígito verificador do CPF do
seguinte modo:
Suponha CPF =345702159.
1. calculamos o primeiro dígito a = dv(345702159) = 7.
2. calculamos o segundo dígito b = dv(3457021597) = 1.
Então, número completo do CPF é 345702159−71.
6. Lista de Exercícios
3. Codifique a função dv(n) que recebe um número n e devolve o seu dígito verificador. Essa
função deve implementar o seguinte método:
Suponha n= 3457021597.
1. calculamos s = 3*11 + 4*10 + 5*9 + 7*8 + 0*7 + 2*6 + 1*5 + 5*4 + 9*3 +7*2= 252.
2. calculamos x = 11 − s%11 = 11 − 252%11 = 11 − 10 = 1. //segundo digito
3. O dígito verificador é 0 se x>9 e é o próprio x, caso contrário. Então, d= 1.
4. Codifique a função cpf(n,d) que devolve verdade só se o CPF não tem dígito
verificador d.
Use o método descrito no exercício anterior para calcular o dígito verificador do CPF do
seguinte modo:
Suponha CPF =345702159.
1. calculamos o primeiro dígito a = dv(345702159) = 7.
2. calculamos o segundo dígito b = dv(3457021597) = 1.
Então, número completo do CPF é 345702159−71.
6. Lista de Exercícios