Funções PDF
Funções PDF
Funções PDF
Memória e Funções
Revisão, Entrada-Processamento-Saída e Passagem de parâmetros
2
Modelo Entrada-Processamento-Saída (EPS)
ENTRADA
PROCESSAMENTO
SAÍDA
3
Modelo Entrada-Processamento-Saída (EPS)
Significado
Cálculo do IMC
ENTRADA 2 O QUE
eu preciso / Altura e peso
2
eu tenho
COMO
Aplicar a fórmula para efetuar o
3 cálculo do índice e identificá-lo na 3
PROCESSAMENTO
fazer tabela do IMC.
4
Modelo Entrada-Processamento-Saída (EPS)
Significado
Encontrar um
elemento em um vetor
ENTRADA 2 O QUE
eu preciso / Conjunto dos valores inteiros e o
valor a ser encontrado
2
eu tenho
COMO
Comparar o valor a ser encontrado
3 com cada elemento do conjunto 3
PROCESSAMENTO
fazer até encontrá-lo.
5
Modelo Entrada-Processamento-Saída (EPS)
Níveis de Abstração
Função
ENTRADA
Aplicação
PROCESSAMENTO
ENTRADA
Função
SAÍDA ENTRADA
ENTRADA
SAÍDA
PROCESSAMENTO
SAÍDA
SAÍDA
6
Modelo Entrada-Processamento-Saída (EPS)
Níveis de Abstração
Aplicação
ENTRADA
PROCESSAMENTO
SAÍDA
7
Modelo Entrada-Processamento-Saída (EPS)
Níveis de Abstração
Aplicação
Função
ENTRADA
ENTRADA
PROCESSAMENTO
PROCESSAMENTO
SAÍDA
SAÍDA
8
Modelo Entrada-Processamento-Saída (EPS)
Níveis de Abstração Função
2 ENTRADA
PROCESSAMENTO
ENTRADA
1 3 SAÍDA
PROCESSAMENTO Função
4 ENTRADA
6
PROCESSAMENTO
SAÍDA
5 SAÍDA
9
Modelo Entrada-Processamento-Saída (EPS)
Diferentes formas de acordo com a perspectiva
Aplicação Função
1. Console (scanf) 1. Parâmetros com valores absolutos
ENTRADA 2. Literal (valores absolutos) 2. Parâmetros com referências
3. Argumentos na execução
4. Arquivo
PROCESSAMENTO
10
Modelo Entrada-Processamento-Saída (EPS)
Diferentes formas de acordo com a perspectiva
11
Modelo EPS na perspectiva Aplicação
ENTRADA
Perspectiva Aplicação
Exemplos
1. Console (scanf)
2. Literal (valores absolutos)
Gasto com combustível em uma viagem 3. Argumentos na execução
4. Arquivo
int main(){
int distancia;
float preco, consumo;
//ENTRADA
printf("Distancia (Km): ");
scanf("%d", &distancia);
printf("Preco combustivel (Litro): ");
scanf("%f", &preco);
printf("Consumo (Km por L): ");
scanf("%f", &consumo);
//PROCESSAMENTO
float qtdeLitros = distancia / consumo;
float total = qtdeLitros * preco;
//SAÍDA
printf("Valor combustivel: %.2f\n",total);
}
12
Modelo EPS na perspectiva Aplicação
ENTRADA
Perspectiva Aplicação
Exemplos
1. Console (scanf)
2. Literal (valores absolutos)
Gasto com combustível em uma viagem 3. Argumentos na execução
4. Arquivo
int main(){ 2 //ENTRADA
distancia = 90;
int distancia; preco = 3.2;
float preco, consumo; consumo = 8.5;
1 //ENTRADA
Terminal
printf("Distancia (Km): ");
scanf("%d", &distancia); 3 //ENTRADA $ gcc -o calculo calculo.c
printf("Preco combustivel (Litro): "); distancia = atoi(argv[1]);
scanf("%f", &preco); $ ./calculo 90 3.2 8.5
preco = atof(argv[2]);
printf("Consumo (Km por L): "); consumo = atof(argv[3]);
scanf("%f", &consumo);
Arquivo: in.txt
//PROCESSAMENTO
float qtdeLitros = distancia / consumo; 4 //ENTRADA 90
float total = qtdeLitros * preco; FILE *file_in = 3.2
fopen("in.txt","r"); 8.5
//SAÍDA fscanf(file_in,"%d",&distancia);
printf("Valor combustivel: %.2f\n",total); fscanf(file_in,"%f",&preco);
} fscanf(file_in,"%f",&consumo);
fclose(file_in);
13
Modelo EPS na perspectiva Aplicação
SAÍDA
Perspectiva Aplicação
Exemplos
1. Console (printf)
2. Arquivo
Gasto com combustível em uma viagem
int main(){
int distancia;
float preco, consumo;
//ENTRADA
printf("Distancia (Km): "); 2 //SAÍDA
scanf("%d", &distancia); FILE *file_out = fopen("out.txt","w");
printf("Preco combustivel (Litro): "); fprintf(file_out,"Valor combustivel: %.2f\n",total);
scanf("%f", &preco); fclose(file_out);
printf("Consumo (Km por L): ");
scanf("%f", &consumo);
Arquivo: out.txt
//PROCESSAMENTO
float qtdeLitros = distancia / consumo; Valor combustivel: 33.8
float total = qtdeLitros * preco;
1 //SAÍDA
printf("Valor combustivel: %.2f\n",total);
}
14
Modelo EPS na perspectiva Aplicação
Síntese
Console (scanf)
1 scanf("%d", &distancia);
scanf("%f", &preco);
scanf("%f", &consumo); float qtdeLitros, total;
16
Funções
Modelo EPS
Programa
ENTRADA Função
ENTRADA
PROCESSAMENTO
PROCESSAMENTO
SAÍDA
SAÍDA
17
Funções
Comportamento
main
Escopo da função
Uma função não tem acesso ao escopo da outra. Por exemplo, a função1 não Pilha de Execução
consegue “enxergar” os parâmetros e/ou variáveis locais declaradas em
função2 ou main. 18
Passagem de Parâmetro:
Uma forma de comunicação entre as FUNÇÕES
19
Funções
Passagem de Parâmetro
main soma
int soma(int n1, int n2){
int t = n1 + n2;
P num1 num2 n1
return t; I 1 2 1 t
} L #20 #24 @50
H total
n2
@58
A 2
int main(){ @54
#28
int num1 = 1;
int num2 = 2;
printf("%d\n", total);
}
20
Funções
Passagem de Parâmetro
main soma
int soma(int* n1, int* n2){
int t = (*n1) + (*n2);
P num1 num2 n1
return t; I 1 2 t
} L #20 #24 @50
H total
n2
@58
A
int main(){ @54
#28
int num1 = 1;
int num2 = 2;
printf("%d\n", total);
}
21
Funções
Passagem de Parâmetro
main soma
int soma(int* n1, int* n2){
int t = (*n1) + (*n2);
P num1 num2 n1
return t; I 1 2 #20 t
} L #20 #24 @50
H total
n2
@58
A #24
int main(){ @54
#28
int num1 = 1;
int num2 = 2;
printf("%d\n", total);
}
22
Voltando ao exemplo:
Gasto com combustível em uma viagem
23
Modelo EPS na perspectiva FUNÇÃO
Diferentes formas de Entrada e Saída
Aplicação Função
1. Console (scanf) 1. Parâmetros com valores absolutos
ENTRADA 2. Literal (valores absolutos) 2. Parâmetros com referências
3. Argumentos na execução
4. Arquivo
PROCESSAMENTO
24
ENTRADA SAÍDA
int main(){
int distancia;
float preco, consumo; Valor absoluto
//ENTRADA 1 //PROCESSAMENTO
float total;
distancia = 90; total = calcula(distancia, preco, consumo);
preco = 3.2;
consumo = 8.5;
//PROCESSAMENTO
float qtdeLitros = distancia / consumo;
float total = qtdeLitros * preco; Referência
//SAÍDA
2 //PROCESSAMENTO
printf("Valor combustivel: %.2f\n",total); float total;
} total = calcula(&distancia, &preco, &consumo);
25
[Código no Repl.it]
Modelo EPS na perspectiva FUNÇÃO
Entrada
return total;
}
main calcula
distancia dist qtde
int main(){
P 90 90
I
int distancia; #10 @50 @62
float preco, consumo;
L
total preco preco total
H
//ENTRADA 3.2 3.2
A
distancia = 90; #22 #14 @54 @66
preco = 3.2; consumo consumo
consumo = 8.5;
8.5 8.5
1 //PROCESSAMENTO
//PROCESSAMENTO #18 @58
float
floattotal;
qtdeLitros = distancia / consumo;
total = calcula(distancia, preco, consumo);
float total = qtdeLitros * preco;
//SAÍDA
printf("Valor combustivel: %.2f\n",total);
}
26
[Código no Repl.it]
Modelo EPS na perspectiva FUNÇÃO
Entrada
return total;
}
main calcula
distancia dist qtde
int main(){
P 90 90 10.6
I
int distancia; #10 @50 @62
float preco, consumo;
L
total preco preco total
H
//ENTRADA 33.9 3.2 3.2 33.9
A
distancia = 90; #22 #14 @54 @66
preco = 3.2; consumo consumo
consumo = 8.5;
8.5 8.5
1 //PROCESSAMENTO
//PROCESSAMENTO #18 @58
float
floattotal;
qtdeLitros = distancia / consumo;
total = calcula(distancia, preco, consumo);
float total = qtdeLitros * preco;
//SAÍDA
printf("Valor combustivel: %.2f\n",total);
}
27
[Código no Repl.it]
Modelo EPS na perspectiva FUNÇÃO
Entrada
return total;
main calcula
}
I
int distancia; #10 @50 @74
float preco, consumo;
L
total preco preco total
H
//ENTRADA 3.2
A
distancia = 90; #22 #14 @58 @78
preco = 3.2; consumo consumo
consumo = 8.5;
8.5
2 //PROCESSAMENTO
//PROCESSAMENTO #18 @66
float
floattotal;
qtdeLitros = distancia / consumo;
total = calcula(&distancia, &preco, &consumo);
float total = qtdeLitros * preco;
//SAÍDA
printf("Valor combustivel: %.2f\n",total);
}
28
[Código no Repl.it]
Modelo EPS na perspectiva FUNÇÃO
Entrada
return total;
main calcula
}
I
int distancia; #10 @50 @74
float preco, consumo;
L
total preco preco total
H
//ENTRADA 3.2 #14
A
distancia = 90; #22 #14 @58 @78
preco = 3.2; consumo consumo
consumo = 8.5;
8.5 #18
2 //PROCESSAMENTO
//PROCESSAMENTO #18 @66
float
floattotal;
qtdeLitros = distancia / consumo;
total = calcula(&distancia, &preco, &consumo);
float total = qtdeLitros * preco;
//SAÍDA
printf("Valor combustivel: %.2f\n",total);
}
29
[Código no Repl.it]
Modelo EPS na perspectiva FUNÇÃO
Entrada
return total;
main calcula
}
I
int distancia; #10 @50 @74
float preco, consumo;
L
total preco preco total
H
//ENTRADA 33.9 3.2 #14 33.9
A
distancia = 90; #22 #14 @58 @78
preco = 3.2; consumo consumo
consumo = 8.5;
8.5 #18
2 //PROCESSAMENTO
//PROCESSAMENTO #18 @66
float
floattotal;
qtdeLitros = distancia / consumo;
total = calcula(&distancia, &preco, &consumo);
float total = qtdeLitros * preco;
//SAÍDA
printf("Valor combustivel: %.2f\n",total);
}
30
[Código no Repl.it]
Modelo EPS na perspectiva FUNÇÃO
Entrada
ENTRADA ENTRADA
Passando parâmetros por Passando parâmetros por
VALOR REFERÊNCIA
L L
total preco preco total total preco preco total
H H
33.9 3.2 3.2 33.9 33.9 3.2 #14 33.9
A A
#22 #14 @54 @66 #22 #14 @58 @78
consumo consumo consumo consumo
8.5 8.5 8.5 #18
#18 @58 #18 @66
31
[Código no Repl.it]
Modelo EPS na perspectiva FUNÇÃO
Saída
return total;
} main calcula
dist preco
P
int main(){ distancia preco 90 3.2
I
90 3.2 @50 @54
int distancia; consumo qtde
L
#10 #14
float preco, consumo;
H consumo total 8.5
//ENTRADA
A 8.5 @58 @70
distancia = 90; total
preco = 3.2; #18 #22
consumo = 8.5;
@74
1 //PROCESSAMENTO
//PROCESSAMENTO
float
floattotal;
qtdeLitros = distancia / consumo;
total
float =total
calcula(distancia,
= qtdeLitros * preco,
preco; consumo);
//SAÍDA
printf("Valor combustivel: %.2f\n",total);
}
32
[Código no Repl.it]
Modelo EPS na perspectiva FUNÇÃO
Saída
return total;
} main calcula
dist preco
P
int main(){ distancia preco 90 3.2
I
90 3.2 @50 @54
int distancia; consumo qtde
L
#10 #14
float preco, consumo;
H consumo total 8.5 10.6
//ENTRADA
A 8.5 33.9 @58 @70
distancia = 90; total
preco = 3.2; #18 #22
consumo = 8.5; 33.9
@74
1 //PROCESSAMENTO
//PROCESSAMENTO
float
floattotal;
qtdeLitros = distancia / consumo;
total
float =total
calcula(distancia,
= qtdeLitros * preco,
preco; consumo);
//SAÍDA
printf("Valor combustivel: %.2f\n",total);
}
33
[Código no Repl.it]
Modelo EPS na perspectiva FUNÇÃO
Saída
SAÍDA
Gasto com combustível em uma viagem
Devolvendo valor por meio de um endereço
float* saida)
void calcula(int dist, float preco,float consumo,
{ de memória (REFERÊNCIA) recebido por
float qtde = dist / consumo;
float total = qtde * preco; parâmetro
}
*saida = total; main calcula
dist preco
P
int main(){ distancia preco 90 3.2
I
90 3.2 @50 @54
int distancia; consumo qtde
L
#10 #14
float preco, consumo;
H consumo total 8.5
//ENTRADA
A 8.5 @58 @70
distancia = 90; saida total
preco = 3.2; #18 #22
consumo = 8.5; #22
@62 @74
2 //PROCESSAMENTO
//PROCESSAMENTO
float
floattotal;
qtdeLitros = distancia / consumo;
calcula(distancia, preco, *consumo,
float total = qtdeLitros preco; &total);
}
*saida = total; main calcula
dist preco
P
int main(){ distancia preco 90 3.2
I
90 3.2 @50 @54
int distancia; consumo qtde
L
#10 #14
float preco, consumo;
H consumo total 8.5 10.6
//ENTRADA
A 8.5 33.9 @58 @70
distancia = 90; saida total
preco = 3.2; #18 #22
consumo = 8.5; #22 33.9
@62 @74
2 //PROCESSAMENTO
//PROCESSAMENTO
float
floattotal;
qtdeLitros = distancia / consumo;
calcula(distancia, preco, *consumo,
float total = qtdeLitros preco; &total);
SAÍDA SAÍDA
Devolvendo valor por meio Devolvendo valor por meio
da instrução RETURN de um endereço de memória (REFERÊNCIA)
recebido por parâmetro
P P
distancia preco 90 3.2 distancia preco 90 3.2
I I
90 3.2 @50 @54 90 3.2 @50 @54
consumo qtde consumo qtde
L L
#10 #14 #10 #14
H H
consumo total 8.5 10.6 consumo total 8.5 10.6
A A
8.5 33.9 @58 @70 8.5 33.9 @58 @70
total saida total
#18 #22 #18 #22
33.9 #22 33.9
@74 @62 @74
Estratégia do SCANF
36
Modelo EPS na perspectiva FUNÇÃO
Síntese
float* saida
a função é do tipo void
37
Etapas no desenvolvimento de uma função
38
Etapas no desenvolvimento da função
1. Determinar qual é a saída esperada
2. Identificar qual é a entrada necessária/disponível
3. Escrever o protótipo da função
4. Usar a função criando casos de teste
5. Implementar a função transformando a entrada na saída esperada
6. Testar
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
39
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
40
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
41
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor de inteiros
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
42
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor de inteiros
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
43
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor de inteiros
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
44
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
45
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
int main(){
int vet[5] = {10,20,30,40,50};
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
int main(){
int vet[5] = {10,20,30,40,50};
47
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
int i;
for(i=0; i<
}
48
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
int i;
for(i=0; i< OPS… eu também preciso do tamanho do vetor
}
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
50
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor de inteiros
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
51
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
int main(){
int vet[5] = {10,20,30,40,50};
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
int main(){
int vet[5] = {10,20,30,40,50};
53
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
int i;
for(i=0; i< OPS… eu também preciso do tamanho do vetor
}
54
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste
int i;
for(i=0; i<tam; i++){
if(v[i] == elemento) return i;
}
return -1;
} 55
Exemplo Escreva uma função para encontrar um determinado
elemento em um vetor
1. 2. 3. 4.
5.
Determinar Determinar Escrever o Usar a função 6.
Implementar a
qual é a saída qual é a protótipo da criando casos Testar
função
esperada entrada função de teste