ALGORITMO E ESTRUTURAS
DE DADOS
Subalgoritmos:
Conceito
Trechos de algoritmos que realizam
cálculos ou tarefas.
Vantagens:
Reduzem o tamanho do algoritmo
Facilitam a compreensão e visualização do algoritmo São declarados no início do algoritmo e podem ser
chamados em qualquer ponto após sua declaração
Eles podem ser Funções que retorna algum valor ou
Subalgoritmos:
Funcionamento
Um algoritmo completo é dividido em: UM Algoritmo principal
Diversos Subalgoritmos
A execução sempre começa pelo algoritmo principal;
A execução de um subalgoritmo é solicitada sempre que
necessário, através de uma chamada ou invocação.
Quando um subalgoritmo é chamado, a execução do
algoritmo principal é interrompida para que o
subalgoritmo seja executado. Após isso, o algoritmo principal continua de onde parou
Subalgoritmo:
Funcionamento
Subalgoritmo 1 Instrução 1 Subalgoritmo 2 instrução2 Subalgoritmo 1 Instrução 1 Subalgoritmo 2 instrução2 Subalgoritmo 2 Instrução 1 Instrução 2 Subalgoritmo 2 Instrução 1 Instrução 2 Algoritmo principal Instrução 1 Instrução 2 Subalgoritmo 1 Instrução 3 Algoritmo principal Instrução 1 Instrução 2 Subalgoritmo 1 Instrução 31) A execução inicial aqui e segue a sequência das instruções.
2) A execução do Algoritmo Principal é interrompida até que o Subalgoritmo 1 seja executado, continuando em seguida a partir da instrução 3.
3) Executado no momento em que é invocado pelo Algoritmo Principal.
4) A execução do Subalgoritmo 1 é interrompida até que o Subalgoritmo 2 seja executado, continuando em seguida a partir da instrução 2.
5) Executado no momento em que é invocado pelo Subalgoritmo 1.
6) Terminada a execução, volta para continuar o
Subalgoritmo 1. Quando terminar o Subalgoritmo 1, volta para continuar com a execução do Algoritmo Principal.
2
4 6
Subalgoritmo:
Variáveis Locais e
Variáveis Globais
Variáveis Globais: são declaradas no início
do algoritmo e pode ser usadas no algoritmo
principal e por todos os subalgoritmos.
Variáveis Locais: são definidas dentro de
um subalgoritmo e só podem ser utilizadas
dentro dele.
Subalgoritmos:
Tipos
Existem dois tipos de Subalgoritmos:
Funções;
Subalgoritmo:
Função
FUNÇÃO é um subalgoritmo que calcula um
valor a partir de outros fornecidos a ela,
retornando o valor calculado
A chamada a uma função sempre ocorre dentro
de uma expressão do mesmo tipo que tem o valor retornado por ela.
Sua chamada é feita pelo seu nome, seguido de
seus respectivos parâmetros entre parênteses.
A função é executada e, ao seu término, o trecho
do comando que a invocou é substituído pelo valor retornado
Exemplos: primo(<número>),
Subalgoritmos:
Função
Forma geral de uma função (sintaxe):
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
Identificador: Nome da função. [var]:
• Passagem de parâmetros por referência: utiliza-se a construção VAR antes dos identificadores para indicar a passagem por referência.
• Passagem de parâmetro por valor: não é necessário utilizar a construção VAR antes dos identificadores.
Parâmetros: Entre um mesmo tipo de dados são separados por vírgula. Entre tipos de
dados a separação é feita com ponto-e-vírgulas ';'.
Tipo de retorno da função: Real, Inteiro, Lógico ou Caractere.
Declaração de variáveis locais: idêntica a declaração de variáveis globais. As variáveis
declaradas localmente tem validade dentro do escopo da função.
Subalgoritmos:
Exemplo de
Função
Algoritmo "Quadrado" Var
x,y:real
Funcao quadrado(var w:real): real
var quad:real Inicio quad w^2 Retorne (quad) Fimfuncao Início
Escreva ("Digite um número: ") Leia ( x )
y quadrado(x)
Escreva (" Quadrado = " , y ) Fimalgoritmo
Aqui se inicia o algoritmo principal, que
solicita um número ao usuário e, em seguida, chama a função que realiza o quadrado do número. Guarda o quadrado retornada pela função na variável y e mostra o valor na tela. Quando a função é chamada, a execução do algoritmo principal fica parada até que a função seja finalizada e retorne o resultado.
Subalgoritmos:
Instrução
Retorne
A instrução Retorne é um comando simples usado apenas
nas funções e tem o efeito de parar a execução da função e enviar um valor para o algoritmo principal ou para outro subalgoritmo que o tenha chamado.
Toda função deve ter em seu corpo de instruções, pelo
menos, uma instrução Retorne.
Sintaxe:
Retorne ( <expressão> )
Exemplos:
Retorne ( area ) Retorne ( pi*r*r )
Subalgoritmos:
Chamada de
Função
A chamada de uma função, por parte do algoritmo
principal ou por outro subalgoritmo, é feita pelo simples aparecimento de seu nome, com os respectivos parâmetros entre parênteses, dentro de uma expressão.
Os parâmetros utilizados no algoritmo principal, no ato da
chamada da função (chamados parâmetros reais) devem manter uma correspondência (número, ordem e tipo) com os parâmetros definidos na função (chamados parâmetros formais).
A função é executada, e ao seu término, o trecho do
comando que a chamou é substituído pelo valor retornado pela mesma dentro da expressão em que se encontra, e a avaliação desta prossegue normalmente.
Subalgoritmos:
Exemplos de
Função
Algoritmo “classifica_Idade” Var
idade: inteiro;
Funcao verifica_Idade (var id:inteiro):logico
Inicio se (id > 18) entao Retorne (verdadeiro) senao Retorne (Falso) Fimse Fimfuncao Inicio
Escreva("Entre com a idade:") Leia (idade)
Se (verifica_idade (idade)) entao Escreva ("é maior de idade")
Senao
Escreva ("é menor de idade") Fimse
PROCEDIMENTO é um subalgoritmo que não
retorna valor ao algoritmo chamador ou que
retorna dois ou mais valores
A chamada de procedimentos só pode ser feita
com uma linha de comando isolada dentro do algoritmo
Se retornar valores, o retorno é feito por meio de
parâmetros ou variáveis globais
Exemplos: solicita_valores, lista_resultados
Subalgoritmos:
Procedimentos
Forma geral de um procedimento (sintaxe):
procedimento <nome> ([var]<parâmetros>)
var
<declaração de variáveis locais>
inicio
<lista de comandos>
Fimprocedimento
nome: Nome do procedimento. [var]:
• Passagem de parâmetros por referência: utiliza-se a construção VAR antes dos identificadores para indicar a passagem por referência.
• Passagem de parâmetro por valor: não é necessário utilizar a construção VAR antes dos identificadores.
Parâmetros: Entre um mesmo tipo de dados são separados por
vírgula. Entre tipos de dados a separação é feita com ponto-e-vírgulas ';'.
Subalgoritmos:
Exemplo de
Procedimento
Algoritmo “Calcular Quadrado” Var x:real Procedimento quadrado() Var z:real Inicio zx^2
escreva(“O quadrado do numero é =“,z) Fimprocedimento Inicio escreva(“Digite um numero:”) leia(x) quadrado() fimalgoritmo
Subalgoritmos:
Exemplo de
Procedimento
Algoritmo “Calcular Quadrado” Var x:real Procedimento quadrado() Var z:real Inicio zx^2
escreva(“O quadrado do numero é =“,z) Fimprocedimento Inicio escreva(“Digite um numero:”) leia(x) quadrado() fimalgoritmo
Subalgoritmos:
Chamada de
Procedimento
A definição deste tipo de subalgoritmo é semelhante ao
anterior com a diferença de que os valores calculados figuram na lista dos Parâmetros juntamente com os valores recebidos.
A chamada de um procedimento só é feita em comandos
isolados dentro do algoritmo principal ou outro subalgoritmo, como os comandos simples, tipo as instruções Leia, Escreva, Retorne, etc., e nunca no meio de expressões ou em atribuições como no caso de funções.
Subalgoritmos:
Exemplo de
Procedimento
Algoritmo “Notas” Var n1,n2,n3,md:real codigo:inteiroProcedimento Media(var a,b,c,m:real)
Inicio
m <- (a + b + c) / 3
Fimprocedimento
Inicio
escreva("Informe código e 3 valores para notas:") leia(codigo,n1,n2,n3)
enquanto (codigo > 0) faca
Media(n1,n2,n3,md) escreva("Media:",md)
escreva("Informe código e 3 valores para notas:") leia(codigo,n1,n2,n3)
Fimenquanto Fimalgoritmo
Subalgoritmo:
Parâmetros
Parâmetros são canais pelos quais se
estabelece uma comunicação bidirecional entre
um subalgoritmo e o algoritmo chamador.
Os tipos de parâmetros que utilizamos nesse
processo são dois, veja-os a seguir:
Parâmetros formais – são aquelas variáveis
locais que declaramos entre parêntesis, nos
cabeçalhos dos subalgoritmos. São utilizados para realizar os cálculos dentro do subalgoritmo.
Parâmetros reais – são os valores que substituem
os parâmetros formais no momento da chamada de um subalgoritmo.
Subalgoritmo:
Parâmetros
A passagem de parâmetros ocorre quando é feita uma
substituição dos parâmetros formais pelos reais no momento da execução do subalgoritmo. Esses parâmetros são passados por variáveis de duas formas:
Por valor: neste caso é passada uma cópia do conteúdo
de uma variável. Essa cópia só existirá no procedimento ou na função.
Qualquer alteração que for feita no valor, não irá
alterar o conteúdo da variável original.
Por referência: não existe cópia do conteúdo enviado, o
que ocorre é o envio do endereço de memória onde a variável se encontra.
Neste caso, qualquer alteração no valor alterará o valor
Subalgoritmo:
Parâmetros
Por exemplo, veja o cabeçalho da função fsoma, a seguir. Funcao fsoma (a1, b1 : inteiro) : inteiro
As variáveis a1 e b1 são os parâmetros formais da função. Veja, agora, o seguinte trecho do algoritmo que chama essa
função:
leia (a) leia (b)
soma <- fsoma (a,b)
Os valores armazenados nas variáveis globais a e b são os
parâmetros reais. Note que poderíamos, simplesmente, chamar a função, passando os valores diretamente: soma <- fsoma (3,5). Nesse caso, os números 3 e 5 seriam os parâmetros reais.
Subalgoritmo:
Parâmetros
No processo de passagem de parâmetros, são passados dados de entrada do algoritmo para o subalgoritmo e dados de saída no sentido oposto. Veja esse processo ilustrado na Figura.
Subalgoritmo:
Parâmetros
Podemos ver uma função, no módulo da esquerda, que calcula uma soma entre dois números. No módulo da direita, temos o corpo do algoritmo que chama essa função. O algoritmo passa os dados de entrada (números armazenados nas variáveis a e b, que são os parâmetros reais) para a função, que os armazena em suas variáveis locais a1 e b1 (parâmetros formais). O cálculo é efetuado e o valor encontrado é armazenado na variável local resultado. Através do comando retorne, esse valor é passado como dado de saída para o algoritmo (no momento da chamada da função), que o armazena na variável global soma para, então, ser exibido.
Subalgoritmo:
Parâmetros
Em um procedimento, essa passagem de parâmetros é feita de uma forma um pouco diferente.
Subalgoritmo:
Parâmetros
No procedimento, a comunicação de saída não é feita de forma explícita como na função. Veja que, ao contrário do que é feito na função, a palavra reservada var é utilizada nos parâmetros do procedimento. Veja, também, que, na chamada ao procedimento, todos os dados são passados como parâmetros, ao passo que na função, são passados apenas os dados de entrada (os números armazenados em a e b).
Subalgoritmo:
Exemplo
passagem por valor
Algoritmo “Exemplo_parametro_por_valor” Var
X : inteiro
Procedimento PROC(Y : inteiro) Inicio Y Y + 1 Escreva ("Durante Y = ”, Y) Fimprocedimento Inicio escreva(“Informe valor:”) leia(X) Escreva ("Antes X = ”, X) PROC(X) Escreva ("Depois X = ", X) Fimalgoritmo
O algoritmo fornece o seguinte resultado:
Antes X = 1 Durante Y = 2 Depois X = 1
Isto certifica que o procedimento não alterou o valor do parâmetro real X durante sua execução. Este tipo de ação é possível porque, neste mecanismo de passagem de parâmetros, é feita uma reserva de espaço em
memória para os parâmetros, para que neles seja armazenada uma cópia do valor real.
Subalgoritmo:
Exemplo
passagem por referência
Algoritmo “Exemplo_parametro_por_referencia” Var
X : inteiro
Procedimento PROC(var Y : inteiro) Inicio Y Y + 1 Escreva ("Durante Y = ”, Y) Fimprocedimento Inicio escreva(“Informe valor:”) leia(X) Escreva ("Antes X = ”, X) PROC(X) Escreva ("Depois X = ", X) Fimalgoritmo
O algoritmo fornece o seguinte resultado:
Antes X = 1 Durante Y = 2 Depois X = 2
Como podemos observar, depois de chamar o procedimento com o parâmetro por referência o valor original da variável foi alterado.
Exercícios
Crie uma função para calcular o fatorial de um
número.
1! ou 0! = 1
Crie uma função para determinar se um número
é primo