procedimentos e funções. motivação procedimentos e funções promovem o reuso de código...

56
Procedimentos e Funções

Upload: internet

Post on 16-Apr-2015

115 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Procedimentos e Funções

Page 2: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Motivação

Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação

Facilitam a manutenção, legibilidade extensão dos programas

Page 3: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Motivação Exemplo 1Algoritmo testeSemFunção ()início

inteiro base=0ler baseinteiro fat=1inteiro cont=1para (cont<base;cont=cont+1) faça

fat = fat*contfimparabase=fat

Page 4: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

inteiro expoente =0ler expoentefat=1cont=1para (cont<expoente;cont=cont+1) faça

fat = fat*contfimparaexpoente=fat

Motivação Exemplo 1

Page 5: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

inteiro divisor =0ler divisorfat=1cont=1para (cont<divisor;cont=cont+1) faça

fat = fat*contfimparadivisor=fat

Motivação Exemplo 1

Page 6: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

inteiro x =0ler xfat=1cont=1para (cont<x;cont=cont+1) faça

fat = fat*contfimparax=fat

Motivação Exemplo 1

Page 7: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

imprimir "fatorial base:"+baseimprimir "fatorial expoente:"+expoenteimprimir "fatorial fatorial:"+fatorialimprimir "fatorial x:"+x

Fim

Motivação Exemplo 1

Page 8: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Motivação

Foi necessário replicar o código para calcular o fatorial quatro vezes dentro do código

Será preciso replicar este código sempre que quisermos calcular o fatorial de um número?

Há alguma maneira mais eficiente e elegante de se fazer isso?

Page 9: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Motivação

Uso de Procedimentos/Funções

Evitam replicação desnecessária de código promovendo assim o reuso

Page 10: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Motivação Exemplo 2Algoritmo testeComFunção ()início

inteiro base=0ler basebase = fatorial(base)

inteiro expoente =0ler expoenteexpoente = fatorial (expoente)

Page 11: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

inteiro fatorial =0ler fatorialfatorial = móddulo (fatorial)

inteiro x =0ler xx=fatorial(x)

imprimir "fatorial base:"+baseimprimir "fatorial expoente:"+expoenteimprimir "fatorial fatorial:"+fatorialimprimir "fatorial x:"+x

Fim

Motivação Exemplo 2

Page 12: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

inteiro fatorial(inteiro x)início

inteiro result=1inteiro cont=1para (cont<x;cont=cont+1) faça

resut = result*contfimpararetorne result

fim

Motivação Exemplo 2

Page 13: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Motivação

Redução clara no tamanho do códigoExemplo 1 = 5 slidesExemplo 2 = 3 slides

Aumento da legibilidade – todas as funcionalidades do programa estão em um único slide

Page 14: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Motivação

Possível Manutenção - o uso de procedimentos e funções facilitam a manutenção do código

Imagine que houvesse um erro no exemplo 1 no trecho de atualização dos contadores. A correção teria que ser propagada por todo o código

Page 15: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Motivação

No exemplo 2 a manutenção só teria que ser feita em um ponto, ou seja, no função fatorial

Page 16: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Motivação - Reuso

No exemplo 1, sempre que necessário calcular um fatorial de um número uma nova réplica do código de cálculo deverá ser feita

No exemplo 2, é necessário apenas uma chamada à função

Page 17: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe

Procedimentos Procedimento nome(<lista parâmetros>)

início corpo fim

Funções tipo nome(<lista de parâmetros>) início corpo fim

Page 18: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe – lista de parâmetros

Pode ser uma lista vazia – nesse caso, a função não recebe dados de entrada

Pode um ou mais elementos seguindo a sintaxe

tipo par1, tipo par2, ..., tipo parFinal

Page 19: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe - Tipos

Qualquer tipo básico da linguagem – Inteiro, Real, Texto, etc

Qualquer tipo definido na linguagem, string, vector, iterator, etc

Qualquer tipo definido pelo programador

Page 20: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe - Nomes

Os nomes, tanto de funções como de parâmetros devem ser identificadores válidos

Eles devem começar por um caractere (a-z, A-Z) e podem ser seguidos de um ou mais caractere ou dígitos(a-z,A-Z,0-9,_)

