Spec Sistemas Com Cpp • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 03.1 — Declaração de Variáveis no Escopo do if (if com inicializador)

Contexto: Declaração de Variáveis no Escopo do if (if com inicializador) no contexto de Estruturas Condicionais, constexpr if e Switch Statements.

Requisitos de Execução:

  1. Utilizar if (auto res = calcular(); res > 0) restringindo o escopo da variável ao bloco condicional.

Resultado Esperado

Variável temporária inicializada e testada dentro do escopo do if.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_03_1_SeuNome
  2. Envie na tarefa: Atividade Cap 03 - Estruturas Condicionais, constexpr if e Switch Statements
🔑 Gabarito de Código & Solução Comentada
#include <iostream>

int obter_codigo() { return 200; }

int main() {
    if (int status = obter_codigo(); status == 200) {
        std::cout << "Status OK: " << status << std::endl;
    }
    return 0;
}

🔍 Nível 2: Prática

Problema 03.2 — Avaliação em Tempo de Compilação com if constexpr

Contexto: Avaliação em Tempo de Compilação com if constexpr no contexto de Estruturas Condicionais, constexpr if e Switch Statements.

Requisitos de Execução:

  1. Criar template de função que execute caminhos de código diferentes em tempo de compilação conforme o tipo ser integral ou flutuante.

Resultado Esperado

Código não aplicável descartado em tempo de compilação sem gerar instruções de máquina.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_03_2_SeuNome
  2. Envie na tarefa: Atividade Cap 03 - Estruturas Condicionais, constexpr if e Switch Statements
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <type_traits>

template <typename T>
void processar(T valor) {
    if constexpr (std::is_integral_v<T>) {
        std::cout << "Inteiro processado: " << valor << std::endl;
    } else {
        std::cout << "Ponto flutuante processado: " << valor << std::endl;
    }
}

int main() {
    processar(42);
    processar(3.14);
    return 0;
}

⚡ Nível 3: Integração

Problema 03.3 — Switch com Enum Classes Fortemente Tipadas (Scoped Enums)

Contexto: Switch com Enum Classes Fortemente Tipadas (Scoped Enums) no contexto de Estruturas Condicionais, constexpr if e Switch Statements.

Requisitos de Execução:

  1. Controlar fluxo de estados utilizando enum class Status evitando poluição de namespace global.

Resultado Esperado

Enum class avaliado com cobertura exaustiva no switch.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_03_3_SeuNome
  2. Envie na tarefa: Atividade Cap 03 - Estruturas Condicionais, constexpr if e Switch Statements
🔑 Gabarito de Código & Solução Comentada
#include <iostream>

enum class NivelLog { INFO, AVISO, ERRO };

void logar(NivelLog nivel) {
    switch (nivel) {
        case NivelLog::INFO:  std::cout << "[INFO] Operacao normal\n"; break;
        case NivelLog::AVISO: std::cout << "[AVISO] Atencao requerida\n"; break;
        case NivelLog::ERRO:  std::cout << "[ERRO] Falha critica\n"; break;
    }
}

int main() {
    logar(NivelLog::INFO);
    return 0;
}

🏆 Nível 4: Desafio Corporativo

Problema 03.4 — Funções constexpr e consteval para Cálculos no Momento da Compilação

Contexto: Funções constexpr e consteval para Cálculos no Momento da Compilação no contexto de Estruturas Condicionais, constexpr if e Switch Statements.

Requisitos de Execução:

  1. Criar função consteval int hash_string(const char* str) garantindo que o cálculo ocorra estritamente em tempo de compilação.

Resultado Esperado

Hash calculado pelo compilador com 0 custo de CPU em tempo de execução.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_03_4_SeuNome
  2. Envie na tarefa: Atividade Cap 03 - Estruturas Condicionais, constexpr if e Switch Statements
🔑 Gabarito de Código & Solução Comentada
#include <iostream>

consteval unsigned long long const_hash(const char* str) {
    unsigned long long hash{5381};
    while (*str) hash = ((hash << 5) + hash) + *str++;
    return hash;
}

int main() {
    constexpr auto h = const_hash("SISTEMA_CRITICO");
    std::cout << "Hash pre-computado: " << h << std::endl;
    return 0;
}

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos