• Nenhum resultado encontrado

exame1

N/A
N/A
Protected

Academic year: 2021

Share "exame1"

Copied!
8
0
0

Texto

(1)

ATENTAMENTE O SEGUINTE: NORMAS: 1) O exame tem a duração de 150 minutos. 2) O exame é feito SEM CONSULTA. 3) Deve assinalar todas as opções tomadas: no código dos seus programas, todas as  constantes, variáveis, procedimentos ou funções devem ser devidamente explicadas  através de comentário.  4) As respostas,  que embora, sintáctica e semanticamente correctas, se apresentem  pouco estruturadas serão severamente penalizadas, ou não consideradas. 5) As respostas de conteúdo inadequado não serão consideradas. 6) As respostas sem justificação serão fortemente penalizadas. INFORMAÇÕES: 1) Antes de começar a responder, leia todo o enunciado. Verifique se o exemplar está  completo, isto é, se tem 7 páginas numeradas e termina com a palavra ­ FIM ­. 2) No caso de o exemplar que lhe foi distribuído estar incompleto, ou tiver qualquer  falha, dirija­se ao professor vigilante, a fim de resolver o problema. 3) Qualquer aspecto que considere menos claro deverá ser explicado em comentário  no código. A clareza da sua solução, o seu rigor científico e legibilidade constituem  critérios de avaliação de máxima importância. 

4) O   exame   é   constituído   por   quatro   questões   a   primeira   com   quatro   alíneas,   a  segunda com três alíneas, a terceira questão com três alíneas e a quarta questão  com uma alínea. 5) Em caso de dúvida ou omissão resultante do enunciado de exame, a sua  interpretação, quando devidamente explicada e enquadrada nos objectivos de  avaliação da questão em causa, será considerada na avaliação da sua resposta. Bom Trabalho!

(2)

1º Problema (5 Valores)

Considere a classe Pessoa a seguir definida: class Pessoa

{

private:

enum proficiencia {Excelente=4, Bom=3, Razoavel=2, Fraco=1}; std::string nome; // Nome da Pessoa

int sexo; // Sexo da pessoa: 0 corresponde a mulher, 1 a homem std::string* linguas; // Línguas que a pessoa fala

proficiencia *nivel; // Nivel de proficiência em cada uma das línguas int numero; // Numero de línguas que a pessoa fala

public: Pessoa();

Pessoa(std::string onome, int osexo); virtual ~Pessoa();

virtual std::string Nome() const; // Para obter o nome da Pessoa

virtual std::string Lingua(int n) const; /*Para obter a n-ésima língua que a pessoa fala */

virtual int Nivel(int n) const; /* Para obter o nível de proficiência da pessoa com a sua n-ésima língua */

virtual void NovaLingua(std::string x, proficiencia n); /* Registar ou actualiza que a pessoa fala a língua x, com nível n */

virtual int NumLinguas() const;

virtual int Fala(std::string x); /* Devolve o nível com que a pessoa fala a língua x, ou zero, se não falar */

};

a) Implemente os construtores e o destrutor da classe. Espaço de resposta à questão 1a) 

Pessoa: :Pessoa() {}

Pessoa: :Pessoa(std : : s t r i ng onome, int osexo): nome(onome),

sexo(osexo) , numero(0) ,

l inguas(new std: : s t r i ng [10] ) , nivel (new prof i c i enc ia [10] ) {}

Pessoa: :~Pessoa() {

delete [] l inguas; delete [] nivel ; }

(3)

virtual std::string Lingua(int n) const; virtual int Nivel(int n) const;

virtual int NumLinguas() const; Espaço de resposta à questão 1b) 

std: : s t r i ng Pessoa: :L ingua( in t n) const {

return l inguas[n] ; }

int Pessoa: :N ive l ( i n t n) const {

return nivel [n ] ; }

int Pessoa: :NumLinguas() const {

return numero; }

c) Defina o modificador

virtual void NovaLingua(std::string x, proficiencia n); Espaço de resposta à questão 1c) 

void Pessoa: :NovaLingua(std: : s t r i ng x, prof i c i enc ia n) { l inguas[numero]=x; nivel [numero]=n; numero++; } d) Defina o método:

