Upload
regis-magalhaes
View
11.395
Download
1
Embed Size (px)
Citation preview
Lógica de Programação
Subalgoritmos
Regis Pires Magalhã[email protected]
Última atualização em 03/08/2008
Problema• Como resolver um problema bem “cabeludo”?• Como as pirâmides do Egito foram construídas?
Solução• Dividir para conquistar.
– Modularização
Subalgoritmos• São trechos de algoritmos que efetuam
determinada tarefa.• Ao invés de escrever um algoritmo grande,
escrevem-se vários algoritmos menores, os quais, em conjunto, resolvem o problema proposto.
• É especialmente indicado usá-los quando uma determinada tarefa é efetuada em diversos lugares no mesmo algoritmo.
• São declarados no início do algoritmo e podem ser chamados em qualquer ponto após sua declaração.
• Podem ser de dois tipos:– Funções - retornam algum valor.– Procedimento (Subrotina) - não retorna nada.
Vantagens• Reduzem o tamanho do algoritmo.• Melhoram a legibilidade do algoritmo.• Evitam a repetição de código.
– Reaproveitamento no mesmo programa ou em outros• Facilitam a manutenção• Facilitam a divisão de trabalho• Possibilitam a utilização de componentes prontos.
Funções• Retornam um valor ou uma informação.• A chamada de uma função é feita através da
citação do seu nome seguido de seus argumentos entre parênteses.
• As funções podem ser:– predefinidas pela linguagem;– criadas pelo programador de acordo com o seu
interesse.
Funções Predefinidas do Visualg
Funções Predefinidas do Visualg
Funções Predefinidas do Visualgalgoritmo "exemplo"var numero : real nome : caracterinicio escreva("Digite um número: ") leia(numero) escreval("Raiz quad. de ", numero, " é ", raizq(numero))
escreva("Digite um nome: ") leia(nome) escreval("Normal: ", nome) escreval("Maiúsculas: ", maiusc(nome)) escreval("Minúsculas: ", minusc(nome)) escreval("3 primeiras letras: ", copia(nome,1,3)) escreval("tamanho: ", compr(nome)) escreval(maiusc(copia(nome,compr(nome)-2,3)))fimalgoritmo
Criação de Funções
Algoritmo "<nome do algoritmo>"var <declaração de variáveis globais>
funcao <identificador> ([var]<parâmetros>) <tipo de retorno>var<declaração de variáveis locais>inicio<lista de comandos>retorne <variável de retorno>fimfuncao
inicio< lista de comandos>fimalgoritmo
Criação de Funções• As variáveis globais ficam antes das funções.• A função sempre fica dentro do escopo Algoritmo
e FimAlgoritmo.• Evite declarar variáveis globais com o mesmo
nome das variáveis da função.
Exemploalgoritmo "soma"varn1, n2 : real
funcao soma(a, b : real) : real retorne a + bfimfuncao
inicio escreva("Digite um número: ") leia(n1) escreva("Digite outro número: ") leia(n2) escreva("Soma: ", soma(n1, n2))fimalgoritmo
Exemploalgoritmo "par_impar"
var numero : inteiro
funcao par_ou_impar(num : inteiro) : caracterinicio se (num % 2 = 0) entao retorne "par" senao retorne "impar" fimsefimfuncao
inicioescreva("Digite um número: ")leia(numero)escreva(par_ou_impar(numero))fimalgoritmo
Procedimento
Algoritmo "<nome do algoritmo>"var <declaração de variáveis globais>
procedimento <identificador> ([var]<parâmetros>)var<declaração de variáveis locais>inicio <lista de comandos>fimprocedimento
inicio< lista de comandos>fimalgoritmo
Exemploalgoritmo "repeticao"var palavra : caracter
procedimento repete(texto : caracter; n : inteiro)var i : inteiroinicio para i de 1 ate n faca escreval(texto) fimparafimprocedimento
inicioescreva("Digite uma palavra: ")leia(palavra)repete(palavra, 10)fimalgoritmo
Escopo de Variáveis
Passagem de Parâmetros• Por valor• Por referência
• Vantagens do uso da passagem de parâmetros por valor:
• Privacidade dos dados• A possibilidade de passar constantes como argumentos
de funções
x ← raizq(25)
Exemplo – Passagem por Referênciaalgoritmo "permuta_valor"var n1, n2, aux : inteiro
procedimento troca(var x, y : inteiro)var aux : inteiroinicio aux <- x x <- y y <- auxfimprocedimento
inicioEscreva("Digite n1: ")leia(n1)Escreva("Digite n2: ")leia(n2)troca(n1,n2)Escreval("n1 é: ", n1)Escreval("n2 é: ", n2)fimalgoritmo