Ficha 02 · C++ avançado
Exercício 1 · Custom exception
Cria classe Validacao com método static void verificarIdade(int) que lança IdadeInvalida (custom, deriva de invalid_argument) se idade < 0 ou > 150. Demonstra com 3 casos.
Resposta:
Exercício 2 · 2 threads simples
Cria dois threads que cada um imprime os números de 1 a 5. Usa join() para esperar por ambos.
Resposta:
Exercício 3 · Mutex + contador
Cria 4 threads que cada um incrementa um contador partilhado 10000 vezes. Sem mutex, mostra que o resultado é errático. Com lock_guard, mostra que dá 40000 garantido.
Resposta:
Exercício 4 · async/future
Cria função int fibonacci(int n) recursiva. No main, calcula fibonacci(40) e fibonacci(38) em paralelo usando async. Imprime ambos.
Resposta:
Exercício 5 · Move semantics
Cria classe BigBuffer com unique_ptr<int[]> interno (1 milhão de ints). Mede o tempo de copy vs move (com chrono).
Resposta:
Exercício 6 · CMake básico
Cria projecto meu_app com 3 ficheiros: main.cpp, utils.cpp, utils.h. Escreve CMakeLists.txt que compila tudo com C++20 e warnings. Demonstra build out-of-source.
Resposta:
Exercício 7 · Testes com Catch2
Adiciona ao projecto do exercício 6 testes para somar() usando Catch2 via FetchContent.
Resposta:
Exercício 8 · Mini-projecto integrado
Cria uma aplicação que:
1. Lê palavras de um ficheiro de texto.
2. Em paralelo (com async), conta frequências em metades do ficheiro.
3. Combina resultados.
4. Imprime top 10 palavras mais frequentes.
Resposta: