You are on page 1of 8

Universidade Autnoma de Lisboa Departamento de Cincias e Tecnologias Algoritmos e Estruturas de Dados

Exame 1 poca 17 de Julho de 2009

Departamento de Cincias e Tecnologias Algoritmos e Estruturas de Dados 2008/2009 Exame 1 poca

Data: Sexta-feira, 17 de Julho de 2009

Horrio: 19h00

No abra este Enunciado at ser autorizado(a) pelo(a) Professor(a)


Entretanto, leia por favor as instrues abaixo indicadas antes de iniciar o seu exame.

Instrues: Resolva cada grupo (Grupo A, Grupo B, Grupo C e Grupo D) num caderno de prova separado; A durao total de 2 horas. No ser atribudo tempo extra realizao da prova. Esta prova realiza-se sem consulta; Realize a prova com uma caneta (no so corrigidas as provas realizadas a lpis); No permitido sair da sala durante a realizao da prova; A sua prova ser anulada em caso de fraude ou de tentativa de fraude; Em todas as justificaes pedidas no enunciado seja claro(a) e objectivo(a) limitando-se aos factos essenciais. Respostas demasiado longas sero penalizadas.

Desistncias: S poder sair da sala de exame 45 minutos aps o incio, mesmo em caso de desistncia; Em caso de desistncia, escreva Desisti em cada uma das Folhas da Prova e entregue-as;

A equipa de AED deseja-lhe Boa Sorte na realizao da prova.

1 de 8

Universidade Autnoma de Lisboa Departamento de Cincias e Tecnologias Algoritmos e Estruturas de Dados

Exame 1 poca 17 de Julho de 2009

Grupo A (6 valores)

A.1. Considere a classe Ferias para tratar a informao resultante dum inqurito sobre as preferncias dos destinos de frias dos portugueses, nomeadamente, nmero de dias de frias, ms de frias, se usou ou no o avio. abstract class Ferias { private int dias; private string mes; private bool aviao; public Ferias() { dias = 15; mes = "Agosto"; aviao = false; } public bool Aviao { get { return aviao; } set { aviao = value; } } virtual public void Display() { Console.WriteLine("Dias de ferias : " + dias); Console.WriteLine("Mes de ferias : " + mes); Console.WriteLine("{0} aviao", aviao ? "Usou" : "Nao usou"); } public override string ToString() { return dias + "\t" + mes + "\t" + aviao; } } Caso o destino de frias tenha sido em Portugal, interessa manipular a informao sobre o tipo de alojamento (1 Hotel, 2 Pousada, 3 Casa de Aluguer, 4 Casa prpria). O alojamento por defeito a casa prpria. Reutilizando o cdigo da classe Ferias, desenvolva a classe Nacional, como derivada da classe Ferias, com as seguintes funcionalidades: A.1.1. A.1.2. A.1.3. A.1.4. A.1.5. Atributo(s); - Construtor por defeito; - Propriedade para o atributo tipo de alojamento com as vias set/get; - Mtodo ToString; - Mtodo Display.

2 de 8

Universidade Autnoma de Lisboa Departamento de Cincias e Tecnologias Algoritmos e Estruturas de Dados

Exame 1 poca 17 de Julho de 2009

