Você está na página 1de 5

Programação e Desenvolvimento de Software 2

Prova 1

Q1 (4 pts) Q2 (4 pts) Q3 (6 pts) Total (15 pts)

Turma: Matrícula _______________________ ID _________________________

Nome: ___________________________________________________________________

Questão 1: Implemente a seguinte função utilizando std::set.


// Retorna o subconjunto de s cujos elementos são
// divisíveis por k.
set<int> Divisiveis (const set<int>& s, int k) {
set<int> d;
for (auto it = s.begin(); it != s.end() ; it++) {
if((*it) % k == 0) {
d.insert(*it);
}
}
return d;

}
Questão 2: Implemente a seguinte função utilizando std::set.
// Retorna os elementos na interseção de ‘a’ e ‘b’.
set<int> Interseção(const set<int>& a, const set<int>& b) {
set<int> inter={};
if(!(a.empyt()) && !(b.empyt())){
for(auto it=a.begin();it!=a.cend(); it++){
if(a.count(*it)==1 && b.count(*it)==1){
inter.insert(*it);
}
}
}
return inter;

}
Questão 3: Considere o seguinte TAD que representa uma fila de duas pontas. Note que a
classe está implementada utilizando lista encadeada simples. Você deve especificar, na
primeira das questões abaixo, como você quer representar um nó da lista encadeada.

// Implementa uma fila de duas pontas (de números inteiros).


class FilaDupla {
public:

// Constrói uma fila vazia.


FilaDupla();

// Retorna o elemento no início da fila.


int primeiro();

// Retorna o elemento no fim da fila.


int ultimo();

// Retorna o número de elementos na fila.


int tamanho();

// Insere um elemento no início da fila.


void InserirNoInicio(int k);

// Insere um elemento no fim da fila.


void InserirNoFim(int k);

// Remove o elemento no início da fila.


void RemoverPrimeiro();

// Remove o elemento no fim da fila.


void RemoverPrimeiro();

private:
No* primeiro_;
No* ultimo_;
};
Questão 3a: Implemente o método FilaDupla::tamanho(). DICA: Você pode usar (ou
não) funções auxiliares para auxiliar na resolução da questão. Estas funções podem ser
globais, ou métodos privados da classe conjunto.

int FilaDupla::tamanho() {
int n = 0;
for (No* it = primeiro_; it != nullptr; it = it->proximo) {
n++;
}
return n;
}
Questão 3b (4 pts): Implemente o método void FilaDupla::InserirNoFim(int k).

void FilaDupla::InserirNoFim(int k) {
No* novo = new No;
novo->chave = k;
novo->proximo = nullptr;
if (primeiro_ == nullptr) {
primeiro_ = novo;
ultimo_ = novo;
} else {
ultimo_->proximo = novo;
ultimo_ = novo;
}
}

Você também pode gostar