Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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
Decomposição hierárquica
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 2 begin
passo 2.1 passo 2.2 end nome:passo 3 begin
passo 3.1 passo 3.2 passo 3.3 passo 3.4
nome:passo 3.2 begin
passo 3.2.1 passo 3.2.2 end
Nível 1 Nível 2
Nível 3
...
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Conversão de distâncias (milhas para quilómetros) 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
Conversão de distâncias (milhas para quilómetros) 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) 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é queMILHAS >= 0.0
end
nome: Conversão da distância de milhas para quilómetros begin
KILOMETROS = 1.609 * MILHAS end
Conversão de distâncias (milhas para quilómetros) 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) 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 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:
∆ ∆ ∆
∆ ∆ ∆
X1R X1I = 0 X2R B X2I = 0 (raizes reais)
X1R X1I = -
X2R B
X2I = - -
(raizes complexas conjugadas)
≥ ⇒
⋅ ⋅
< ⇒
⋅ ⋅ ⋅ ⋅
0 = - B +
2 A = - -
2 A
0 = - B
2 A 2 A = -
2 A 2 A
∆ = B2- 4⋅A⋅C
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Resolução
Resolução da equação de 2º grau 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
Resolução da equação de 2º grau 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 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 ou então end
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 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 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.
Mudança da roda de um automóvel que tem um pneu furado 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ãoentã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 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 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 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
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
C
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)
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Programar um Micro-Rato
nome: micro-rato Nível 1 begin
enquanto não estiver na Chegada fazer begin
orientar-se para a chegada andar em frente
se encontra obstáculo
então desviar-se de obstáculo end
parar end
P
C
Comandos reconhecidos pelo robot:
Virar à direita/esquerda Andar em frente/parar Possui sensores:
de obstáculos (dir/fre/esq/ne) de chegada (dir/fre/esq/cima) Não existem no
vocabulário básico!
É necessário prosseguir a decomposição...
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Programar um Micro-Rato
Nível 2 nome: orientar-se para a chegada begin
repetir
se Chegada à direita então virar à direita
ou então
se Chegada à esquerda então virar à esquerda
até que Chegada 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
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)
O
O robot robot Francisco 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
O robot robot Francisco 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 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.
Variáveis de entrada:
A, B, C (coordenadas lineares de posição dos vasos A, B, C)
A B C
Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
Separação dos berlindes 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
Separação dos berlindes 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 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 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 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;
caseCORof
VERDE: colocar berlinde no vaso (A);
AZUL: colocar berlinde no vaso (B);
ROSA: colocar berlinde no vaso (C) end
end
Separação dos berlindes 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 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 traduzem- se 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 corcor, existentes no vaso vasovaso.
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 vasoe 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 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!