SlideShare uma empresa Scribd logo
1 de 29
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

Mais procurados

Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01thomasdacosta
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STLMarcos Castro
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03thomasdacosta
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04thomasdacosta
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Alamo Saravali
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Karoline Tavares
 
Introdução à linguagem c
Introdução à linguagem cIntrodução à linguagem c
Introdução à linguagem cRafael_Lima87
 
Curso lógica de programação
Curso   lógica de programaçãoCurso   lógica de programação
Curso lógica de programaçãoPaulo Batista
 
Programação Estruturada 2 - Aula 01 - Código Fonte
Programação Estruturada 2 - Aula 01 - Código FonteProgramação Estruturada 2 - Aula 01 - Código Fonte
Programação Estruturada 2 - Aula 01 - Código Fontethomasdacosta
 
11 tipos abstratos de dados
11   tipos abstratos de dados11   tipos abstratos de dados
11 tipos abstratos de dadosRicardo Bolanho
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHASAparicio Junior
 

Mais procurados (20)

Função malloc
Função mallocFunção malloc
Função malloc
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Objective c
Objective   cObjective   c
Objective c
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
 
Lista 1 6 java
Lista 1 6 javaLista 1 6 java
Lista 1 6 java
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Aula14
Aula14Aula14
Aula14
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
Introdução à linguagem c
Introdução à linguagem cIntrodução à linguagem c
Introdução à linguagem c
 
Curso lógica de programação
Curso   lógica de programaçãoCurso   lógica de programação
Curso lógica de programação
 
Programação Estruturada 2 - Aula 01 - Código Fonte
Programação Estruturada 2 - Aula 01 - Código FonteProgramação Estruturada 2 - Aula 01 - Código Fonte
Programação Estruturada 2 - Aula 01 - Código Fonte
 
11 tipos abstratos de dados
11   tipos abstratos de dados11   tipos abstratos de dados
11 tipos abstratos de dados
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHAS
 
Linguagem C 06 Funcoes
Linguagem C 06 FuncoesLinguagem C 06 Funcoes
Linguagem C 06 Funcoes
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 

Destaque

Destaque (8)

Aminas e amidas
Aminas e amidasAminas e amidas
Aminas e amidas
 
Funções nitrogenadas
Funções nitrogenadasFunções nitrogenadas
Funções nitrogenadas
 
Trabalho de química, amidas
Trabalho de química, amidasTrabalho de química, amidas
Trabalho de química, amidas
 
Aminas amidas
Aminas amidasAminas amidas
Aminas amidas
 
Amidas
AmidasAmidas
Amidas
 
Aminas
AminasAminas
Aminas
 
Funções nitrogenadas
Funções nitrogenadasFunções nitrogenadas
Funções nitrogenadas
 
Aminas
AminasAminas
Aminas
 

Semelhante a Aula 12 funcoes - Programação 1

Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
Aula 9 repeticao - Programação 1
Aula 9 repeticao - Programação 1Aula 9 repeticao - Programação 1
Aula 9 repeticao - Programação 1Isaac Barros
 
Aula 5 - Programação 1
Aula 5 - Programação 1Aula 5 - Programação 1
Aula 5 - Programação 1Isaac Barros
 
Aula 6 - Programação 1
Aula 6 - Programação 1Aula 6 - Programação 1
Aula 6 - Programação 1Isaac Barros
 
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoLidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoRafael Ponte
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CJoberthSilva
 
Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)Márcio Rizzatto
 
Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02thomasdacosta
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
Estrutura de linguagem C++
Estrutura de linguagem C++Estrutura de linguagem C++
Estrutura de linguagem C++Verônica Veiga
 
Aula01
Aula01Aula01
Aula01vdlos
 
Codificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadosCodificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadoshenriqueprossi
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Introdução a linguagem de programação C
Introdução a linguagem de programação CIntrodução a linguagem de programação C
Introdução a linguagem de programação CSchoolByte
 

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

Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Aula 9 repeticao - Programação 1
Aula 9 repeticao - Programação 1Aula 9 repeticao - Programação 1
Aula 9 repeticao - Programação 1
 
Aula 5 - Programação 1
Aula 5 - Programação 1Aula 5 - Programação 1
Aula 5 - Programação 1
 
Aula 6 - Programação 1
Aula 6 - Programação 1Aula 6 - Programação 1
Aula 6 - Programação 1
 
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoLidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
 
Minicurso Java && Cl
Minicurso Java && ClMinicurso Java && Cl
Minicurso Java && Cl
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação C
 
Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)
 
Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Estrutura de linguagem C++
Estrutura de linguagem C++Estrutura de linguagem C++
Estrutura de linguagem C++
 
Aula01
Aula01Aula01
Aula01
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Codificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadosCodificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcados
 
Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Introdução a linguagem de programação C
Introdução a linguagem de programação CIntrodução a linguagem de programação C
Introdução a linguagem de programação C
 

Mais de Isaac Barros

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

Mais de Isaac Barros (9)

Aula 15 recursao-organizacao-arquivos - Programação 1
Aula 15 recursao-organizacao-arquivos - Programação 1Aula 15 recursao-organizacao-arquivos - Programação 1
Aula 15 recursao-organizacao-arquivos - Programação 1
 
Aula 11 strings - Programação 1
Aula 11 strings - Programação 1Aula 11 strings - Programação 1
Aula 11 strings - Programação 1
 
Aula 10 arrays - Programação 1
Aula 10 arrays - Programação 1Aula 10 arrays - Programação 1
Aula 10 arrays - Programação 1
 
Aula 8 principios_programacao - Programação 1
Aula 8 principios_programacao - Programação 1Aula 8 principios_programacao - Programação 1
Aula 8 principios_programacao - Programação 1
 
Aula 4 - Programação 1
Aula 4 - Programação 1Aula 4 - Programação 1
Aula 4 - Programação 1
 
Aula 3 - Programação 1
Aula 3 - Programação 1Aula 3 - Programação 1
Aula 3 - Programação 1
 
Aula 2 - Programação 1
Aula 2 - Programação 1Aula 2 - Programação 1
Aula 2 - Programação 1
 
Aula 1 - Programação 1
Aula 1 - Programação 1Aula 1 - Programação 1
Aula 1 - Programação 1
 
Aula 16 arquivos - Programação 1
Aula 16 arquivos - Programação 1Aula 16 arquivos - 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