40
Funções criadas pelo Funções criadas pelo programador programador Prof. André Renato

Funções criadas pelo programador Prof. André Renato

Embed Size (px)

Citation preview

Page 1: Funções criadas pelo programador Prof. André Renato

Funções criadas pelo Funções criadas pelo programadorprogramadorProf. André Renato

Page 2: Funções criadas pelo programador Prof. André Renato

AnalogiaAnalogiaImagine que você resolva morar

sozinho;No seu novo cotidiano, algumas

tarefas precisarão ser executadas:◦Lavar a roupa;◦Passá-las;◦Fazer comida;◦Limpar a casa;◦Pagar as contas;◦ufa!!!!

Page 3: Funções criadas pelo programador Prof. André Renato

AnalogiaAnalogiaÉ fácil perceber que nesse estilo

de vida, muitas coisas vão gastar seu tempo e sua energia;

O que pode ser feito para que você não precise se ocupar de tantas tarefa?

Page 4: Funções criadas pelo programador Prof. André Renato

Solução 1Solução 1Escolher uma tarefa complexa, que

consuma bastante seu tempo (cozinhar, por exemplo);

Contratar alguém para realizar esta tarefa;

Toda vez que você precisar de comida, basta mandá-la fazer o que você quiser;

Seu tempo, agora, pode ser direcionado para outras atividades que você queira realizar, além das outras tarefas restantes;

Page 5: Funções criadas pelo programador Prof. André Renato

Solução 1Solução 1É importante deixar claro que a

cozinheira só é capaz de fazer a comida ficar pronta;

Outras tarefas como conseguir os ingredientes ainda estão por sua conta!!!

Ainda assim, esta solução vai começar a facilitar um pouco a sua vida.

Page 6: Funções criadas pelo programador Prof. André Renato

Em programação...Em programação...Obviamente não vamos fazer um

programa que cozinhe (por enquanto);

No entanto, geralmente enfrentamos problemas semelhantes:◦Nossos programas precisam fazer muitas

coisas diferentes;◦Tentar fazer tudo de uma vez só

complica mais do que ajuda;◦O que fazer então?

Page 7: Funções criadas pelo programador Prof. André Renato

Solução 1 (de novo)Solução 1 (de novo)Escolher uma tarefa complicada;Arrumar alguém (que não seja o

colega) para realizá-la;Toda vez que precisarmos executar

esta tarefa, chamamos um módulo do programa capaz de realizá-la;

Nossa preocupação, agora, fica somente com as outras etapas do programa;

Page 8: Funções criadas pelo programador Prof. André Renato

ExemploExemploNosso programa precisa calcular a

média dos vários alunos de uma turma;O cálculo da média, embora não seja

muito complicado, é uma pequena etapa do nosso programa que pode não ter nada a ver com o restante do código (leitura das notas, impressão de mensagens para o usuário, indicação de alunos aprovados/reprovados etc);

Page 9: Funções criadas pelo programador Prof. André Renato

ExemploExemploO programador lida com este tipo

de problema dividindo seu algoritmo diversas partes, geralmente pequenas, chamadas módulos;

Este processo se chama modularização do código-fonte;

Em C/C++, os pequenos módulos são normalmente chamados de funções;

Page 10: Funções criadas pelo programador Prof. André Renato

Exemplo sem funçãoExemplo sem função#include <stdio.h>float nota1, nota2, nota3, media;

int main(){

printf(“Digite as duas primeiras notas do aluno:”);scanf(“%f %f”,&nota1,&nota2);media = (nota1*4 + nota2*6)/10;if (media < 5.0){

printf(“Digite as nota da prova substitutiva:”);scanf(“%f”,&nota3);if (nota3>nota2){

media = (nota1*4 + nota3*6)/10;}

}printf(“A média final foi: %f”,media);return 0;

}

Page 11: Funções criadas pelo programador Prof. André Renato

Exemplo com funçãoExemplo com função#include <stdio.h>float nota1, nota2, nota3, media;

float CalculaMedia(float notaA, float notaB ){return (notaA*4 + notaB*6)/10;

}