Page 21: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe - Nomes

Não podem conter espaços em branco

Inteiro calcular fatorial(Inteiro x ) Erro de compilação

Inteiro calcular_fatorial(Inteiro x )Correto

Inteiro calcularFatorial(Inteiro x )Correto

Page 22: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Dicas

O nome de uma função deve expressar claramente o que ela faz

A dificuldade em definir o nome de uma função pode indicar que ela deve ser dividida em mais de uma função

Page 23: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe - Corpo

Corpo de um procedimento é um conjunto de comandos válidos na linguagem

Podemos declarar variáveis, fazer comandos de entrada e saída

Funções e procedimentos podem usar outras funções e procedimentos previamente declarados

Funções e procedimentos não podem declarar dentro de seu corpo outras funções e procedimentos

Page 24: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe

Procedimentos Procedimento nome(<lista parâmetros>)

início corpo fim

Funções tipo nome(<lista de parâmetros>) início corpo fim

Page 25: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe - Retorno

Procedimentos não possuem em sua assinatura nenhum tipo, que significa que esta função não retorna nenhum valor

Funções necessariamente possuem um tipo de retorno, que pode ser qualquer um dos mencionados anteriormente

Page 26: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe - Retorno

Inteiro calcularAreaRetangulo (Inteiro base, Inteiro alt)

Esta assinatura indica que a função calcularAreaRetangulo recebe dois parâmetros Inteiros e retorna um valor inteiro.

Page 27: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe - Retorno

A presença de um tipo de retorno indica que ao terminar sua execução uma função deve retornar um valor do tipo de retorno especificado

Assim, uma função que possui um tipo de retorno Inteiro deve retornar um valor Inteiro, Lógico um valor lógico e assim sucessivamente

Page 28: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe - Retorno

Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt)início Inteiro area=base * alt retorne areafim

Page 29: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe - Assinatura

Em algumas linguagens de programação, entre elas c++, não é possível fazer uma chamada para uma função antes da declaração dela

No entanto, por questões organizacionais, pode não ser Interessante definir uma função em um determinado ponto do código

Page 30: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe - Assinatura

Suponha que você quer manter suas funções em ordem alfabética

Suponha que, por clareza, você quer que duas funções fiquem próximas, por exemplo funções de entrada e saída

Page 31: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe - Assinatura

Como resolver situações como as expostas anteriormente?

A resposta é a declaração da assinatura da função

A assinatura permite que se utilize uma função antes de sua declaração

Page 32: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Inteiro fatorial(inteiro x);Algoritmo principal()Início

Inteiro base=0ler basebase = fatorial(base)

Sintaxe - Assinatura

Page 33: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Sintaxe - Assinatura

Assinatura

Inteiro fatorial(inteiro x);Algoritmo principal()Início

Inteiro base=0ler basebase = fatorial(base)

Page 34: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Uso

Como usar uma função?

Basta apenas fazer uma chamada para função

Page 35: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

UsoInteiro calcularAreaRetangulo(Inteiro base, Inteiro alt);Procedimento main()início Inteiro base =2 Inteiro alt = 3 Inteiro result = calcularAreaRetangulo(base, alt) imprimir “o resultado é ” + resultfim

Page 36: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Uso

Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt);Procedimento main()início Inteiro b =2 Inteiro t = 3 Inteiro result = calcularAreaRetangulo(b, t) imprimir “o resultado é ” + resultfim

Page 37: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

UsoInteiro calcularAreaRetangulo(Inteiro base, Inteiro alt);Procedimento main()início Inteiro base =2 Real alt = 3 Inteiro result = calcularAreaRetangulo(base, alt) imprimir “o resultado é ” + resultfim

Page 38: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

UsoInteiro calcularAreaRetangulo(Inteiro base, Inteiro alt);Procedimento main()início Inteiro base =2 Real alt = 3 Inteiro intAlt=(Inteiro)alt Inteiro result = calcularAreaRetangulo(base, intAlt) imprimir “o resultado é ” + resultfim

Page 39: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Como Funciona?

Ao iniciar o programa, o SO tem o endereço de todas as funções definidas

Ao encontrar uma chamada de função/procedimento, o fluxo do programa é desviado para o a função