Resp.: class Nacional : Ferias { // A.1.1. int tipo; // A.1.2. public Nacional() : base() { tipo = 4; } // A.1.3. public int Tipo { get { return tipo; } set { tipo = value; } } // A.1.4. public override string ToString() { return base.ToString() + "\t" + tipo; } // A.1.5. public override void Display() { base.Display(); switch (tipo) { case 1: Console.WriteLine("Hotel"); break; case 2: Console.WriteLine("Pousada"); break; case 3: Console.WriteLine("Casa de aluguer"); break; case 4: Console.WriteLine("Casa propria"); break; } } }

A.2. Escreva a instruo ou conjunto de instrues em C# que permita: A.2.1. Declarar um array genrico para guardar um conjunto de inquritos sobre Ferias; A.2.2. Listar no ecr os destinos de frias nacionais; A.2.3. Gravar o conjunto de inquritos no ficheiro Ferias.txt (use a classe StreamWriter); A.2.4. Obter o nmero total de inquritos do array.

3 de 8

Universidade Autnoma de Lisboa Departamento de Cincias e Tecnologias Algoritmos e Estruturas de Dados

Exame 1 poca 17 de Julho de 2009

Resp.: // A.2.1. List<Ferias> inqueritos = new List<Ferias>(); // A.2.2. foreach (Ferias f in inqueritos) if (f.GetType().Name == "Nacional") f.Display(); // A.2.3. StreamWriter sw = new StreamWriter ("Ferias.txt"); foreach (Ferias f in inqueritos) sw.WriteLine(f); sw.Close(); // A.2.4. Console.WriteLine("Total de inqueritos " + inqueritos.Count);

Grupo B (6 valores)
B.1. (1 valor ) Mostre a evoluo do conjunto de elementos seguintes ao ser ordenado com base no algoritmo de ordenao Merge Sort. { 90, RESPOSTA: { 90, { 90, { 90, 20, 20, 50, 50 , 20, 0, 80, 80, 10 } 10 } indiceMedio = ( 0 + 6 ) /2 = 3 indiceMdio = ( 0 + 3 ) / 2 = 1 indiceMdio = ( 0 + 1 ) /2 = 0 20, 50, 20, 0, 80, 10 }

20 } + { 0, 20 }

20 } + { 50,

{ 90 } + { 20 } { 20, 90 } + { 50, 20 } indiceMedio = ( 2 + 3 ) / 2 = 2

{ 50 } + { 20 } { 20, { 20, 20, 50, 50 } 90 } + { 0, {0, 80, 10 } indiceMedio = ( 4 + 6 ) /2 = 5 indiceMedio = ( 4 + 5 ) / 2 = 4

80 } + { 10 }

{ 0 } + { 80 } { 0, { 0, { 0, 10, 20, 20, 50, 80, 80 } + { 10 } 10, 90 } 80 }

B.2. (3 valores ) Considere o excerto da classe Conjunto que implementa sobre uma coleco genrica e permite manipular um conjunto de elementos (repetidos ou no) guardados numa instncia da classe List<T> (array no ordenado). Relembra-se que a operao Add() permite adicionar elementos ao array de modo sequencial. Com base neste cdigo responda s questes seguintes: class Conjunto<T> { protected List<T> elements; public Conjunto() { elements = new List<T>(); }

4 de 8

Universidade Autnoma de Lisboa Departamento de Cincias e Tecnologias Algoritmos e Estruturas de Dados

Exame 1 poca 17 de Julho de 2009

public void Adicionar(T newElement) elements.Add(newElement); } public void Remover( T value ) { if ( elements.Contains ( value ) ) elements.Remove(value); } public int NumElementos() { return elements.Count; } }

a) Implemente em C# um mtodo que permita identificar o nmero de elementos iguais a um dado valor passado por argumento. RESPOSTA: public int ContaOcorrencias ( T value ) { int soma = 0 ; for ( int i = 0 ; i < elements.Count ; i++ ) if ( elements[i].CompareTo ( value ) == 0 ) soma++ return soma; } b) Considerando apenas o excerto apresentado, declare em C# uma classe que permita manipular um Conjunto de strings que garanta as mesmas funcionalidades apresentadas. RESPOSTA: class ConjuntoStrings : Conjunto<string> { public ConjuntoStrings () : base () { } ~ConjuntoStrings () { } } c) Identifique a ordem de complexidade do mtodo Remover(). RESPOSTA: O mtodo Contains tem O(N) porque na pior das hipteses tem de percorrer os N elementos guardados em elements para determinar que um dado valor no se encontra entre os valores. Por sua vez o mtodo Remove tem O(N) porque na pior das hipteses tem de remover o elemento que se encontra no ndice (depois de tambm o pesquisar) 0 e com isso reorganizar os N elementos do vector elements. Assim sendo, so precisas N operaes para encontrar um elemento e uma vez encontrado podem ser precisas mais N operaes para o remover e reposicionar os restantes elementos do vector, ou seja N+N operaes, o que significa O(N), sendo N o n. de elementos guardados. d) Refira um exemplo de utilizao para esta classe Conjunto. RESPOSTA: Fila de urgncia do hospital. O registo feito sequencialmente mas a remoo pode ocorrer em qualquer ndice porque os doentes so atendidos sem respeitar a ordem de registo. e) Numa frase identifique o comportamento implementado na classe conjunto. RESPOSTA: implementado o comportamento de gesto de um vector de um qualquer tipo de dados em que a insero sempre sequencial e a remoo pode afectar qualquer um dos elementos do vector.

5 de 8

Universidade Autnoma de Lisboa Departamento de Cincias e Tecnologias Algoritmos e Estruturas de Dados

Exame 1 poca 17 de Julho de 2009

