Programação I:
Funções
Rodrigo Paes
Instituto de Computação – UFAL
O que é isso?
rodrigo@ic.ufal.br
Instituto de Computação – UFAL
E agora?
rodrigo@ic.ufal.br
Instituto de Computação – UFAL
Abstração
 Omissão de detalhes,
mas sem que se perca
a compreensão da
essência do artefato...
Instituto de Computação – UFAL
E se formos construir um software grande
complexo?
 Exemplo
 CISCEA
 Controle de Tráfego...
Instituto de Computação – UFAL
Exemplo de código duplicado
 …
for (v=3;v<distancia*1.4 ; v += 0.1){
// código para encont...
Instituto de Computação – UFAL
Ok, e se pudermos dividir o nosso código em
pequenas partes
 Cada parte cuida de uma funci...
Instituto de Computação – UFAL
Tarefa: Software de Alerta e Monitoramento de
um avião
rodrigo@ic.ufal.br
Monitorar
avião
M...
Instituto de Computação – UFAL
Em C, podemos usar funções
 Funções
 Encapsulam as funcionalidades que o seu programa
rea...
Instituto de Computação – UFAL
Funções que já usamos
 printf
 scanf
 getchar
 toupper
rodrigo@ic.ufal.br
Instituto de Computação – UFAL
Funções
 Sintaxe *
 <Tipo de Dado> <Identificador da funcao>(<Lista de
parametros>){
Decl...
Instituto de Computação – UFAL
Funções
 Exemplo: função para somar dois números
 float somar(float numero1, float numero...
Instituto de Computação – UFAL
Vamos fazer umas casas?
 Que caracteres são
esses?
rodrigo@ic.ufal.br
Instituto de Computação – UFAL
Ascii
 Algum deles?
rodrigo@ic.ufal.br
Instituto de Computação – UFAL
Vamos tentar
 Comece pequeno, concreto e de forma
incremental
int main()
{
printf("%c", );...
Instituto de Computação – UFAL
Primeira linha …
int main()
{
printf("%c%c%c%cn",219,219,219,219);
}
rodrigo@ic.ufal.br
Instituto de Computação – UFAL
Abstraia um pouco
#define Q 219
int main()
{
printf("%c%c%c%cn",Q,Q,Q,Q);
}
Experimente com...
Instituto de Computação – UFAL
Minha versão da casa
#define Q 219
int main()
{
// casa
printf("%c%c%c%cn",Q,Q,Q,Q);
printf...
Instituto de Computação – UFAL
E para fazer mais uma casa?
#define Q 219
int main()
{
// casa
printf("%c%c%c%cn",Q,Q,Q,Q);...
Instituto de Computação – UFAL
Dá pra abstrair?
 Vamos olhar a nossa casa de novo
 Observações
 largura fixa de tamanho...
Instituto de Computação – UFAL
Que tal uma função casa?
void casa(int altura_casa)
 Para desenhar, faríamos:
 casa(6)
 ...
Instituto de Computação – UFAL
Desafio: faça a função casa
 Implemente a função
 “void casa(int altura_casa)”
 de forma...
Instituto de Computação – UFAL
Uma possível solução
void casa(int altura_casa)
{
int largura, altura, altura_maxima;
for (...
Instituto de Computação – UFAL
Protótipo
 O protótipo diz qual é a interface da função
 Qual o identificador
 Quais as ...
Instituto de Computação – UFAL
Protótipo
 Exemplo:
main()
{
float a, b, resultado;
scanf("%f %f", &a, &b);
resultado = so...
Instituto de Computação – UFAL
Protótipo - Corrigido
main()
{
float a, b, resultado;
/* Protótipo da função a ser definida...
Instituto de Computação – UFAL
Ou ainda …
float somar(float numero1, float numero2)
{
return numero1 + numero2;
}
main()
{...
Instituto de Computação – UFAL
Exercícios
 Produto dos Primos
 Calcule o produto de 04 números inteiros somente se
todos...
Instituto de Computação – UFAL
Testando o entedimento
 Pra que serve uma função?
 Quais as vantagens?
rodrigo@ic.ufal.br
Próximos SlideShares
Carregando em…5
×

Aula 12 funcoes - Programação 1

208 visualizações

Publicada em

Aulas da Disciplina de Programação I do Professor Rodrigo Paes, UFAL

  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Aula 12 funcoes - Programação 1

  1. 1. Programação I: Funções Rodrigo Paes
  2. 2. Instituto de Computação – UFAL O que é isso? rodrigo@ic.ufal.br
  3. 3. Instituto de Computação – UFAL E agora? rodrigo@ic.ufal.br
  4. 4. Instituto de Computação – UFAL Abstração  Omissão de detalhes, mas sem que se perca a compreensão da essência do artefato  Entretanto, a falta de suficientes detalhes para impedir a compreeensão da sua essência  O excesso de detalhes torna mais onerosa a operação com o artefato rodrigo@ic.ufal.br
  5. 5. Instituto de Computação – UFAL E se formos construir um software grande complexo?  Exemplo  CISCEA  Controle de Tráfego Aéreo  Banco Central  Sistema de Negociação de Títulos Públicos  Já imaginou a quantidade de operações que temos que nos preocupar?  Leitura de dados  Regras do negócio  Se o banco A emprestar dinheiro para o banco B, tem que devolver em 10 dias  Os aviões não podem voar na mesma altura em sentidos opostos na mesma aerovia  Cálculos que se repetem  Nosso código iria ter uma séria de códigos repetidos rodrigo@ic.ufal.br
  6. 6. Instituto de Computação – UFAL Exemplo de código duplicado  … for (v=3;v<distancia*1.4 ; v += 0.1){ // código para encontrar a velocidade do aviao } … // outras operações // precisamos saber a velocidade de novo for (v=3;v<distancia*1.4 ; v += 0.1){ // código para encontrar a velocidade do aviao } … rodrigo@ic.ufal.br
  7. 7. Instituto de Computação – UFAL Ok, e se pudermos dividir o nosso código em pequenas partes  Cada parte cuida de uma funcionalidade bem definida  Assim, poderíamos “chamar” essa parte toda vez que precisassemos dela  Legal, né? rodrigo@ic.ufal.br
  8. 8. Instituto de Computação – UFAL Tarefa: Software de Alerta e Monitoramento de um avião rodrigo@ic.ufal.br Monitorar avião Monitorar turbinas Monitorar turbina esquerda Monitorar turbina direita Monitorar parafuso Monitorar Piloto automático Monitorar Cabine Emitir alerta Abstração !! Reúso !!
  9. 9. Instituto de Computação – UFAL Em C, podemos usar funções  Funções  Encapsulam as funcionalidades que o seu programa realiza  Ou seja, podemos colocar nas funções as várias subtarefas do programa  As vezes essas subtarefas retornam resultados  main()  Esta é uma função padrão do C  É a função principal, a partir dela chamamos outras funções  Olha só ... já andamos chamando outras funções rodrigo@ic.ufal.br
  10. 10. Instituto de Computação – UFAL Funções que já usamos  printf  scanf  getchar  toupper rodrigo@ic.ufal.br
  11. 11. Instituto de Computação – UFAL Funções  Sintaxe *  <Tipo de Dado> <Identificador da funcao>(<Lista de parametros>){ Declaracao de variaveis Sequencia de instrucoes } rodrigo@ic.ufal.br
  12. 12. Instituto de Computação – UFAL Funções  Exemplo: função para somar dois números  float somar(float numero1, float numero2) { return numero1 + numero2; }  No função principal main podemos fazer:  main() { float a, b, resultado; scanf(“%f %f”, &a, &b); resultado = somar(a,b); printf(“O resultado é %fn”,resultado); }  O comando return retorna o valor da expressão como resultado da função rodrigo@ic.ufal.br
  13. 13. Instituto de Computação – UFAL Vamos fazer umas casas?  Que caracteres são esses? rodrigo@ic.ufal.br
  14. 14. Instituto de Computação – UFAL Ascii  Algum deles? rodrigo@ic.ufal.br
  15. 15. Instituto de Computação – UFAL Vamos tentar  Comece pequeno, concreto e de forma incremental int main() { printf("%c", ); } rodrigo@ic.ufal.br 219
  16. 16. Instituto de Computação – UFAL Primeira linha … int main() { printf("%c%c%c%cn",219,219,219,219); } rodrigo@ic.ufal.br
  17. 17. Instituto de Computação – UFAL Abstraia um pouco #define Q 219 int main() { printf("%c%c%c%cn",Q,Q,Q,Q); } Experimente com as demais linhas até achar a figura … rodrigo@ic.ufal.br
  18. 18. Instituto de Computação – UFAL Minha versão da casa #define Q 219 int main() { // casa printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%c%c%cn",Q,Q,Q,Q,Q,Q); printf("%c%c%c%c%c%cn",Q,Q,Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("n"); } rodrigo@ic.ufal.br
  19. 19. Instituto de Computação – UFAL E para fazer mais uma casa? #define Q 219 int main() { // casa printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%c%c%cn",Q,Q,Q,Q,Q,Q); printf("%c%c%c%c%c%cn",Q,Q,Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("n"); printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%c%c%cn",Q,Q,Q,Q,Q,Q); printf("%c%c%c%c%c%cn",Q,Q,Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("n"); } rodrigo@ic.ufal.br
  20. 20. Instituto de Computação – UFAL Dá pra abstrair?  Vamos olhar a nossa casa de novo  Observações  largura fixa de tamanho 6  altura nas linhas 3 e 4 correspondente a altura  altura nas outras linhas 2 unidades menor rodrigo@ic.ufal.br printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%c%c%cn",Q,Q,Q,Q,Q,Q); printf("%c%c%c%c%c%cn",Q,Q,Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("n"); largura largura altura altura-2
  21. 21. Instituto de Computação – UFAL Que tal uma função casa? void casa(int altura_casa)  Para desenhar, faríamos:  casa(6)  Mas como transformar …  …e produzir o mesmo resultado? rodrigo@ic.ufal.br printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%c%c%cn",Q,Q,Q,Q,Q,Q); printf("%c%c%c%c%c%cn",Q,Q,Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("%c%c%c%cn",Q,Q,Q,Q); printf("n"); casa(6)
  22. 22. Instituto de Computação – UFAL Desafio: faça a função casa  Implemente a função  “void casa(int altura_casa)”  de forma que ela produza o mesmo resultado  Perceba que a altura pode variar  As chamadas:  casa(3);  casa(6);  casa(20) rodrigo@ic.ufal.br Produzem
  23. 23. Instituto de Computação – UFAL Uma possível solução void casa(int altura_casa) { int largura, altura, altura_maxima; for (largura = 0; largura < 6 ; largura++) { if (largura == 2 || largura==3) { altura_maxima = altura_casa; } else { altura_maxima = altura_casa-2; } for (altura = 0 ; altura < altura_maxima; altura++ ) { printf("%c",Q); } printf("n"); } printf("n"); } rodrigo@ic.ufal.br
  24. 24. Instituto de Computação – UFAL Protótipo  O protótipo diz qual é a interface da função  Qual o identificador  Quais as entradas  Qual a saída  Exemplo  float somar(float numero1, float numero2)  Para usar uma função, o seu protótipo deve ter sido definido antes do uso rodrigo@ic.ufal.br
  25. 25. Instituto de Computação – UFAL Protótipo  Exemplo: main() { float a, b, resultado; scanf("%f %f", &a, &b); resultado = somar(a,b); printf("O resultado eh %.2fn",resultado); } float somar(float numero1, float numero2) { return numero1 + numero2; } rodrigo@ic.ufal.br
  26. 26. Instituto de Computação – UFAL Protótipo - Corrigido main() { float a, b, resultado; /* Protótipo da função a ser definida posteriormente */ float somar(float numero1, float numero2); scanf("%f %f", &a, &b); resultado = somar(a,b); printf("O resultado eh %.2fn",resultado); } float somar(float numero1, float numero2) { return numero1 + numero2; } rodrigo@ic.ufal.br
  27. 27. Instituto de Computação – UFAL Ou ainda … float somar(float numero1, float numero2) { return numero1 + numero2; } main() { float a, b, resultado; scanf("%f %f", &a, &b); resultado = somar(a,b); printf("O resultado eh %.2fn",resultado); getchar(); getchar(); } rodrigo@ic.ufal.br
  28. 28. Instituto de Computação – UFAL Exercícios  Produto dos Primos  Calcule o produto de 04 números inteiros somente se todos forem primos. Se isso não ocorrer, imprima: SEM PRODUTO rodrigo@ic.ufal.br
  29. 29. Instituto de Computação – UFAL Testando o entedimento  Pra que serve uma função?  Quais as vantagens? rodrigo@ic.ufal.br

×