📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Guia de Linguagens de Programação. Recomendado revisar antes de começar.

⚖️ Calculadora de IMC Multilinguagem (38 Tecnologias)

v1.0 — Lógica de Programação, Estruturas Condicionais e Sintaxe Comparada

Trilha de Especialização Pedagógica — Projeto 1 de 4

🎓 Nível Profissional Simulado: Estagiário / Desenvolvedor Trainee. Um desenvolvedor versátil não fica preso a uma única linguagem: ele domina os conceitos universais de lógica (tipagem, I/O, condicionais encadeadas, ponto flutuante) e consegue transitar rapidamente entre qualquer ecossistema tecnológico.


🎯 Objetivo & Escopo do Projeto

Implementar a Calculadora de Índice de Massa Corporal (IMC) seguindo as tabelas oficiais da Organização Mundial da Saúde (OMS) em 38 linguagens de programação diferentes, garantindo paridade total de regras de negócio, formatação de saída e tratamento de entradas.


🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Clínica Médica de Saúde Preventiva)

“Precisamos de um utilitário de terminal para nossos nutricionistas calcularem o IMC dos pacientes. O programa deve receber o peso em quilos e a altura em metros, calcular $IMC = \frac{peso}{altura^2}$, exibir o valor com 2 casas decimais e categorizar nas faixas: Abaixo do peso (< 18.5), Peso normal (18.5 a 24.9), Sobrepeso (25.0 a 29.9) e Obesidade (>= 30.0).”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

ID Tipo Descrição Origem no Briefing
RF01 Funcional Receber peso ($kg$) e altura ($m$) como números de ponto flutuante. “receber o peso e altura”
RF02 Funcional Calcular $IMC = peso / (altura * altura)$ com precisão decimal. “calcular IMC”
RF03 Funcional Classificar o resultado nas 4 faixas oficiais da OMS. “categorizar nas faixas”
RNF01 Não-Funcional Implementação em 38 linguagens mantendo exatamente o mesmo algoritmo. Matriz Multilinguagem
RNF02 Não-Funcional Saída padronizada no console CLI. Usabilidade CLI

📋 Fase 2 — Backlog & User Stories

ID User Story Prioridade
US01 Como nutricionista, quero digitar peso e altura e ver o IMC calculado com classificação. Alta
US02 Como estudante, quero comparar a sintaxe em C, Java, Go, Rust e Python lado a lado. Alta

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Execução)

# Executar a versão em Python
python python/imc.py

# Compilar e executar a versão em C
gcc c/imc.c -o imc && ./imc

# Executar a versão em Rust
rustc rust/imc.rs && ./imc

🛠️ Fase 4 — Implementação Guiada (Exemplo Python & C)

# python/imc.py
def calcular_imc(peso: float, altura: float) -> tuple[float, str]:
    imc = peso / (altura ** 2)
    if imc < 18.5:
        classificacao = "Abaixo do peso"
    elif imc < 25.0:
        classificacao = "Peso normal"
    elif imc < 30.0:
        classificacao = "Sobrepeso"
    else:
        classificacao = "Obesidade"
    return imc, classificacao


🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd multilang_imc_38

2. Execute a aplicação ou testes