int main(){

printf(“Digite as duas primeiras notas do aluno:”);scanf(“%f %f”,&nota1,&nota2);media = CalculaMedia(nota1,nota2);if (media < 5.0){

printf(“Digite as nota da prova substitutiva:”);scanf(“%f”,&nota3);if (nota3>nota2){

media = CalculaMedia(nota1,nota3);}

}printf(“A média final foi: %f”,media);return 0;

}

Page 12: Funções criadas pelo programador Prof. André Renato

Exemplo com função Exemplo com função (protótipo)(protótipo)#include <stdio.h>float nota1, nota2, nota3, media;

float CalculaMedia(float notaA, float notaB );

int main(){

printf(“Digite as duas primeiras notas do aluno:”);scanf(“%f %f”,&nota1,&nota2);media = CalculaMedia(nota1,nota2);if (media < 5.0){

printf(“Digite as nota da prova substitutiva:”);scanf(“%f”,&nota3);if (nota3>nota2){

media = CalculaMedia(nota1,nota3);}

}printf(“A média final foi: %f”,media);return 0;

}

float CalculaMedia(float notaA, float notaB ){return (notaA*4 + notaB*6)/10;

}

Page 13: Funções criadas pelo programador Prof. André Renato

Vantagens da Vantagens da modularizaçãomodularização Facilita a detecção de erros, pois é, em princípio,

simples verificar qual é o módulo responsável pelo erro. É mais fácil testar os módulos individualmente do que o

programa completo. É mais fácil fazer a manutenção (correção de erros,

melhoramentos etc.) módulo por módulo do que no programa total.  Além disso, a modularização aumenta a probabilidade dessa manutenção não ter consequências ruins nos outros módulos do programa.

Permite o desenvolvimento independente dos módulos.  Isto simplifica o trabalho em equipe, pois cada elemento, ou cada sub-equipe, tem a seu cargo apenas alguns módulos do programa.

Porventura a mais evidente vantagem da modularização em programas de pequena escala, mas também nos de grande escala, é a possibilidade de reutilização do código desenvolvido.

Outras

Page 14: Funções criadas pelo programador Prof. André Renato

Elementos de uma funçãoElementos de uma funçãofloat CalculaMedia(float notaA,float

notaB){return (notaA*4 + notaB*6)/10;

}

Tipo de valor de retorno: floatNome da função: CalculaMediaLista de parâmetros: float notaA, float

notaBCódigo da função: return (notaA*4 +

notaB*6)/10;

Page 15: Funções criadas pelo programador Prof. André Renato

Tipo de valor de retornoTipo de valor de retornoPode ser praticamente qualquer tipo

de dado da linguagem C;Vetores e matrizes têm uma forma

de declaração especial que será visto mais adiante;

Existe também o tipo de dado “void”;

Este dado não representa valor algum e é utilizado quando não existe um resultado direto dos comandos existentes na função;

Page 16: Funções criadas pelo programador Prof. André Renato

Nome da funçãoNome da funçãoPode ser dado qualquer nome à

função, desde que siga as regras dos nomes para identificadores de cada linguagem:◦Não pode começar por número;◦Não pode ter nome repetido de

funções e/ou variáveis;◦Não pode ter símbolos especiais;◦Letras maiúsculas/minúsculas;

Page 17: Funções criadas pelo programador Prof. André Renato

Lista de parâmetrosLista de parâmetrosSão todos os dados necessários

para que a função possa executar seu papel corretamente;

Normalmente, esta lista é composta por um ou mais parâmetros, mas também é possível que esta lista esteja vazia;

Cada parâmetro da lista deve estar separado por vírgula, ter o tipo de dado representado e o nome do parâmetro (parâmetro formal);

Page 18: Funções criadas pelo programador Prof. André Renato

Voltando à cozinha...Voltando à cozinha...Os parâmetros podem ser

comparados aos ingredientes que devem ser dados à cozinheira para que a comida possa ser feito;

A parte que chama a função deve entregar a ela os parâmetros corretos na ordem correta definida pela função;

Page 19: Funções criadas pelo programador Prof. André Renato

Voltando à cozinha...Voltando à cozinha...Exemplo:

Pão FazPão(Farinha f, Sal s,Óleo o, Fermento fe){Coloque f,o em uma vasilha;Misture um pouco;Adicione fe;Espere 5 minutos;Acrescente s;Espere 40 minutos;Leve ao forno;Retorne Pão;

}