virtual int Fala(std::string x); Espaço de resposta à questão 1d) 

int Pessoa: :Fa la (s td : : s t r i ng x) {

for( in t i=0; i<numero; i++) i f ( l i nguas[ i ]==x)

return nivel [ i ] ; return 0; }

(4)

2º Problema (6 Valores)

Implemente em C++ uma classe  Atleta, derivada de Pessoa, para representar Atletas  Olímpicos. O construtor especifica o objecto da classe de base, a altura em centímetros,  e   o   peso   em   kilos.   Pretende­se   guardar   os   anos   das   olimpíadas   em   que   o   atleta  participou (um elemento do tipo std::vector<int>). A classe oferece selectores Altura (),

Peso () eNumOlimpiadas () para a altura, peso e para indicar o número de olimpíadas em 

que o atleta participou. Inclua o modificador Olimpíada (int ano) para indicar que o  atleta   participou   numa   olimpíada   naquele   ano.   Implemente   também   um   método  booleano   ParticipouOlimpiada   (int   ano),   que   indica   se   o   atleta   participou   numa  olimpíada naquele ano.

a) Implemente a declaração da classe: Espaço de resposta à questão 2a)  class Atleta : publ ic Pessoa { private : f loat peso; int altura ; std: :vector<int> ol impiadas; publ ic : Atleta( ) ;

Atleta(s td : : s t r i ng onome, f loat osexo, in t opeso, f loat aaltura) ;

vir tua l ~Atleta( ) ;

vir tua l f loat Peso() const; vir tua l int Altura( ) const;

vir tua l void Olimpiada( in t ano);

vir tua l bool Part ic ipouOl impiada( in t ano); vir tua l int NumOlimpiadas() const;

};

b) Implemente o construtor, destrutor e selectores da classe. Espaço de resposta à questão 2b) 

Atleta : :A t l e ta ( ) {}

Atleta : :A t l e ta ( s td : : s t r i ng onome, int osexo,f l oa t opeso, in t aaltura) : Pessoa(onome,osexo) , peso(opeso) , altura(aa l tu ra ) {} Atleta : :~At le ta ( ) {}

(5)

return peso; }

int Atleta : :A l tu ra ( ) const {

return altura ; }

int Atleta : :NumOlimpiadas() const {

return ol impiadas.s i ze ( ) ; }

c) Implemente o modificador e o método ParticipouOlimpiada(int ano) Espaço de resposta à questão 2c) 

bool Atleta : :Pa r t i c i pouOl impiada( in t ano) {

for( in t i=0; i<ol impiadas.s i ze ( ) ; i++) i f ( o l impiadas[ i ]==ano) return true; return fa lse ;

}

void Atleta : :O l impiada( in t ano) {

ol impiadas.push_back(ano) ; }

(6)

3º Problema (5 Valores) Considere a classe Pais para representar Países participantes nos jogos Olímpicos, cuja  definição é a seguinte: class Pais { private:

std::string nome; // Nome do Pais Atleta* atletas; // Atletas desse Pais

int** medalhas; /* Número de medalhas ganhas pelo atleta (ouro, prata e bronze) */

int count; // Número de atletas actual public:

Pais();

Pais(std::string onome); virtual ~Pais();

virtual std::string Nome() const; virtual int NumAtletas() const;

virtual void AdicionaAtleta(const Atleta& atl, int ouro, int prata, int bronze); virtual int NumMedalhas(std::string nomeAtleta);

virtual std::string MaisMedalhado(); }; a) Implemente o construtor e o destrutor da classe sabendo que não existe mais de  1000 atletas por Pais, e que o vector de vectores medalhas acompanha o vector  atletas. Sendo assim o atleta na posição i do vector atletas terá as suas medalhas de  ouro em medalhas[i][0], as de prata em medalhas[i][1] e as de bronze em medalhas  de [i][2]. Espaço de resposta à questão 3a)  Pais : : Pa i s ( ) {} Pais : : Pa i s ( s td : : s t r i ng onome): nome(onome), count(0) ,

atle tas (new Atleta[100]) {

medalhas= new int* [100] ; for( in t i=0; i<100; i++) medalhas[ i ]=new int [3] ; }

(7)

