Aula anterior...
• Formulação do problema
– Salientando a forma como o computador será utilizado
(e.g. ler do teclado ... calcular ... e escrever no écran ...)
• Especificação
– Identificação/caracterização dos dados de entrada
– Identificação/caracterização dos dados de saída
– Identificação do método ou solução para chegar dos
dados de entrada aos de saída
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Aula anterior... (cont.)
• Definição do algoritmo
(aquilo que realmente interessa)
– Usando vocabulário e sintaxe próximas do Pascal
– Decompor o método ou solução que se pretende seguir
numa sequência de passos
• Escrita do Programa
– Se o algoritmo estiver bem definido e detalhado esta
parte poderá resumir-se a uma simples tradução
daquele para Pascal
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Esta Aula ...
• Definição do algoritmo
(continuação)
– Método de decomposição hierárquica utilizando níveis
crescentes de detalhe (abordagem top-down)
– Primeira noção de encapsulamento de operações
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Decomposição hierárquica
Nível 1
nome: asdzxc
begin
passo 1
passo 2
passo 3
end.
nome: passo 1
begin
passo 1.1
passo 1.2
passo 1.3
end
nome: passo 3
begin
passo 3.1
passo 3.2
passo 3.3
passo 3.4
end
Nível 2
nome: passo 2
begin
passo 2.1
passo 2.2
end
...
Nível 3
nome: passo 3.2
begin
passo 3.2.1
passo 3.2.2
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Conversão de distâncias (milhas para quilómetros)
Sua formulação para resolução no computador: Dada uma distância, expressa em
milhas, que é lida do teclado, convertê-la para quilómetros e escrevê-la no écran do
monitor vídeo.
Variável de entrada: MILHAS (distância expressa em milhas)
valor numérico positivo ou nulo
Variável de saída: KILOMETROS (distância expressa em quilómetros)
valor numérico representado com 3 casas decimais
Solução: KILOMETROS = 1.609 * MILHAS
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Conversão de distâncias (milhas para quilómetros)
(Decomposição ao nível 1)
Algoritmo:
nome: Conversão de distâncias (milhas para quilómetros)
begin
leitura com validação de uma distância expressa em milhas (MILHAS);
conversão da distância de milhas para quilómetros (MILHAS, KILOMETROS);
impressão da distância expressa em quilómetros (KILOMETROS)
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Conversão de distâncias (milhas para quilómetros)
(Decomposição ao nível 2)
nome: Leitura com validação de uma distância expressa em milhas
begin
repetir
escrita no écran do monitor vídeo da mensagem ‘Distância em milhas? ‘;
leitura do valor introduzido pelo teclado (MILHAS)
até que MILHAS >= 0.0
end
nome: Conversão da distância de milhas para quilómetros
begin
KILOMETROS = 1.609 * MILHAS
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Conversão de distâncias (milhas para quilómetros)
(Decomposição ao nível 2)
nome: Escrita no écran do monitor vídeo da distância expressa em quilómetros
begin
escrita no écran do monitor vídeo da mensagem ‘Distância em quilómetros é ‘;
escrita no écran do monitor vídeo do valor de KILOMETROS com 3 casas decimais;
mudança de linha
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Conversão de distâncias (milhas para quilómetros)
program conv_dist;
const Km_por_milha= 1.609;
var Km, milhas: real;
begin
repeat
write(‘Escreva uma distância em milhas: ‘);
readln(milhas);
until milhas >= 0.0;
Km:= Km_por_milha * milhas;
writeln(‘A distância em Kilómetros é: ‘,Km:0:3);
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Resolução da equação de 2º grau
Sua formulação para resolução no computador: Dados os parâmetros A, B e C, que
são lidos do teclado, determinar as raízes da equação de 2º grau, Ax2+Bx+C=0, e
escrevê-las no écran do monitor vídeo.
Variáveis de entrada: A, B, C (parâmetros da equação)
A é um valor numérico não nulo, B e C são valores
numéricos quaisquer
Variáveis de saída: X1R, X1I, X2R, X2I (raízes da equação)
valores numéricos representados em notação científica,
com 4 algarismos significativos na mantissa
Solução:
 = B2 - 4  A  C
  0  X1R =