Page 20: Funções criadas pelo programador Prof. André Renato

Voltando à cozinha...Voltando à cozinha...O que aconteceria se eu entregar

açúcar ao invés de fermento?E se eu trocar a farinha com o sal?É importante lembrar que a nossa

cozinheira só é capaz de misturar os ingredientes e devolver o alimento pronto;

A parte da aquisição e da entrega de alimentos ainda é conosco;

Page 21: Funções criadas pelo programador Prof. André Renato

Um pouco mais sobre Um pouco mais sobre parâmetrosparâmetrosO nome que é dado ao parâmetro

pela função nada mais é do que um apelido para o valor que está sendo entregue;

A parte que chama a função deve indicar corretamente o valor que será utilizado;

A partir de então, este valor é copiado para a função que passará a chamá-lo pelo nome que ela definiu;

Page 22: Funções criadas pelo programador Prof. André Renato

Um pouco mais sobre Um pouco mais sobre parâmetrosparâmetrosfloat nota1, nota2, nota3, media;

float CalculaMedia(float notaA, float notaB ){return (notaA*4 + notaB*6)/10;

}

int main(){

printf(“Digite as duas primeiras notas do aluno:”);scanf(“%f %f”,&nota1,&nota2);media = CalculaMedia(nota1,nota2);if (media < 5.0){

printf(“Digite as nota da prova substitutiva:”);scanf(“%f”,&nota3);if (nota3>nota2){

media = CalculaMedia(nota1,nota3);}

}printf(“A média final foi: %f”,media);return 0;

}

Apelidos

Valores reais

Page 23: Funções criadas pelo programador Prof. André Renato

Código da funçãoCódigo da funçãoÉ, sem dúvida, a parte principal

da função;Define o que e como será feito;Tem a aparência de um código

comum, como aqueles que escrevemos em qualquer outra parte do programa;

Page 24: Funções criadas pelo programador Prof. André Renato

Variáveis locaisVariáveis locaisSão variáveis declaradas e

utilizadas dentro de uma função;Servem para auxiliar na execução

do código da função;Têm seu escopo (validade) restritos

à função, ou seja, quando a função terminar elas “desaparecem”;

Não podem ser acessadas fora da função;

Page 25: Funções criadas pelo programador Prof. André Renato

Variáveis locaisVariáveis locaisint MaiorDe3(int n1, int n2, int n3){

int maior;if (n1 > n2){

maior = n1;}else{

maior = n2;}if (n3>maior){

maior = n3;}return maior;

}

Page 26: Funções criadas pelo programador Prof. André Renato

Variáveis globaisVariáveis globaisSão variáveis declaradas antes de

qualquer função;São, portanto, acessáveis de

qualquer ponto do programa e deixam de existir quando o próprio programa encerra;

Devem ser utilizadas com cuidado, pois o seu excesso dificulta a compreensão e a correção do código;

Page 27: Funções criadas pelo programador Prof. André Renato

A função em execução A função em execução Devemos tem em mente que

uma função é uma parte auxiliar do bloco principal do programa;

Ela pode ser acionada diversas vezes, mas quem é executado primeiro é o bloco principal;

Vejamos como isso acontece:

Page 28: Funções criadas pelo programador Prof. André Renato

A função em execução A função em execução

Bloco principal (segunda

parte)

Bloco principal (primeira

parte)

Bloco principal (terceira parte)

Função (primeira chamada)

Função (segunda chamada)

Page 29: Funções criadas pelo programador Prof. André Renato

A função em execução A função em execução #include <stdio.h>float nota1, nota2, nota3, media;

float CalculaMedia(float notaA, float notaB ){return (notaA*4 + notaB*6)/10;

}

int main(){

printf(“Digite as duas primeiras notas do aluno:”);scanf(“%f %f”,&nota1,&nota2);media = CalculaMedia(nota1,nota2);if (media < 5.0){

printf(“Digite as nota da prova substitutiva:”);scanf(“%f”,&nota3);if (nota3>nota2){

media = CalculaMedia(nota1,nota3);}

}printf(“A média final foi: %f”,media);return 0;

}

Valor copiado

Valor devolvido

Valor devolvido

Page 30: Funções criadas pelo programador Prof. André Renato

