Sunteți pe pagina 1din 3

Mestrado Integrado em Engenharia Informtica e Computao

Algoritmos e Estruturas de Dados


CI 2 21 Outubro 2009
Consulta Condicionada / Durao: 1h30m

PARTE I

Uma locadora ldica especializada em livros e lbuns de msica raros, ou seja, mais antigos do que
um determinado ano de referncia. A locadora tambm mantm uma lista de associados, e permite que
novos scios se registem, desde que tenham mais do que 18 anos. Complete a implementao da
aplicao de acordo com o que pedido:

a) Implemente o construtor da classe Locadora, que automaticamente atribui ao membro-dado


especialidade o ano de 1950. Implemente tambm o membro-funo setEspecialidade, que atribui
locadora um novo ano de referncia. O argumento ano deve ser indicado no formato correcto de
quatro algarismos (aaaa), e no pode ser maior do que o ano actual. Caso isso no se verifique, a
funo deve lanar uma excepo do tipo FormatoAnoInvalido.

b) Implemente para a classe Locadora a sobrecarga do operador +=, que adiciona um novo scio
locadora. A classe Socio dever ser implementada de acordo. Apenas scios com idade superior a
18 anos se podem registar na locadora. No caso de tentativas de registos de pessoas mais novas, a
aplicao dever lanar uma excepo do tipo MenorDeIdade, com a idade da pessoa.

c) Implemente para a classe Locadora o membro-funo addItem, que adiciona no esplio da


locadora um novo livro ou lbum e devolve o nmero de itens existentes no esplio. Caso o ano do
item seja superior ao ano de especialidade da locadora, o item no poder ser adicionado ao esplio
e a funo dever lanar uma excepo do tipo ItemSemInteresse.

d) Implemente os membros-funo printItems e print, da classe Locadora, que imprimem no ecr


todos os itens disponveis e todos os scios registados, respectivamente. Utilize os mtodos j
implementados na hierarquia da classe Item.

e) Implemente a funo template int buscarElemento(const vector<T>&, const T&), que retorna a
posio relativa de um elemento T num dado vector, ou -1 caso no o encontre. Implemente, na
classe Locadora, o membro-funo int idadeSocio(string nome), que utiliza a funo template
buscarElemento para encontrar um elemento na lista de scios com um dado nome, e retorna a
idade do mesmo.

Utilize na soluo do problema os seguintes ficheiros:


locadora.h, com a especificao da classe locadora, scio e outras classes necessrias;
locadora.cpp, com a implementao dos membros-funo e outras funes necessrias ao
problema;
locadoraTeste.cpp, ficheiro de teste.

Nota: poder ser necessrio actualizar o ficheiro de teste para o tratamento adequado de excepes.

1/3
Mestrado Integrado em Engenharia Informtica e Computao

Algoritmos e Estruturas de Dados


CI 2 21 Outubro 2009
Consulta Condicionada / Durao: 1h30m

PARTE II
A responder, em comentrio, no fim do ficheiro locadoraTeste.cpp

f) Sobre a classe genrica Assoc, a seguir definida, correcto dizer:

template <class C1, class C2>


class Assoc {
C1 o1; C2 o2;
public:
Assoc(C1 a1, C2 a2): o1(a1), o2 (a2) {}
C1 getFirst() const {return o1; }
C2 getSecond() const {return o2; }
Assoc<C2,C1> reverse() {return Assoc<C2,C1>(o2, o1);}
};

A) A classe Assoc puramente abstracta, pois est definida para dois tipos genricos de dados.
B) A declarao do tipo Assoc< float, vector<string > > gerar um erro de
compilao.
C) O mtodo Assoc<string, int>::reverse() retorna um tipo de dados abstracto.
D) A classe Assoc<int,int> no pode ser declarada pois os tipos C1 e C2 tm de ser
diferentes.
E) Nenhuma das anteriores.

g) Ao considerar a classe a seguir definida, pode-se afirmar:

class Medicamento {
string nomeComercial;
int prazoValidade; //em meses
public:
Medicamento(string nome, int prazo) {
if (prazo < 0 || prazo > 96) throw PrazoInvalido(prazo);
prazoValidade = prazo;
nomeComercial = nome;
}
void imprime() {cout << nomeComercial << :: << prazoValidade
<< endl;}
};

A) Podem ser construdos objectos da classe Medicamento com nome comercial nulo e prazo de
validade inferior a 96 meses.
B) No construtor da classe Medicamento a primeira linha e a segunda deveriam estar trocadas.
C) Se um medicamento tiver prazo de validade superior a 96 meses construdo o objecto ao
mesmo tempo que emitido um aviso.
D) O uso do throw est incorrecto; deveria ser utilizado try.
E) Nenhuma das anteriores.

2/3
Mestrado Integrado em Engenharia Informtica e Computao

Algoritmos e Estruturas de Dados


CI 2 21 Outubro 2009
Consulta Condicionada / Durao: 1h30m

h) Considere a funo seguinte. Sobre a anlise da sua complexidade correcto afirmar:

int funcao(int v[], int n) {


int *t = new int[n];
int i, j;
for(i = 0; i < n; i++)
if(v[i]>50) for (j = i+1; j < n; j++)
t[j] += v[i];
return v[--i] + t[--j];
}

A) No pior caso, a complexidade temporal O(n2)


B) No melhor caso, a complexidade temporal O(n log n)
C) A complexidade espacial constante, pois no depende do tamanho do vector v
D) A complexidade espacial funo das vezes que as iteraes i e j so executadas
E) Nenhuma das anteriores

i) Sobre o tratamento de excepes em C++, correcto afirmar:


A) Uma funo s poder conter um nico bloco try{ } catch(){}
B) void f() try {/*corpo*/} catch ( ) {/*handler*/} est incorrecto sintacticamente, pois o corpo de
uma funo no pode estar definido num bloco try.
C) throw utilizado para apanhar excepes.
D) Excepes substituem blocos de controlo, como os IF ELSE
E) um mecanismo utilizado para tratar situaes que potencialmente ocasionam falhas e evitar
interrupes abruptas da aplicao, transferindo o controlo para nveis que as possam tratar
adequadamente.

j) Sobre anlise de complexidade de algoritmos, correcto afirmar:


A) A complexidade temporal de um programa ou algoritmo o tempo que o mesmo demora a
executar, medido em milissegundos.
B) A complexidade espacial do algoritmo implementado por uma funo o espao que o mesmo
necessita para armazenar os argumentos passados como referncia.
C) Quanto mais complexo um algoritmo, ento mais eficiente se torna a sua execuo.
D) Na anlise da complexidade temporal, algoritmos de ordem N2 so mais eficientes do que
algoritmos de ordem logN para N muito elevado
E) A complexidade de um algoritmo geralmente estimada para o melhor caso, para o pior caso, e
para o caso mdio.

Sistema de Exames: http://sigex.fe.up.pt


- Entrar com login (feupsig\XXXX) e password do SIFEUP
- Boto SIGEX
Cdigo de acesso: PKS4044 (sala B104)
UUT5171 (sala B213)
QII4357 (sala B301)

3/3

S-ar putea să vă placă și