340 likes | 491 Views
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
E N D
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 Aula anterior... Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 Aula anterior... (cont.) Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 Esta Aula ... Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
nome: asdzxc begin passo 1 passo 2 passo 3 end. Decomposição hierárquica Nível 2 Nível 1 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 Nível 3 nome: passo 3.2 begin passo 3.2.1 passo 3.2.2 end nome: passo 3 begin passo 3.1 passo 3.2 passo 3.3 passo 3.4 end Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 Conversão de distâncias (milhas para quilómetros) Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
(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 Conversão de distâncias (milhas para quilómetros) Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
(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 Conversão de distâncias (milhas para quilómetros) 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
(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 Conversão de distâncias (milhas para quilómetros) Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 Conversão de distâncias (milhas para quilómetros) Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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: Resolução da equação de 2º grau Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
(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 Resolução da equação de 2º grau Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
(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 Resolução da equação de 2º grau Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 Resolução da equação de 2º grau Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 Mudança da roda de um automóvel que tem um pneu furado Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
(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 Mudança da roda de um automóvel que tem um pneu furado Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
(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 Mudança da roda de um automóvel que tem um pneu furado Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
(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 Mudança da roda de um automóvel que tem um pneu furado Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 Programar um Micro-Rato 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
nome: micro-ratoNí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 Não existem no vocabulário básico! É necessário prosseguir a decomposição... Programar um Micro-Rato 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) Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 Programar um Micro-Rato 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
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 Programar um Micro-Rato 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
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. O robot Francisco Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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). O robot Francisco Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 Separação dos berlindes Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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. AUX A B C Separação dos berlindes Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 Separação dos berlindes Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
(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 Separação dos berlindes Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
(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 Separação dos berlindes Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
(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 Separação dos berlindes Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
(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 Separação dos berlindes Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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 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. Separação dos berlindes Departamento de Electrónica e Telecomunicações - Universidade de Aveiro
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! Charada com berlindes Departamento de Electrónica e Telecomunicações - Universidade de Aveiro