Tipo de retorno “void”Tipo de retorno “void”“Void” é um tipo especial de dado

que não pode ser processado de forma alguma;

Não é possível somar, dividir, comparar escrever, ler ou fazer qualquer outra coisa diretamente com um valor “void”...

Logo vem a pergunta: “Pra que serve um troço que não serve pra nada???”

Page 31: Funções criadas pelo programador Prof. André Renato

Tipo de retorno “void”Tipo de retorno “void”Uma utilização do “void” se dá

exatamente no âmbito das funções;

Existem determinados tipos de processamento que não resultam diretamente em um valor específico, mas que são importantes na modularização de um programa;

Page 32: Funções criadas pelo programador Prof. André Renato

Tipo de retorno “void”Tipo de retorno “void”Exemplos:

◦Ler dados do usuário (nome, endereço, telefone, idade, CPF etc);

◦Escrever resultados na tela;◦Zerar um vetor ou uma matriz;◦Manipular arquivos;

Nem sempre essas operações resultam em um valor, mas pode ser importantes no nosso programa;

Page 33: Funções criadas pelo programador Prof. André Renato

Tipo de retorno “void”Tipo de retorno “void”Ao declarar que uma função retorna

“void” estamos dizendo que não será gerado nenhum valor correspondente à execução da função, mas que ele será realizada normalmente;

A parte que chamou a função não poderá, portanto, atribuir uma função que retorna “void” a uma variável ou fazer qualquer outra coisa que não seja simplesmente chamar a função;

Page 34: Funções criadas pelo programador Prof. André Renato

Tipo de retorno “void”Tipo de retorno “void”Exemplo:void EscreveBoletim(float notaA, float notaB){

float media;media = (notaA*4 + notaB*6)/10;printf(“Suas notas foram: %f e %f.”, notaA,notaB);printf(“Sua média final foi: %f.”, media);if (media >= 5.0){

printf(“Você foi aprovado!”);}else{

printf(“Você foi reprovado!”);}

}

Page 35: Funções criadas pelo programador Prof. André Renato

Tipo de retorno “void”Tipo de retorno “void”A parte que chamar a função não

poderá fazer:...aux = EscreveBoletim(n1,n2);...A função EscreveBoletim deverá ser

executada desta forma:...EscreveBoletim(n1,n2);...

Page 36: Funções criadas pelo programador Prof. André Renato

Coesão e acoplamentoCoesão e acoplamentoSão dois conceitos muito

importantes no planejamento de um programa e na sua correta modularização;

A coesão diz respeito ao conjunto de comandos que são executados dentro de uma função;

Já o acoplamento se refere ao conjunto de parâmetros passados para a função;

Page 37: Funções criadas pelo programador Prof. André Renato

Espera-se uma alta Espera-se uma alta coesãocoesãoQuando uma função é definida,

espera-se que ela execute sua tarefa da forma mais eficiente possível;

Por eficiente, entende-se o código capaz de realizar a tarefa com a menor quantidade de comandos e de forma correta;

Page 38: Funções criadas pelo programador Prof. André Renato

Espera-se uma alta Espera-se uma alta coesãocoesãoUma função criada para calcular a

média de um aluno precisa do seguinte trecho?

printf(“Digite sua idade:”);scanf(“%d”,&idade);

Ou então?

printf(“Você passou?”);scanf(“%d”,&opcao);

Page 39: Funções criadas pelo programador Prof. André Renato

Espera-se um baixo Espera-se um baixo acoplamentoacoplamentoPara que uma função possa

funcionar bem, é necessário um conjunto mínimo de parâmetros;

Os parâmetros devem ser definidos de forma que sejam em menor quantidade possível, evitando parâmetros que não servem para nada, ou que podem ser calculados a partir dos outros;

Page 40: Funções criadas pelo programador Prof. André Renato

Espera-se um baixo Espera-se um baixo acoplamentoacoplamento

void EscreveMedia(float notaA,float notaB,float media){media = (notaA*4 + notaB*6)/10;printf(“Sua média foi: %f”,media);

}

void EscreveMedia(float notaA, float notaB, int idade){float media;media = (notaA*4 + notaB*6)/10;printf(“Sua média foi: %f”,media);

}