SlideShare uma empresa Scribd logo
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
 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
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
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
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
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 !!
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
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>){
Declaracao de variaveis
Sequencia de instrucoes
}
rodrigo@ic.ufal.br
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
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", );
}
rodrigo@ic.ufal.br
219
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 as demais linhas até achar a
figura …
rodrigo@ic.ufal.br
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
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
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
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)
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
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
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
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
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
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
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
Instituto de Computação – UFAL
Testando o entedimento
 Pra que serve uma função?
 Quais as vantagens?
rodrigo@ic.ufal.br

Mais conteúdo relacionado

PPTX
Aula 14 estruturas - Programação 1
PPTX
Aula 7 decisao - Programação 1
PPTX
Aula 13 ponteiros - Programação 1
PPT
Estruturas
PPTX
Light Talk sobre JavaScript Funcional
ODP
Linguagem C 07 Registros
PPT
Aula5 introducao c
PPT
Aula5 introducao c
Aula 14 estruturas - Programação 1
Aula 7 decisao - Programação 1
Aula 13 ponteiros - Programação 1
Estruturas
Light Talk sobre JavaScript Funcional
Linguagem C 07 Registros
Aula5 introducao c
Aula5 introducao c

Mais procurados (20)

PDF
Ponteiros de Função
PPTX
Objective c
PDF
Pilha e filas
DOCX
Exercícios da Aula de LAB 01
PPTX
Maratona de Programação com STL
PDF
Lista 1 6 java
PPTX
Algoritmos e Estrutura de Dados - Aula 03
PPTX
Algoritmos e Estrutura de Dados - Aula 04
PDF
PPTX
PDF
Aprendendo objective c - parte 1
PDF
Linguagem C - Funções e ponteiros
PPTX
Introdução à linguagem c
PPTX
Curso lógica de programação
DOCX
Programação Estruturada 2 - Aula 01 - Código Fonte
PDF
11 tipos abstratos de dados
PDF
Estrutura de Dados - PILHAS
ODP
Linguagem C 06 Funcoes
PDF
Linguagem R
Ponteiros de Função
Objective c
Pilha e filas
Exercícios da Aula de LAB 01
Maratona de Programação com STL
Lista 1 6 java
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 04
Aprendendo objective c - parte 1
Linguagem C - Funções e ponteiros
Introdução à linguagem c
Curso lógica de programação
Programação Estruturada 2 - Aula 01 - Código Fonte
11 tipos abstratos de dados
Estrutura de Dados - PILHAS
Linguagem C 06 Funcoes
Linguagem R
Anúncio

Destaque (8)

PPTX
Aminas e amidas
PPTX
Funções nitrogenadas
PPT
Trabalho de química, amidas
PPT
Aminas amidas
PPTX
Amidas
PPTX
PPTX
Funções nitrogenadas
PPT
Aminas
Aminas e amidas
Funções nitrogenadas
Trabalho de química, amidas
Aminas amidas
Amidas
Funções nitrogenadas
Aminas
Anúncio

Semelhante a Aula 12 funcoes - Programação 1 (20)

PPT
Introdução a Linguagem C
PPTX
Aula 9 repeticao - Programação 1
PPTX
Aula 5 - Programação 1
PPTX
Aula 6 - Programação 1
PDF
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
PDF
Minicurso Java && Cl
PPT
Curso Completo de Linguagem de Programação C
PPTX
Programação - linguagem C - uso de funções
PPT
Estruturas em C++ (struct)
PPTX
Programação Estruturada 2 - Aula 02
PDF
TDC2016POA | Trilha Android - Testes no Android
PDF
TDC2016POA | Trilha Android - Testes no Android
PPT
Linguagem C clecioamerico
PDF
Estrutura de linguagem C++
PPTX
Aula01
PPT
DDD > Experiências
PDF
Codificação segura em C para sistemas embarcados
PPT
Tdc2010 web
PPT
Domain Driven Design (DDD) - DevIsland, BH
PDF
JavaScript - A Linguagem
Introdução a Linguagem C
Aula 9 repeticao - Programação 1
Aula 5 - Programação 1
Aula 6 - Programação 1
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Minicurso Java && Cl
Curso Completo de Linguagem de Programação C
Programação - linguagem C - uso de funções
Estruturas em C++ (struct)
Programação Estruturada 2 - Aula 02
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
Linguagem C clecioamerico
Estrutura de linguagem C++
Aula01
DDD > Experiências
Codificação segura em C para sistemas embarcados
Tdc2010 web
Domain Driven Design (DDD) - DevIsland, BH
JavaScript - A Linguagem

Mais de Isaac Barros (9)

PPTX
Aula 15 recursao-organizacao-arquivos - Programação 1
PPTX
Aula 11 strings - Programação 1
PPTX
Aula 10 arrays - Programação 1
PPTX
Aula 8 principios_programacao - Programação 1
PPTX
Aula 4 - Programação 1
PPTX
Aula 3 - Programação 1
PPTX
Aula 2 - Programação 1
PPTX
Aula 1 - Programação 1
PPTX
Aula 16 arquivos - Programação 1
Aula 15 recursao-organizacao-arquivos - Programação 1
Aula 11 strings - Programação 1
Aula 10 arrays - Programação 1
Aula 8 principios_programacao - Programação 1
Aula 4 - Programação 1
Aula 3 - Programação 1
Aula 2 - Programação 1
Aula 1 - Programação 1
Aula 16 arquivos - Programação 1

Aula 12 funcoes - Programação 1

  • 2. Instituto de Computação – UFAL O que é isso? rodrigo@ic.ufal.br
  • 3. Instituto de Computação – UFAL E agora? rodrigo@ic.ufal.br
  • 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. 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. 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. 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. 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. 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. Instituto de Computação – UFAL Funções que já usamos  printf  scanf  getchar  toupper rodrigo@ic.ufal.br
  • 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. 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. Instituto de Computação – UFAL Vamos fazer umas casas?  Que caracteres são esses? rodrigo@ic.ufal.br
  • 14. Instituto de Computação – UFAL Ascii  Algum deles? rodrigo@ic.ufal.br
  • 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. Instituto de Computação – UFAL Primeira linha … int main() { printf("%c%c%c%cn",219,219,219,219); } rodrigo@ic.ufal.br
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Instituto de Computação – UFAL Testando o entedimento  Pra que serve uma função?  Quais as vantagens? rodrigo@ic.ufal.br