Faculdade de Engenharia da Universidade do Porto
Licenciatura em Engenharia Electrotécnica e de Computadores
Algoritmos e Estruturas de Dados, 1998/99

Prova de Avaliação:

Recurso 1998/99, Duração: 2 horas, Com Consulta, 27/7/1999

Pergunta 1, [5 valores]
Considere o seguinte programa em C++:
#include <iostream.h>
class Numbers {
  public:
    Numbers(int max= 5)             // constructor
      { size= max; data = new int[max];
        for (int i=0; i < size; i++) data[i]= fib(i); }
    ~Numbers() { delete [] data; }  // destructor
    const void Output() const 
      { for (int i=0; i < size; i++) cout << data[i] << " "; }
  private:
    int fib(int n) {if (n<=1) return 1; else return fib(n-1) + fib(n-2);}
    int size; int *data;
};
main() {
  Numbers x= Numbers(4);
  x->Output();
  return 0;
};
Averigue se este programa contém erros. Em caso afirmativo identifique-os claramente e corrija-os. Apresente ainda os resultados da execução do programa juntamente com todas as contas que necessitar fazer.

Pergunta 2, [6 valores]
Considere o tipo de dados abstracto LinearList e uma sua implementação, baseada em endereçamento indirecto, através da classe IndirectList, estudados nesta disciplina. Adicione a esta classe uma função-membro Count, que conta e devolve o número de elementos de valor superior ao de um dado valor n passado como parâmetro.

Pergunta 3, [6 valores]
Duas árvores dizem-se semelhantes se têm a mesma "forma", mesmo que os conteúdos dos nós sejam diferentes. Por exemplo:

A semelhança de duas árvores pode-se definir recursivamente da seguinte forma: i) se ambas as árvores são vazias, então são semelhantes; ii) se uma das árvores é vazia e a outra não, então não são semelhantes; iii) se nenhuma das árvores é vazia, são semelhantes se e só se as suas subárvores esquerda e direita são semelhantes. Escreva uma função
similarTree que, dadas duas árvores, devolve true se forem semelhantes ou false, no caso contrário.

Pergunta 4, [3 valores]
Suponha que se pretende escrever um programa em C++ que recebe à entrada as coordenadas x e y de um conjunto de pontos e uma distância de referência d, e produz à saída os mesmos pontos agrupados em "clusters". Um "cluster" é um conjunto de pontos tal que, para cada ponto p desse conjunto, existe outro ponto p’ que dista de p de uma distância igual ou inferior a d. À direita tem um exemplo de um conjunto de pontos com 3 "clusters".

Diga que estruturas de dados e algoritmos estudados nesta disciplina (ou construídos a partir deles), seriam adequados para resolver este problema e apresente uma breve justificação das escolhas efectuadas.
Analise a complexidade temporal do algoritmo que apresentou.


[Página da disciplina] [J. Pascoal Home page] [J. Lopes Home page]
João Pascoal de Faria ([email protected]) / João Correia Lopes (jlopes AT fe.up.pt)
Last modified: Mon Jul 26 20:02:37 1999