delete [] atle tas ;

for ( in t i=0; i<100; i++) delete [] medalhas; }

b) Implemente   o   método   seguinte,   para   adicionar   um   novo   atleta,   e   respectivas  medalhas já conquistadas.

virtual void AdicionaAtleta(const Atleta& atl, int ouro, int prata, int bronze); Espaço de resposta à questão 3b) 

void Pais : :Ad ic ionaAt le ta (const Atleta& atl , int ouro, int prata,

int bronze) {

atle tas [count]= atl ; medalhas[count] [0]=ouro; medalhas[count] [1]=prata; medalhas[count] [2]=bronze; count++; } c) Implemente o método seguinte, para devolver o nome do atleta com maior número  de medalhas conquistadas.

virtual std::string MaisMedalhado(); Espaço de resposta à questão 3c) 

std: : s t r i ng Pais : :MaisMedalhado() {

int index=0; int max=0;

for( in t i=0; i<count; i++) {

int soma=medalhas[ i ] [ 0 ]+medalhas[ i ] [ 1 ]+medalhas[ i ] [ 2 ] ; i f (soma>max) { max=soma; index=i;}

}

return atle tas [ index] .Nome() ; }

(8)

4º Problema (4 Valores)

Considere a classe IntList, estudada no livro da cadeira, para a manipulação de uma  Lista de inteiros ordenados e sem repetições.

class IntList {

struct IntNode {// Classe interna para os nós da lista. int data;

IntNode* ptNext;

IntNode(int n) { data = n; }// Construtor com int n. };

IntNode* ptList; // Apontador para o primeiro nodo. bool find(int v, IntNode *&prev, IntNode *&curr) const; // Inviabilizar a construção por cópia e a afectação. IntList (const IntList&) {} // Construtor por cópia. void operator=(const IntList &) {} // Afectação. public:

IntList();// Iniciar a lista.

~IntList() { removeAll(); } // Destruir todos os nós. bool insert(int val); // Inserir ordenado.

bool remove(int val); // Remover se existir. int removeHead(); // Remover o 1º nodo da lista. bool contain(int val) const; // Testar se existe val. void display() const; // Apresenta os elementos. bool isEmpty() const; // Testar se lista está vazia. void removeAll(); // Remover todos os elementos. }; a) Implemente um método inverter a ordem dos elementos da lista void Invert(); Espaço de resposta à questão 4a)  void IntL i s t : : i n ve r t ( ) {

IntL i s t * l1 = new IntL i s t ( ) ; l1- >ptLis t=NULL;

while(ptL i s t != NULL) {

int valor=removeHead() ;

IntNode* n = new IntNode(valor ) ; n- >ptNext= l1- >ptLis t ; l1- >ptLis t=n; } ptLis t=l1- >ptLis t ; } ­ FIM ­

Referências

Documentos relacionados

· Indicações sobre cuidados médicos urgentes e tratamentos especiais necessários Não existe mais nenhuma informação relevante disponível.. 5 Medidas de combate

Importante: é necessário que as coordenações dos Programas de Pós-Graduação tenham cadastrado no SIGAA as suas linhas de pesquisa, caso contrário, não será possível selecionar

Parece assim que os cardiologistas portugueses têm uma percec¸ão globalmente adequada da utilidade clínica da angio-TC, identificando os doentes que mais beneficiam da

Como ciência que processa dados com o fim de gerar informações de natureza fiscal e gerencial a partir da existência de um patrimônio, a conta- bilidade possui, dentre suas

As atividades a seguir fazem parte de um conjunto de dez tarefas que foram trabalhadas com os sujeitos da pesquisa, alunos de uma turma de 9º ano do ensino

78 Figura 3.27 Padrão de difração de pós obtido para o complexo ácido nalidíxico:Zn através (a) de síntese por solução, em comparação com os difractogramas

class Pessoa { protected: string nome; Data dataNasc; public: Pessoa(string, Data); string getNome() const; Data getDataNasc()const; int getIdade() const; void setNome(string);

ssize_t sendto(int sockfd, const void * buff , size_t nbytes , int flags , const struct sockaddr * to , socklen_t * addrlen );. Retorno: número de bytes lidos ou escritos se OK,