📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Guia de Linguagens de Programação. Recomendado revisar antes de começar.
v1.0 — Lógica de Programação, Estruturas Condicionais e Sintaxe Comparada
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): Lógica Básica · Condicionais · I/O · 38 Linguagens de Programação
- v2: Estruturas de Repetição & Matrizes Multilinguagem
- v3: Programação Orientada a Objetos Comparada
- v4: Concorrência & Multithreading Comparado
🎓 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.
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.
“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).”
| 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 |
| 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 |
# 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
# 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
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd multilang_imc_38
# 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`
Entrada: Peso = 70.0 kg, Altura = 1.75 m
Saída Esperada: IMC = 22.86 (Peso normal)
O diagrama abaixo sintetiza a organização dos artefatos, contratos e diretrizes arquiteturais na subpasta multilang/:
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
| 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 |
| 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 |
| 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 |
| 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 |
| 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 ✅ |