Algoritmo e Lógica Programação Modularização: Funções e Subalgoritmos Prof. Esp. Douglas Mariano dos Santos
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
Dica!!! Pressionando CTRL+J o VisualG mostra uma lista de funções predefinidas, a sua utilização é muito simples. Basta selecionar a função desejar e dar ENTER, depois, é só passar os parâmetros desejados.
Exemplo 1 algoritmo "exemplo" var nome, sobrenome : caracter qtd_caracter, local_espaço : inteiro inicio nome <- “Douglas Mariano” qtd_caracter <- compr(nome) local_espaço <- pos(“ “, nome) sobrenome <- copia(nome, local_espaço + 1, qtd_caracter) escreval(“Seu sobrenome é: “, sobrenome) fimalgoritmo
Exemplo 2 algoritmo "exemplo" var valorReal : real valorInteiro : inteiro inicio valorReal <- 7.1321234354568987123613 valorInteiro <- int(valorReal) escreval(“O valor inteiro é: “, valorInteiro) fimalgoritmo
Exemplo 3 algoritmo "exemplo" var numero : real nome : caracter inicio 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> <declaração de variáveis locais> inicio <lista de comandos> retorne <variável de retorno> fimfuncao < 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.
Exemplo algoritmo "soma" var n1, n2 : real funcao soma(a, b : real) : real retorne a + b fimfuncao inicio escreva("Digite um número: ") leia(n1) escreva("Digite outro número: ") leia(n2) escreva("Soma: ", soma(n1, n2)) fimalgoritmo
Exemplo algoritmo "par_impar" var numero : inteiro funcao par_ou_impar(num : inteiro) : caracter inicio se (num % 2 = 0) entao retorne "par" senao retorne "impar" fimse fimfuncao escreva("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>) <declaração de variáveis locais> inicio <lista de comandos> fimprocedimento < lista de comandos> fimalgoritmo
Exemplo algoritmo "repeticao" var palavra : caracter procedimento repete(texto : caracter; n : inteiro) var i : inteiro inicio para i de 1 ate n faca escreval(texto) fimpara fimprocedimento escreva("Digite uma palavra: ") leia(palavra) repete(palavra, 10) fimalgoritmo
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ência algoritmo "permuta_valor" var n1, n2, aux : inteiro procedimento troca(var x, y : inteiro) var aux : inteiro inicio aux <- x x <- y y <- aux fimprocedimento Escreva("Digite n1: ") leia(n1) Escreva("Digite n2: ") leia(n2) troca(n1,n2) Escreval("n1 é: ", n1) Escreval("n2 é: ", n2) fimalgoritmo
Exercicios Faça um algoritmo que solicite a idade do usuário e diga se este é de maior ou menor. Escreva uma programa que lê o sexo de uma pessoa. O sexo deverá ser com o tipo de dado caractere o programa deverá aceitar apenas os valores “M” ou “F”. Em uma turma há 10 alunos. Cada aluno tem 2 notas. Um professor precisa calcular a média das duas notas de cada aluno. Crie um programa que resolva este problema.