joicyoliv / LP-Lab5

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Laboratório 5

"O objetivo deste exercício é colocar em prática conceitos de containers, iteradores e algoritmos da STL(Standard Template Library) na linguagem de programação C++."

Aluna: Joicy Daliane Silva Oliveira

Professor: Silvio Costa Sampaio

Questão 01

Implemente uma função template closest2mean que receba como parâmetro um intervalo especificado por dois iteradores da categoria InputIterator e retorne um iterador para o elemento nesse intervalo cujo valor é o mais próximo da média do intervalo. Tal função deverá ter obrigatoriamente a seguinte assinatura: template InputIterator closest2mean(InputIterator first, InputIterator last); Um exemplo de utilização dessa função seria conforme mostrado no trecho de código a seguir: #include using std::cout; using std::endl; #include using std::vector; int main() { vector v { 1, 2, 3, 30, 40, 50 }; auto result = closest2mean(v.begin(), v.end()); cout << (*result) << endl; return 0; }

Como a média dos valores inteiros contidos no intervalo considerado (do início ao fim do vetor v) é 21, logo o programa imprime o valor 30 na saída padrão, referindo-se ao elemento mais próximo dessa média. Pesquise e utilize os algoritmos disponíveis na STL a fim de reduzir o seu código ao máximo.

Questão 02

Implemente uma função template print_elements que receba como parâmetros um container qualquer seguido de um label e um separador a serem usados na impressão de todos os elementos do container. Tal função deverá conterá a seguinte assinatura: template void print_elements(const TContainer& collection, const char* label="", const char separator=' '); Um exemplo de utilização dessa função seria conforme mostrado no trecho de código a seguir: #include using std::set; int main() { set numeros; numeros.insert(3); numeros.insert(1); numeros.insert(4); numeros.insert(1); numeros.insert(2); numeros.insert(5); print_elementos(numeros, "Set: "); print_elementos(numeros, "CSV Set: ", ';'); return 0; Um exemplo de execução desse programa seria: $ ./print Set: 1 2 3 4 5 CSV Set: 1;2;3;4;5

Questão 03

Predicado é outro conceito importante e muito empregado na STL. Predicados são funções que retornam um valor booleano e são normalmente usadas em critérios de busca ou ordenação. Um predicado sempre retorna o mesmo resultado para o mesmo valor. Predicados podem ser implementados como funções booleanas ou functors. Fazendo uso de uma functor, implemente um programa que, dado um container de inteiros, encontre o primeiro número primo do conjunto. Utilize esta função para imprimir todos os valores primos no container. Em outras palavras, o programa deverá ler um valor N fornecido como entrada via linha de comando e imprimir todos os valores primos de 1 a N. Você deverá utilizar o algoritmo find_if disponível na STL para encontrar o próximo número primo. Um exemplo de execução do programa seria: $ ./showprimos 50 $ Numeros primos [1-50]: 1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

Questão 04

#include using std::cout; using std::endl; #include using std::back_inserter; #include using std::vector; #include using std::transform; int square(int val) { return val * val; } int main(int argc, char* argv[]) { vector col; vector col2; for (int i = 1; i <= 9; ++i) { col.push_back(i); } transform(col.begin(), col.end(), back_inserter(col2), square); for (vector::iterator it = col2.begin(); it != col2.end(); ++it) { cout << (*it) << " "; } cout << endl; return 0; }

Compilação

Clone este repositório. Para a compilação da questão entre no diretório da questão utilize o comando 'make' no terminal do Linux.

Executar os programas

O programa da Questão 01 - ./bin/proximo

O programa da Questão 02 - ./bin/separador

O programa da Questão 03 - ./bin/primo

O programa da Questão 04 - g++ -Wall -pedantic -std=c++11 -o teste

main.cpp ./teste

OBS: A Resposta da questão 04 está nos comentários da main.cpp

About


Languages

Language:C++ 67.8%Language:Makefile 32.2%