MULTIMÉDIA
ALGORITMIA
- manual de formação -
Edição:
REGIBIO – FORMAÇÃO E
CONSULTADORIA, LDA
Organização de Conteúdos:
ISABEL CAMÕES
Versão: 2/2012
ALGORITMIA
ÍNDICE
Índice
ÍNDICE .......................................................................................................................... 3
Objectivo ...................................................................................................................... 5
Introdução ................................................................................................................... 7
Gerações de linguagens de programação ................................................................. 10
Noção de Algoritmo .................................................................................................... 12
Definição de algoritmo ............................................................................................... 17
Identificação de algoritmos ....................................................................................... 20
Desenvolvimento de algoritmos ................................................................................ 22
Noção de fluxograma ................................................................................................ 29
Transposição de algoritmos para fluxogramas ......................................................... 33
Desenvolvimento de fluxogramas ............................................................................. 34
Selecção de algoritmos por situação ......................................................................... 35
Estruturas básicas de controlo .................................................................................. 36
Tipos de dados ........................................................................................................... 46
Operações elementares ............................................................................................. 50
Operadores e suas prioridades .................................................................................. 52
Variáveis e Expressões ............................................................................................... 56
Conceito de memória................................................................................................. 58
Pseudo Código ........................................................................................................... 59 3
Plano de testes e Traçagem ....................................................................................... 62
ALGORITMIA
4
ALGORITMIA
Objectivo
5
ALGORITMIA
6
ALGORITMIA
Introdução
Desde sempre que o Homem processa informação. Começou por fazê-lo de forma
manual, mas a evolução exigiu um maior processamento de informação num menor
espaço de tempo.
Surge então, na década de 60 do Séc. XX o termo Informática, como resultado da
aglutinação dos termos informação e automática.
7
ALGORITMIA
Mas não foi apenas isso que aconteceu. A própria filosofia associada à lógica da
programação, que durante anos se centrou na estruturação (Programação
estruturada) foi abalada pelo aparecimento de ferramentas que permitem ao 8
ALGORITMIA
9
ALGORITMIA
Desde então que tem havido evolução, sempre no sentido de facilitar a tarefa do
programador, distanciando-o o mais possível do nível físico.
…
11
ALGORITMIA
Noção de Algoritmo
- especificação
- análise
- projecto (design)
- programação/implementação
- e manutenção de Software.
De um modo esquemático:
12
ALGORITMIA
Exemplo:
Dado o custo unitário de um dado produto, variando a percentagem de
lucro, determinar o preço de venda, com IVA incluído, e a respectiva margem de
lucro.
Análise
Entradas
C – Custo unitário
M – Percentagem de lucro
Saídas
P – Preço de venda
H – Margem de lucro 14
ALGORITMIA
V – Valor do Imposto
T – Taxa de IVA
Definição do problema
Calcular o preço de venda ao público e a margem de lucro.
Descrição do problema
Apresentar de forma visível e legível, no ecrã ou na impressora, o valor do
preço de venda relacionado com o custo e a margem de lucro.
15
decompor o problema em subproblemas
ALGORITMIA
Algoritmo “SomaDeDoisValores”
- desenho modular
- refinamento gradual (top-down)
- programação estruturada
16
ALGORITMIA
Definição de algoritmo
Todos os dias, nas nossas tarefas, executamos algoritmos, desde que realizamos a tarefa
mais simples, em que o fazemos e nem nos apercebemos, até à tarefa mais elaborada, em
que temos que pensar um pouco na sequência lógica para a sua execução.
Como exemplo de uma tarefa simples temos a de barrar um pão com manteiga, em que:
Abrir o pão
Barrar a manteiga
Fechar o pão
Se formos para uma tarefa mais elaborada, tipo ir aos correios, à padaria, à biblioteca e ao
multibanco, já temos que pensar mais um pouco.
Começar pela padaria, pois é a que abre mais cedo
Passar na Biblioteca, que fica a caminho dos correios
Seguir para os correios, para levantar encomenda à cobrança
Finalmente, passar pelo multibanco
No entanto, ao verificar que não dispomos de dinheiro para a padaria e para os
correios, será necessário refazer o raciocínio:
Começar pelo multibanco, para levantar dinheiro
Passar pela padaria, qua já está aberta
Seguir pela Biblioteca, que fica a caminho dos correios
Ir aos correios, para levantar encomenda à cobrança 17
ALGORITMIA
(Nota: tal como já foi abordado, cada um destes problemas pode, e deve, ser
decomposto em subproblemas.)
18
ALGORITMIA
Propriedades do algoritmo:
- Deve permitir comunicação com o exterior – em geral através da entrada de dados
e da saída de resultados
- Deve ser finito – alcançar a solução em tempo finito
- Deve ser bem definido – sem ambiguidades
19
ALGORITMIA
Identificação de algoritmos
Exemplo:
Escreva um algoritmo que faça a multiplicação de dois números.
Resolução:
Exemplo:
Escreva um algoritmo para análise do não funcionamento de uma
lâmpada.
Resolução:
21
ALGORITMIA
Exemplo:
Resolução:
variável:
SOMA,A,B: inteiro;
inicio
Escreva("Digite um numero");
Leia(A);
escreva("digite outro numero");
leia(B);
SOMA ← A + B;
escreva(SOMA);
fim.
fim.
Desenvolvimento de algoritmos
execute o programa.
Mais uma vez se alerta para o facto de que, para problemas de grande
complexidade, não é simples nem lógico desenvolver apenas um algoritmo sem
primeiro pensar se existem vantagens na decomposição do problema em
problemas mais simples. Problemas mais simples originam algoritmos mais simples,
mais fáceis de trabalhar e de corrigir em caso de erro.
Exercício 1:
Desenvolver um algoritmo, usando descrição narrativa, sobre como beber
um copo de água.
Solução:
Pegar no copo
Colocar o copo debaixo da torneira
Encher o copo
Levar copo à boca
Beber a água
Pousar o copo
Como se pode observar, são seis as acções básicas que compõem o algoritmo. Se
quiséssemos porém “dizer” a um computador que “enchesse o copo”, ele não
saberia atribuir significados próprios a conceitos complexos. Na realidade, encher
um copo não é uma tarefa elementar, bem pelo contrário, implica uma série de
raciocínios sucessivos sobre um determinado estado de um objecto, até ter de se
tomar uma decisão. Senão vejamos:
Estando a água a cair da torneira para dentro do copo, vamos observando o nível de 23
água e a cada instante vamo-nos interrogando: está cheio ou não? E só quando a
ALGORITMIA
Percebendo que cada uma das seis acções básicas que constituem o algoritmo deve
ser constituída por procedimentos elementares, teríamos provavelmente como
resultado uma coisa do seguinte tipo:
inicio
se existe copo
então
pegar no copo
se copo não estiver debaixo da torneira
então
colocar copo debaixo da torneira
se copo debaixo da torneira
então
abrir a torneira
se o copo não estiver cheio
então
manter copo debaixo da torneira
senão
fechar a torneira
levar o copo à boca
beber
pousar o copo
senão
fica-se com sede
fim
Se Então Senão
Inicio Fim 24
ALGORITMIA
Mais tarde iremos ver que estas palavras são utilizadas por várias linguagens de
programação, sempre na sua forma original e natural, em Inglês:
If Then Else
Begin End
Repare-se que estas palavras são utilizadas para declarar a execução de passos
simples e elementares e que permitem seguir diferentes acções consoante a
situação que se verifica e a decisão tomada em função disso.
Se (condição se verificar)
Então
Acções a executar
Senão
Acções a executar
Exemplo:
Se tiver dinheiro
compro chocolates
25
vou almoçar
ALGORITMIA
vou à praia
Se tiver dinheiro
compro chocolates
vou almoçar
vou à praia
Esta forma de escrever o algoritmo facilita bastante a quem o faz pois, à medida
que vai descrevendo o problema, consegue saber o que vai ser executado, quando
e sob que condição. Se escrever tudo alinhado, torna a leitura mais difícil.
Então, tão importante como a escrita de um algoritmo é a sua leitura.
Torna-se muito pouco eficiente ter um algoritmo aparentemente muito bem escrito,
se depois quem o for codificar na linguagem de programação não o conseguir ler
(ou tiver dificuldades acrescidas para o fazer).
Inicio
ler primeiro numero
ler segundo numero
ler terceiro numero 26
se primeiro maior do que o segundo
ALGORITMIA
então
se primeiro maior do que terceiro
então
escrever (o maior numero é o primeiro)
senão
escrever (o maior numero é o terceiro)
senão
fimse
se segundo maior do que terceiro
então
escrever (o maior numero é o segundo)
senão
escrever (o maior numero é o terceiro)
fimse
fimse
fim
Exemplo de um algoritmo escrito de forma correcta, a qual facilita a sua leitura:
Inicio
ler primeiro numero
ler segundo numero
ler terceiro numero
se primeiro maior do que o segundo
então
se primeiro maior do que terceiro
então
escrever (o maior numero é o primeiro) 27
senão
ALGORITMIA
28
ALGORITMIA
Noção de fluxograma
Início
Dados Actividade
Decisão
Fim
Símbolos principais:
Símbolo de processo
30
ALGORITMIA
Símbolo de decisão
Conector de páginas
31
ALGORITMIA
Início
Ler Nome,
horas,
valor_hora
Fim
entrada de dados, a qual pode ocorrer por via teclado, ou por leitura de um ficheiro,
etc., e a saída de dados, que pode ser via impressora, ou para o ecrã ou até mesmo
para um ficheiro.
As linhas de fluxo ligam os elementos do algoritmo e contêm uma seta, a qual indica
o sentido do fluxo de controlo lógico na solução.
33
ALGORITMIA
inicio
Escrever “o
Escrever “o
maior é o
maior é o
terceiro”
primeiro” Escrever “o Escrever “o
maior é o maior é o
segundo” terceiro”
fim
Desenvolvimento de fluxogramas
35
ALGORITMIA
Sequência:
instrução;
instrução;
instrução; 36
ALGORITMIA
instrução1
instrução2
instrução3
Exemplo:
ler valor_x;
ler valor_y;
soma = valor_x + valor_y;
escrever (“Resultado = “, soma);
O utilizador terá que introduzir dois valores, os quais serão somados, e cujo
resultado da soma será apresentado no ecrã.
Decisão/Selecção:
se (condição)
então
instrução/ões;
senão
instrução/ões;
fimse
condição
sim não
instrução1 instrução2
Exemplo:
38
ler numero;
ALGORITMIA
se (numero => 0)
então
escrever (“Numero é positivo”);
fimse
condição
sim
não
instrução1
Exemplo:
se (numero => 0)
então
escrever (“Número é positivo”);
senão
escrever (“Número não é positivo ”); 39
fimse
ALGORITMIA
Repetição:
Quando tal acontece, basta indicar uma vez a sequência de operações a executar e
repeti-la tantas vezes quantas as necessárias.
Estas estruturas, que repetem uma sequência de operações, sempre pela mesma
ordem, um determinado número de vezes, são designadas de anel (ou loop). A
acção de repetir as operações recebe o nome de iteração ou ciclo.
condição
sim
instrução
nao
Exemplo:
ler numero;
enquanto (numero =>0)
fazer
escrever (“Número é positivo”);
ler numero;
fimenquanto
repete
instrução/ões;
enquanto (condição a verificar)
instrução
sim
condição
não
Exemplo:
repete
escrever (“insira um número positivo”);
ler numero;
enquanto (numero =>0); 42
ALGORITMIA
É na própria estrutura que se definem o valor inicial, o valor final, e como esse valor
vai variar. A validação da condição é verificada no início de cada iteração pelo que,
as operações contidas na estrutura poderão nunca ser executadas.
sim
não
instrução
reforça que o bloco de operações pode nunca ser executado, quando se utiliza esta
estrutura.
Exemplo:
Existe ainda uma outra estrutura bastante útil, a qual permite evoluir por diferentes
processos em função da situação que se verifique.
caso (varivável)
opção1:
instrução;
opção2:
instrução;
opção3:
instrução;
outro:
instrução;
fimcaso
Exemplo:
44
caso (mês)
ALGORITMIA
1,3,5,7,8,10,12:
dias_mes =31;
2:
dias_mes =28;
4,6,9,11:
dias_mes=30;
outro:
escrever (“mês incorrecto”);
fimcaso
mes
45
ALGORITMIA
Tipos de dados
Temos então vários tipos de dados e vários tipos de operações, sendo que
diferentes tipos de dados suportam diferentes tipos de operações.
Os dados podem ser caracterizados como sendo alfanuméricos, numéricos ou
lógicos.
Os dados numéricos podem ser números inteiros ou números reais. Existem vários
tamanhos de dados a ter em consideração:
Inteiros ( 2 Bytes): são números inteiros, com o respectivo sinal. Suportam valores
entre -32768 e 32767.
Inteiros Longos (4 Bytes): são números inteiros, com o respectivo sinal. Suportam
valores entre -2147483648 e 2147483647.
Reais: permitem representar uma gama mais extensa de valores, tal como
potências, raízes, fracções, etc. Também estes números têm limites definidos.
exemplo o π = 3.14) ou a taxa do I.V.A (23%), que são valores que perduram no
tempo. Caso o valor sofra alteração, basta alterar o valor na definição da constante,
não sendo necessário proceder à alteração do valor em todas as utilizações da
variável (o que seria necessário caso utilize o valor directamente nas expressões em
vez da utilização de uma variável de valor constante).
const int = 2;
int const = 2;
#define TRUE 1
#define FALSE 0
Existem ainda as estruturas de dados, que identificam o modo como os dados estão
organizados e como são acedidos e alterados. Como exemplos temos variáveis
simples, arrays, matrizes, listas, filas, árvores, grafos, etc.
48
Figura 20 – Exemplo da estrutura Matriz
ALGORITMIA
49
ALGORITMIA
Operações elementares
variável “a”;
51
ALGORITMIA
Exponenciação ^
Negação ~
Multiplicação *
Divisão /
Divisão inteira DIV
Resto da divisão MOD
Adição +
Subtracção -
Módulo ABS
Para alterar esta hierarquia, utilizar os parenteses. Não esquecer que a hierarquia se
mantém dentro destes. 52
ALGORITMIA
53
ALGORITMIA
tipo de resultado.
55
ALGORITMIA
Variáveis e Expressões
Uma variável define-se como sendo um nome dado a um objecto. Tal objecto pode
ser um número em particular ou uma cadeia de caracteres. Podemos ter variáveis
simples, que se referem a objectos simples, ou variáveis estruturadas, que se
referem a grupos de objectos.
Exemplo de uma variável simples:
Int idade;
Exemplo de uma variável estruturada:
Int [10] nota;
Como já deu para perceber, uma variável é, por definição, uma entidade que assume
diferentes valores em diferentes instantes de tempo.
Não esquecer que é sempre necessário definir o tipo de dados que a variável
assume e que, por vezes, é necessário inicializar a variável (atribuir-lhe um valor
inicial).
As expressões não são mais do que operações executadas sobre dados ou variáveis. 56
Exemplo:
ALGORITMIA
57
ALGORITMIA
Conceito de memória
- Nome
- Endereço
- Valor (conteúdo)
58
ALGORITMIA
Pseudo Código
Começa-se por definir as variáveis com as quais se vai trabalhar e associar o tipo de
dados a cada variável. Podemos ter várias variáveis, cada uma delas com um, e um
só tipo de dados associado.
Tal como já foi visto, a cada tipo de dados estão associadas operações e operadores
que permitem manipular esses mesmos dados.
Exemplo:
Expressões lógicas
N>0 N<100 NOT(N>0) (N>0)AND(N<100) (N>0)OR(N<100)
Se n = 45 V V F V V
Se n =-5 F V V F V
Se n = 105 V F F F V
N>0
(N>0) OR (N<100)
N <= 0
(N<=0) OR (N >=100)
(N<=0) AND (N>=100)
61
ALGORITMIA
63
ALGORITMIA
Gramática de Linguagem
No entanto, uma linguagem natural é muito extensa e complexa, e por isso difícil de
definir na sua totalidade. Ainda não existe nenhuma gramática formal
completamente definida, mas progressos importantes foram feitos.
No caso das linguagens de programação, torna-se mais fácil, pois são linguagens
mais simples e a sua representação segue a mesma análise sintáctica da linguagem
natural.
Como exemplo, temos a linguagem ALGOL-60, a qual foi descrita usando uma
gramática livre do contexto de computação: a notação BNF – Backus Naur Form.
…
<instrução-for> ::= for <cabeçalho-for> <instrução>
<cabeçalho-for> ::= (<expressão>;<condição>;<expressão>)
…
Escola
Pessoa
-Nome
-Idade
-Morada
66
ALGORITMIA
Conceito de abstracção
Um objecto pode ser visto como uma “caixa-negra”, a qual pode ser acedida por
operações, as quais devolvem um resultado. 67
ALGORITMIA
Criar uma instância do objecto significa atribuir valores aos seus atributos. Um
desses atributos terá que constituir a identidade única. Podem ser criadas várias
instâncias de um mesmo objecto.
Exemplo:
Considere-se o objecto Bola.
Este objecto possui os atributos (elementos ou dados):
Tipo de bola (identidade única);
Número de bolas utilizáveis;
Número de bolas danificadas.
Objecto Bola {
Tipo_bola
N_bolas_utilizaveis
N_bolas_danificadas
}
68
funcao Bolas_Danificadas(Bola bolas)
ALGORITMIA
{
...
retorna booleano;
}
Esta função devolve verdadeiro caso existam bolas danificadas e falso caso não
existam.
Criação de objectos do tipo Bola:
Bola futebol = new Bola(Futebol, 3, 0);
Criou-se um objecto do tipo bola, com o nome Futebol, e com a informação de que
existem três bolas utilizáveis e zero bolas danificadas;
Bola Tenis = new Bola(Ténis,4,1);
Criação do objecto tipo bola, com o nome Tenis, , e com a informação de que
existem quatro bolas utilizáveis e uma bola danificada;
69
ALGORITMIA
Utilização de abstracção
Como já foi visto, a descrição de problemas reais inclui um conjunto de detalhes que
podem ser descartados. A melhor abordagem é então a de identificar o problema
de uma forma abstracta.
Tal como já visto, as linguagens mais actuais são orientadas a objectos (C++, Java,
C#). Um objecto representa uma entidade, física ou não. Trata-se de uma
abstracção, conceito já abordado neste manual. Um objecto encontra-se bem
definido e possui um significado válido na aplicação.
Exemplo de um objecto: 70
ALGORITMIA
Objecto Pessoa
nome;
idade;
morada;
Exemplo:
Pessoa Maria;
Pessoa João;
Tanto Maria como João têm um nome, uma idade e uma morada, diferentes entre
si.
71
ALGORITMIA
…
Tentar desenvolver um algoritmo para resolver todos estes aspectos de uma só vez,
é garantia de insucesso.
Começar por desenvolver o algoritmo, em pseudo código (ou outro), para criar os
horários para os professores. Implementar. Se não funcionar, corrigir. Se funcionar,
passar ao objectivo seguinte.
72
ALGORITMIA
Ter sempre em atenção que, por vezes, acrescentar algo novo interfere com o que
já se encontra implementado. Efectuar sempre um plano de testes o mais completo
possível.
73