B.3. (2 valores) No mbito da unidade AED foram estudadas algumas estruturas de dados, entre as quais a classe SortedArray<T>. a) Numa frase identifique o comportamento implementado na classe referida. RESPOSTA: A classe SortedArray estudada implementa a gesto de vectores sempre ordenados. b) Identifique o algoritmo em que se baseiam as operaes de insero e pesquisa desta classe. RESPOSTA: Em ambos os casos o algoritmo de Pesquisa Binria. Compare o algoritmo identificado na questo anterior com o algoritmo de pesquisa linear, no que diz respeito ordem pela qual se encontram dispostos os elementos do conjunto em que feita a pesquisa e ordem de complexidade das operaes. Realce as vantagens, desvantagens. RESPOSTA: O algoritmo de pesquisa binria permite determinar um valor num conjunto de elementos ordenados e tem complexidade algortmica O(log N). Por sua vez, a pesquisa sequencial ou linear permite pesquisar um valor num conjunto no necessariamente ordenado, pelo que na pior hiptese preciso passar por todos os elementos e concluir que o valor que se procura no se encontra entre os dados e assim sendo, este algoritmo de pesquisa linear tem complexidade O(N). Sendo por isso menos vantajoso pois mais lento.

6 de 8

Universidade Autnoma de Lisboa Departamento de Cincias e Tecnologias Algoritmos e Estruturas de Dados

Exame 1 poca 17 de Julho de 2009

Grupo C (4 valores)
C.1. (1 valor)

Considere a rvore a seguir representada. BST? AVL? Justifique a sua resposta.

Resp: uma BST pois a Sub-rvore direita armazena nmeros maiores que o n. Cada valor de n descencente na subrvore esquerda de n menor do que o valor de n e cada valor de n descencente na sub-rvore direita de n maior do que o valor de n. Melhora a eficincia da busca de contedos. No uma AVL, porque uma rvore diz-se balanceada AVL (Adelson-Velskii e Landis) , sse em todos os ns a diferena entre as alturas das sub-rvores for igual ou inferior a 1. A altura da sub-rvore direita superior a 1 (valor absoluto).
C.2. (1,5 valores) Desenhe, para a seguinte rvore binria, os percursos preorder, inorder e posorder.

Resp.: PREORDER: 61, 13, 90, 5, 34, -3, -1, 132, 12, 24, 31, 45, 3, 24, 23, 6 INORDER: 5, 90, 13, -1, -3, 34, 61, 12, 31, 24, 132, 3, 24, 45, 23, 6 POSTORDER: 5, 90, -1, -3, 34, 13, 31, 24, 12, 24, 3, 6, 23, 45, 132, 61
C.3. (1,5 valores) Desenvolva uma funo em C# que, recebendo como argumentos a raiz duma rvore binria de inteiros e um inteiro, devolve o nmero de elementos da rvore que so mltiplos do inteiro dado.

Resp.: int Nmultiplos(Node A, int X) { if (vazia(A)) return 0; else if (A.data % X == 0) return 1+ Nmultiplos(A.left, X) + Nmultiplos(A.right, X); else return Nmultiplos(A.left, X) + Nmultiplos(A.right, X); }

// N da rvore binria de inteiros public class Node { public int data; public Node left; public Node right; }

7 de 8

Universidade Autnoma de Lisboa Departamento de Cincias e Tecnologias Algoritmos e Estruturas de Dados

Exame 1 poca 17 de Julho de 2009

Grupo D (4 valores) D.1. (1 valor) Explique em que consiste a caracterstica Polimorfismo das Linguagens de POO. Resp.: O polimorfismo a capacidade de mensagens com a mesma designao poderem ser interpretadas de formas diferentes, por diferentes objectos de diferentes classes. Duas ou mais mensagens com a mesma designao (exteriormente idnticas) enviadas a objectos pertencentes a classes diferentes invocam mtodos diferentes que so executados, cada um com o seu cdigo especfico conforme os respectivos objectivos definidos a cumprir.

D.2. (1 valor) Para que serve uma Interface em POO? Resp.: Uma Interface permite especificar um conjunto de mtodos que tm de ser implementados nas classes que os necessitem. Uma classe pode implementar mais do que uma interface. As Interfaced permitem aceder s possibilidades da herana mltipla sem os problemas desta.
D.3. (0,5 valores) Num grafo indique o que o grau de um n ou vrtice e exemplifique a sua utilidade.

Resp.: O grau de um vrtice o nmero de arestas que lhe so incidentes. Permite conhecer a conectividade deste vrtice com os outros. Por exemplo, estando um vrtice a representar um n virio, o seu grau representa o nmero de vias que lhe so incidentes.
D.4. (1,5 valores) Considere o grafo representado pela seguinte matriz de adjacncia: 1 1 2 3 4 0 0 1 0 2 0 0 0 1 3 1 0 0 0 4 0 1 0 0 5 1 0 1 1

5 1 0 1 1 0 Responda: a) Quantos vrtices tem o grafo?

Resp.: 5 vrtices
b) Diga qual a complexidade da operao procurar uma aresta num grafo representado por uma matriz de adjacncia;

Resp.: constate da ordem de 1: O(1)


c) Desenhe o grafo que esta representa.

2 5 1
8 de 8

4 3

You might also like