560 likes | 696 Views
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 extensão dos programas. Motivação Exemplo 1. Algoritmo testeSemFunção () início inteiro base=0 ler base inteiro fat=1
E N D
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
Motivação Exemplo 1 Algoritmo testeSemFunção () início inteiro base=0 ler base inteiro fat=1 inteiro cont=1 para (cont<base;cont=cont+1) faça fat = fat*cont fimpara base=fat
Motivação Exemplo 1 inteiro expoente =0 ler expoente fat=1 cont=1 para (cont<expoente;cont=cont+1) faça fat = fat*cont fimpara expoente=fat
Motivação Exemplo 1 inteiro divisor =0 ler divisor fat=1 cont=1 para (cont<divisor;cont=cont+1) faça fat = fat*cont fimpara divisor=fat
Motivação Exemplo 1 inteiro x =0 ler x fat=1 cont=1 para (cont<x;cont=cont+1) faça fat = fat*cont fimpara x=fat
Motivação Exemplo 1 imprimir "fatorial base:"+base imprimir "fatorial expoente:"+expoente imprimir "fatorial fatorial:"+fatorial imprimir "fatorial x:"+x Fim
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?
Motivação • Uso de Procedimentos/Funções • Evitam replicação desnecessária de código promovendo assim o reuso
Motivação Exemplo 2 Algoritmo testeComFunção () início inteiro base=0 ler base base = fatorial(base) inteiro expoente =0 ler expoente expoente = fatorial (expoente)
Motivação Exemplo 2 inteiro fatorial =0 ler fatorial fatorial = móddulo (fatorial) inteiro x =0 ler x x=fatorial(x) imprimir "fatorial base:"+base imprimir "fatorial expoente:"+expoente imprimir "fatorial fatorial:"+fatorial imprimir "fatorial x:"+x Fim
Motivação Exemplo 2 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 result fim
Motivação • Redução clara no tamanho do código • Exemplo 1 = 5 slides • Exemplo 2 = 3 slides • Aumento da legibilidade – todas as funcionalidades do programa estão em um único slide
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
Motivação • No exemplo 2 a manutenção só teria que ser feita em um ponto, ou seja, no função fatorial
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
Sintaxe • Procedimentos Procedimento nome(<lista parâmetros>) início corpo fim • Funções tipo nome(<lista de parâmetros>) início corpo fim
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
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
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,_)
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
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
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
Sintaxe • Procedimentos Procedimento nome(<lista parâmetros>) início corpo fim • Funções tipo nome(<lista de parâmetros>) início corpo fim
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
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.
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
Sintaxe - Retorno Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt) início Inteiro area=base * alt retorne area fim
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
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
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
Sintaxe - Assinatura Inteiro fatorial(inteiro x); Algoritmo principal() Início Inteiro base=0 ler base base = fatorial(base)
Sintaxe - Assinatura Inteiro fatorial(inteiro x); Algoritmo principal() Início Inteiro base=0 ler base base = fatorial(base) Assinatura
Uso • Como usar uma função? • Basta apenas fazer uma chamada para função
Uso Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt); Procedimento main() início Inteiro base =2 Inteiro alt = 3 Inteiro result = calcularAreaRetangulo(base, alt) imprimir “o resultado é ” + result fim
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 é ” + result fim
Uso Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt); Procedimento main() início Inteiro base =2 Real alt = 3 Inteiro result = calcularAreaRetangulo(base, alt) imprimir “o resultado é ” + result fim
Uso Inteiro 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 é ” + result fim
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
Como Funciona? Algoritmo testeComFunção () início inteiro base=0 ler base base = fatorial(base) inteiro expoente =0 ler expoente expoente = fatorial (expoente)
Como Funciona? Algoritmo testeComFunção () início inteiro base=0 ler base base = fatorial(base) inteiro expoente =0 ler expoente expoente = fatorial (expoente)
Como Funciona? Algoritmo testeComFunção () início inteiro base=0 ler base base = fatorial(base) inteiro expoente =0 ler expoente expoente = fatorial (expoente)
Como Funciona? Algoritmo testeComFunção () início inteiro base=0 ler base base = fatorial(base) inteiro expoente =0 ler expoente expoente = fatorial (expoente) 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 result fim
Como Funciona? Algoritmo testeComFunção () início inteiro base=0 ler base base = fatorial(base) inteiro expoente =0 ler expoente expoente = fatorial (expoente) 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 result fim
Como Funciona? Algoritmo testeComFunção () início inteiro base=0 ler base base = fatorial(base) inteiro expoente =0 ler expoente expoente = fatorial (expoente) 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 result fim
Como Funciona? Algoritmo testeComFunção () início inteiro base=0 ler base base = fatorial(base) inteiro expoente =0 ler expoente expoente = fatorial (expoente)
Variáveis Locais • Funções permitem a definição de variáveis
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
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 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