-B+ 
2 A
  0  X1R =
-B
2 A
X1I = 0
X2R =
-B - 
2 A
-
2 A
X2R =
-B
2 A
X1I =
X2I = 0
X2I = -
-
2 A
(raizes reais)
(raizes complexas conjugadas)
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Resolução da equação de 2º grau
Algoritmo:
(Decomposição ao nível 1)
nome: Resolução da equação de 2º grau Ax2+Bx+C = 0
begin
leitura com validação dos coeficientes da equação (A, B, C);
determinação das raízes da equação por aplicação da fórmula resolvente
(A, B, C, X1R, X1I, X2R, X2I);
impressão das raízes (X1R, X1I, X2R, X2I)
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Resolução da equação de 2º grau
(Decomposição ao nível 2)
nome: Leitura com validação dos coeficientes da equação
begin
escrita mais ou menos centrada no écran da mensagem
‘Resolução da equação de 2º grau Ax^2+Bx+C = 0‘;
mudança de linha;
repetir
escrita no écran da mensagem ‘A = ‘;
leitura do valor introduzido pelo teclado (A)
até que A <> 0.0;
escrita no écran da mensagem ‘B = ‘;
leitura do valor introduzido pelo teclado (B);
escrita no écran da mensagem ‘C = ‘;
leitura do valor introduzido pelo teclado (C)
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Resolução da equação de 2º grau
(Decomposição ao nível 2)
nome: Determinação das raízes da equação por aplicação da fórmula resolvente
begin
DELTA := B2 - 4AC;
se DELTA >= 0.0 então
begin (* raízes reais *)
X1R := (-B + (DELTA)) / 2A;
X1I := 0.0;
X2R := (-B - (DELTA)) / 2A;
X2I := 0.0
end
ou então
begin (* raízes complexas conjugadas *)
X1R := -B / 2A;
X1I := (-DELTA) / 2A;
X2R := X1R;
X2I := -X1I
end
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Resolução da equação de 2º grau
nome: Impressão das raízes
(Decomposição ao nível 2)
begin
(* os valores relativos às raízes deverão ser escritos em notação científica, com 4
algarismos significativos na mantissa *)
escrita no écran da mensagem ‘X1 = ‘; (* X1 = (X1R) + i (X1I) *)
seguida do valor de X1R,
seguido da mensagem ‘ + i‘;
seguida do valor de X1I;
mudança de linha;
escrita no écran da mensagem ‘X2 = ‘;
seguida do valor de X2R,
seguido da mensagem ‘ + i‘;
seguida do valor de X2I;
mudança de linha;
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Mudança da roda de um automóvel que tem um pneu furado
Formulação:
Dados um automóvel que tem um pneu furado, uma roda suplente, uma
chave de cruz e um macaco, descrever as operações necessárias à
mudança da roda com o pneu furado.
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Mudança da roda de um automóvel que tem um pneu furado
Algoritmo:
(Decomposição ao nível 1)
nome: Mudança da roda de um automóvel que tem um pneu furado
begin
se há tampão então
tirar o tampão;
soltar as porcas;
posicionar o macaco e levantar o carro;
desapertar e retirar as porcas;
trocar as rodas;
colocar e apertar as porcas;
baixar o carro e retirar o macaco;
dar um aperto forte às porcas;
se há tampão então
colocar o tampão
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Mudança da roda de um automóvel que tem um pneu furado
(Exemplo de decomposição ao nível 2)
nome: Soltar as porcas
begin
para todas as porcas (1 de cada vez) fazer
begin
posicionar a chave de cruz sobre a porca;
repetir
aplicar o binário à chave no sentido do desaperto;
até a chave rodar;
retirar a chave da porca;
end
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Mudança da roda de um automóvel que tem um pneu furado
(Exemplo de decomposição ao nível 2)
nome: Posicionar o macaco e levantar o carro;
begin
enquanto não se encontrar o encaixe do macaco fazer
begin
procurar encaixe;
end
colocar macaco no encaixe;
repetir
rodar uma volta no macaco;
até que roda furada esteja no ar;
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Mudança da roda de um automóvel que tem um pneu furado
(Exemplo de decomposição ao nível 2)
nome: Desapertar e retirar as porcas
begin
para todas as porcas (1 de cada vez) fazer
begin
posicionar a chave de cruz sobre a porca;
repetir
aplicar o binário à chave no sentido do desaperto;
até soltar porca do parafuso;
retirar a chave e a porca;
end
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Programar um Micro-Rato
• Problema: Programar o robot para ir da
posição de partida (P) para a posição de
chegada (C) desviando-se dos obstáculos que
encontrar pelo caminho.
P
Comandos reconhecidos pelo robot (instruções):
Virar à direita/esquerda
Andar em frente/parar
Possui sensores (variáveis de entrada):
de obstáculos (dir/fre/esq/nenhum)
de chegada (dir/fre/esq/baixo)
C
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Programar um Micro-Rato
nome: micro-rato
Nível 1
P
begin
C
enquanto não estiver na Chegada fazer
begin
orientar-se para a chegada
andar em frente
Comandos reconhecidos pelo robot:
se encontra obstáculo
Virar à direita/esquerda
então desviar-se de obstáculo
Andar em frente/parar
end
Possui sensores:
Não existem no
parar
de obstáculos (dir/fre/esq/ne)
vocabulário básico!
end
de chegada (dir/fre/esq/cima)
É necessário prosseguir
a decomposição...
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Programar um Micro-Rato
Nível 2
P
nome: orientar-se para a chegada
C
begin
repetir
se Chegada à direita então
virar à direita
Comandos reconhecidos pelo robot:
ou então
Virar à direita/esquerda
se Chegada à esquerda então
Andar em frente/parar
virar à esquerda
Possui sensores:
até que Chegada em frente
de obstáculos (dir/fre/esq)
end
de chegada (dir/fre/esq/cima)
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Programar um Micro-Rato
Nível 2
nome: desviar-se de obstáculo
begin
repetir
se obstáculo à direita então
virar à esquerda
se obstáculo à esquerda então
virar à direita
se obstáculo em frente então
virar à esquerda
até que nenhum obstáculo
andar em frente
end
P
C
Comandos reconhecidos pelo robot:
Virar à direita/esquerda
Andar em frente/parar
Possui sensores:
de obstáculos (dir/fre/esq)
de chegada (dir/fre/esq/cima)
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
O robot Francisco
Apresentação: O Francisco é um robot formado por uma base móvel, que possibilita a
sua deslocação linear, para a esquerda e para a direita, por uma câmara vídeo, que
lhe permite a detecção rudimentar de objectos, presentes no cenário visualizado, e a
determinação da cor de objectos particulares, e por um braço articulado, terminado
numa pinça, que pode ser usado para pegar em objectos de pequenas dimensões.
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
O robot Francisco
Operações que o Francisco executa:
deslocar-se para a posição (X)
- dada uma coordenada linear de posição, o Francisco acciona o motor da sua base
móvel e desloca-se para a posição indicada;
pegar num objecto
- o Francisco usa a pinça do seu braço articulado para pegar num objecto que ele
detectou no cenário visualizado;
pousar um objecto
- o Francisco move o seu braço articulado para pousar, no centro da área visualizada,
o objecto que segura na pinça;
detecção de objectos
- com a sua câmara vídeo, o Francisco pode determinar se existem ou não objectos
no cenário que visualiza (função booleana);
cor do objecto
- igualmente com a sua câmara vídeo, o Francisco pode ainda determinar a cor do
objecto que segura na pinça (função que devolve o nome de uma cor).
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Separação dos berlindes
Sua formulação: Dados três vasos cilíndricos, A, B, C, colocados sobre uma mesa,
que contêm berlindes de vidro de três cores diferentes, ensinar o Francisco a separálos, de modo a que os berlindes verdes fiquem no vaso A, os berlindes azuis no vaso
B e os berlindes rosa no vaso C.
A
B
C
Variáveis de entrada:
A, B, C
(coordenadas lineares de posição dos vasos A, B, C)
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Separação dos berlindes
Solução: Para resolver o problema, é necessário o recurso a um vaso auxiliar, onde os
berlindes são despejados, antes de se iniciar o processo de separação. A separação,
propriamente dita, vai consistir num processo repetitivo, em que cada berlinde é
retirado do vaso auxiliar e, de acordo com a cor que apresenta, é colocado no vaso
de destino.
A
B
C
A
U
X
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Separação dos berlindes
Algoritmo:
(Decomposição ao nível 1)
nome: Separação dos berlindes
begin
deslocar todos os berlindes do vaso de partida para o vaso de destino (A, AUX);
deslocar todos os berlindes do vaso de partida para o vaso de destino (B, AUX);
deslocar todos os berlindes do vaso de partida para o vaso de destino (C, AUX);
while há berlindes no vaso (AUX) do
retirar um berlinde do vaso e arrumá-lo no vaso de destino correspondente (A, B, C)
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Separação dos berlindes
(Decomposição ao nível 2)
nome: Deslocar todos os berlindes do vaso de partida para o vaso de destino
procedimento
variáveis de entrada: X - vaso de partida
Y - vaso de destino
begin
while há berlindes no vaso (X) do
begin
pegar num objecto;
colocar berlinde no vaso (Y)
end
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Separação dos berlindes
(Decomposição ao nível 2)
nome: Há berlindes no vaso
função booleana
retorna TRUE, se existir pelo menos um berlinde no vaso
FALSE, em caso contrário
variável de entrada: X - vaso em análise
begin
deslocar-se para a posição (X);
TESTE := detecção de objectos;
retornar o valor de TESTE
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Separação dos berlindes
(Decomposição ao nível 2)
nome: Retirar um berlinde do vaso e arrumá-lo no vaso de destino correspondente
begin
pegar num objecto;
COR := cor do objecto;
case COR of
VERDE: colocar berlinde no vaso (A);
AZUL: colocar berlinde no vaso (B);
ROSA: colocar berlinde no vaso (C)
end
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Separação dos berlindes
(Decomposição ao nível 3)
nome: Colocar berlinde no vaso
procedimento
variável de entrada: Y - vaso de destino
begin
deslocar-se para a posição (Y);
pousar um objecto
end
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Separação dos berlindes
Observações
O problema, tal como foi formulado, não tem variáveis de saída, porque o Francisco é
um computador muito especial. Embora, como a generalidade dos computadores e dos
seres humanos, o Francisco processe informação, os resultados por ele obtidos traduzemse em acções concretas.
Contudo, se estivéssemos interessados numa solução que pudesse ser executada num
computador convencional, as três variáveis de entrada anteriores seriam substituídas por
nove variáveis de entrada / saída (variáveis de estado), do tipo N (vaso, cor), relativas ao
n.º de berlindes de cor cor, existentes no vaso vaso.
A intenção expressa de implementar algumas das operações anteriores, através de
mecanismos de encapsulamento de informação, permitiu aumentar o vocabulário do
Francisco. Agora, além das cinco operações base, ele conhece mais três: deslocar todos
os berlindes de um vaso de partida para um vaso de destino, existência de berlindes num
vaso e colocar um berlinde num vaso.
Este mecanismo é extremamente importante, porque permite dar concisão, clareza e
robustez às descrições das soluções de problemas complexos.
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Charada com berlindes
Sua formulação: Considere de novo três vasos cilíndricos, A, B, C, colocados sobre
uma mesa, que contêm berlindes de vidro de duas cores diferentes, rosa e azul, e
procure descobrir em que situação ficam os vasos, após a realização das operações
seguintes:
1) Se o vaso C contiver berlindes, desloque-os todos para o vaso A;
2) Se o vaso A contiver, pelo menos, um berlinde rosa, desloque um berlinde rosa do
vaso A para o vaso C;
3) Se o vaso B contiver, pelo menos, um berlinde azul, desloque um berlinde azul do
vaso B para o vaso A;
4) Se o vaso B, ou o vaso C, contiver berlindes azuis, regresse ao passo 2.
Descreva a seguir uma solução do problema que possa ser realizada pelo Francisco!
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Download

end