Ao terminar a execução da função, o fluxo retorna para o ponto imediatamente após o ponto onde a função foi chamada

Page 40: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Algoritmo testeComFunção ()início

inteiro base=0ler basebase = fatorial(base)

inteiro expoente =0ler expoenteexpoente = fatorial (expoente)

Como Funciona?

Page 41: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Algoritmo testeComFunção ()início

inteiro base=0ler basebase = fatorial(base)

inteiro expoente =0ler expoenteexpoente = fatorial (expoente)

Como Funciona?

Page 42: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Algoritmo testeComFunção ()início

inteiro base=0ler basebase = fatorial(base)

inteiro expoente =0ler expoenteexpoente = fatorial (expoente)

Como Funciona?

Page 43: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Algoritmo testeComFunção ()início

inteiro base=0ler basebase = fatorial(base)

inteiro expoente =0ler expoenteexpoente = fatorial (expoente)

Como Funciona?

inteiro fatorial(inteiro x)início inteiro result=1 inteiro cont=1 para (cont<x;cont=cont+1) faça resut = result*cont fimpara retorne resultfim

Page 44: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Algoritmo testeComFunção ()início

inteiro base=0ler basebase = fatorial(base)

inteiro expoente =0ler expoenteexpoente = fatorial (expoente)

Como Funciona?

inteiro fatorial(inteiro x)início inteiro result=1 inteiro cont=1 para (cont<x;cont=cont+1) faça resut = result*cont fimpara retorne resultfim

Page 45: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Algoritmo testeComFunção ()início

inteiro base=0ler basebase = fatorial(base)

inteiro expoente =0ler expoenteexpoente = fatorial (expoente)

Como Funciona?

inteiro fatorial(inteiro x)início inteiro result=1 inteiro cont=1 para (cont<x;cont=cont+1) faça resut = result*cont fimpara retorne resultfim

Page 46: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Algoritmo testeComFunção ()início

inteiro base=0ler basebase = fatorial(base)

inteiro expoente =0ler expoenteexpoente = fatorial (expoente)

Como Funciona?

Page 47: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Variáveis Locais

Funções permitem a definição de variáveis

Page 48: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Variáveis Locais

Funções permitem a definição de variáveis

Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt)Início Inteiro area=base * alt; return area;Fim

Page 49: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Variáveis Locais

Funções permitem a definição de variáveis

As variáveis declaradas dentro das funções só tem validade dentro destas funções

Page 50: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Variáveis Locais

Funções permitem a definição de variáveis

As variáveis declaradas dentro das funções só tem validade dentro destas funções

Variáveis declaradas dentro de funções são chamadas variáveis automáticas pois são criadas e destruídas sempre que a função para executada

Page 51: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Como Funciona?

Mecanismo é chamado pilha de execuçãoA pilha de execução está vaziaAo iniciar a execução de um bloco (início...

fim), as variáveis são empilhadas à medida em que são criadas;

Ao final de um bloco, essas variáveis são desempilhadas, liberando espaço na memória.

Page 52: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Exemplo

Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt)Início Inteiro area=base * alt; return area;Fim

area

Início da função Durante a Função Depois da Função

Page 53: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Variáveis Locais x Globais

É possível declarar variáveis locais com o mesmo nome de variáveis globais

Nestes caso, a variável local “esconde” a variável global

Inteiro notaprocedimento funcao() Início

Inteiro nota;/* Neste ponto, nota é variável local*/

Fim

Page 54: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Revisão

Porquê usar funções Sintaxe Como usar funções Como funciona a chamada de funções Definição de variáveis locais Execução da pilha de execução

Page 55: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Próximos Passos

Variações nas passagens de parâmetro (valor, referência, limitações)

Recursão

Page 56: Procedimentos e Funções. Motivação Procedimentos e Funções promovem o reuso de código eliminando a necessidade de replicação Facilitam a manutenção, legibilidade

Exercícios

Criar uma função que receba as coordenadas x,y e z de dois vetores e calcule o produto escalar destes 2 vetores

Criar uma função que calcule a área de um circulo que receba o raio como parâmetro

Criar funções que calculem a área de um triangulo( parâmetros a serem definidos)