# Executar comandos específicos da tecnologia:
python main.py # ou npm run dev / ./gradlew build

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd catalogo_projetos/multilang_imc_38`

🧭 Decisões de Arquitetura (ADRs)


🧪 Testes de Validação & Troubleshooting

Entrada: Peso = 70.0 kg, Altura = 1.75 m
Saída Esperada: IMC = 22.86 (Peso normal)


🏛️ Arquitetura Visual & Engenharia do Sistema

O diagrama abaixo sintetiza a organização dos artefatos, contratos e diretrizes arquiteturais na subpasta multilang/:

Arquitetura da Aplicação

flowchart TD
    subgraph Especificacao["Especificação & Contratos"]
        E1["Contratos Formais"] --> E2["Modelagem de Domínio"]
    end
    subgraph Implementacao["Implementação & Stacks"]
        I1["Arquiteturas & Código"] --> I2["Paridade Multilinguagem"]
    end
    subgraph Padroes["Governança & Padrões"]
        P1["Living Styleguides"] --> P2["Conformidade de Design"]
    end
    subgraph Homologacao["Qualidade & Homologação"]
        Q1["Matriz de Rastreabilidade"] --> Q2["Checkpoints CP-01..05 PASS"]
    end

    Especificacao --> Implementacao
    Implementacao --> Padroes
    Padroes --> Homologacao

    style Especificacao fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px
    style Implementacao fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px
    style Padroes fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px
    style Homologacao fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px

🎯 Engenharia de Requisitos & Modelagem Formal

👤 User Stories (Histórias de Usuário)

ID Persona História de Usuário Critério de Aceite Prioridade
US-01 Estudante Poliglota Desejo comparar o cálculo de IMC em 38 ecossistemas de programação Implementações completas mantendo rigorosamente a mesma regra da OMS Alta
US-02 Desenvolvedor Backend Desejo comparar linguagens compiladas (C, C++, Rust, Go) e interpretadas (Python, Ruby, JS) Avaliação direta de tipos primitivos, precisão de ponto flutuante e I/O de console Alta
US-03 Arquiteto Web Desejo comparar implementações em frameworks reativos (React, Vue, Svelte, Angular) Cálculo reativo em tempo real via binding bidirecional de inputs Alta
US-04 Professor de Algoritmos Desejo versões em pseudocódigo acadêmico (Portugol, Visualg) Apoio didático para alunos iniciantes em lógica fundamental Média
US-05 Auditor de Qualidade Desejo testes com vetores de teste idênticos em todas as 38 implementações Validação com peso 70kg e altura 1.75m resultando em IMC 22.86 em todas as linguagens Alta

⚙️ Requisitos Funcionais (RF)

ID Descrição do Requisito Criticidade
RF-01 Cálculo de IMC com fórmula oficial peso / (altura * altura) e arredondamento em 2 casas Alta
RF-02 Classificação em 4 faixas da OMS: Abaixo do peso, Normal, Sobrepeso e Obesidade Alta
RF-03 Implementação canônica em 38 tecnologias (CLI, Web e Educacionais) Alta
RF-04 Guia comparativo de sintaxe com tabela de tipos e operadores Média
RF-05 Scripts de execução e verificação automatizada de paridade Média

🛡️ Requisitos Não-Funcionais (RNF)

ID Especificação Arquitetural Criticidade
RNF-01 Paridade determinística absoluta de resultados entre todas as 38 tecnologias Alta
RNF-02 Uso estrito de convenções idiomáticas de cada linguagem (ex: snake_case vs camelCase) Alta
RNF-03 Tratamento de divisão por zero e entradas não numéricas Alta
RNF-04 Estruturação modular por pastas temáticas de tecnologia Alta
RNF-05 Zero dependências externas desnecessárias em cada implementação Média

🔗 Matriz de Rastreabilidade (RTM)

User Story Requisito Funcional Requisito Não-Funcional Módulo / Artefato de Código Status de Homologação
US-01 RF-01 RNF-01, RNF-04 python/imc.py Testado
US-02 RF-02 RNF-01, RNF-02 rust/src/main.rs Testado
US-03 RF-03 RNF-01, RNF-04 svelte/src/App.svelte Testado
US-04 RF-04 RNF-02, RNF-05 portugol/imc.por Testado
US-05 RF-05 RNF-01, RNF-03 tests/test_all_imc.py Testado

🏁 Checkpoints de Qualidade & Homologação

Checkpoint Escopo da Validação Artefato Verificado Status
CP-01 Estruturação de Contratos & Pastas multilang/ PASS ✅
CP-02 Modelagem de Domínio & Schemas Domain Schemas PASS ✅
CP-03 Paridade Técnica & Implementações Multi-stack Code PASS ✅
CP-04 Documentação Viva & Estilo Styleguide & Guides PASS ✅
CP-05 Homologação com RTM & Validações Quality Gate PASS ✅