Escrevendo aulas
A aula é Markdown comum. Blocos cercados com uma linguagem configurada viram programas; os demais continuam texto. Esta página é um passeio; a referência completa está em Sintaxe e as receitas prontas, em Exemplos.
Blocos de código
```cpp
#include <iostream>
int main() { std::cout << "Olá, turma!\n"; }
```
Linguagens e apelidos que vêm configurados:
| Linguagem | Fence |
|---|---|
| C++ | cpp, c++, cxx, cc |
| C | c |
| Python | python, py, python3 |
Atributos
Entre chaves, depois da linguagem:
```cpp {flags="-O2 -g" timeout=5}
```
flags: flags extras para o compilador, além das da configuração.timeout: tempo limite em segundos para este bloco.
Moldes: o código que se repete
Para não repetir #include, using namespace std e a leitura rápida em todo bloco, declare um molde com nome e use-o só nos blocos que quiser. A linha {code} (pode vir atrás de um comentário: //{code}, # {code}) marca onde entra o bloco:
```cpp template=maratona
#include <bits/stdc++.h>
using namespace std;
//{code}
```
```cpp-maratona
int main() { cout << gcd(12, 18) << "\n"; }
```
- Só usa o molde quem pede por ele:
```cpp-maratona. Um```cppsem nome continua completo. - A aula pode ter vários moldes, de várias linguagens.
- O molde não aparece na página. O bloco mostra o nome do molde e uma faixa discreta, “2 linhas do molde acima”, que abre o trecho esmaecido e só para leitura.
- A numeração das linhas é a do programa inteiro (o bloco acima começa na linha 3), então os erros do compilador batem com o que se vê.
Todas as regras estão em Sintaxe.
Entrada padrão
Há dois jeitos de dar entrada a um programa.
Fixa, junto com a aula
Um bloco stdin logo depois do código (só linhas em branco entre eles):
```cpp
#include <iostream>
int main() { int a, b; std::cin >> a >> b; std::cout << a + b << "\n"; }
```
```stdin
2 40
```
O programa roda com essa entrada, com tempo limite, e stdout e stderr aparecem separados.
Casos de teste e saída esperada
Depois do stdin, um bloco expected diz o que o programa deveria imprimir. Vários pares stdin/expected em sequência viram vários casos: o programa é compilado uma vez e roda em cada um.
```stdin
4 6
```
```expected
12
```
```stdin
3 5
```
```expected
15
```
Cada caso ganha ✓ ou ✗ ao lado da entrada, e o terminal mostra a saída de cada um seguida do veredito, como num juiz: ✗ resposta errada na linha 1: esperado «16», saiu «15». Espaços no fim das linhas e linhas em branco no fim da saída não contam. Um programa que termina com erro (código diferente de zero, sinal, tempo limite) recebe ✗ sem comparar a saída.
Um expected sem stdin antes roda com a entrada vazia. Um stdin sem expected só roda, sem veredito. Entrada e saída esperada também podem ser editadas na página.
Interativa, na hora
Sem bloco stdin, o programa roda num terminal de verdade: a turma digita a entrada no próprio terminal da página. Nesse modo não há tempo limite (o programa pode estar esperando alguém digitar). Use ■ para parar.
O que aparece embaixo
- Erro de compilação: a saída do compilador inteira, colorida.
- Código de saída diferente de zero, sinais (
Segmentation fault), tempo limite e limite de saída aparecem depois da saída do programa. - O tempo de compilação e o de execução ficam na barra do bloco.
Editando durante a aula
O código de cada bloco é editável no navegador. Shift+Enter roda o bloco com o cursor dentro dele. A edição não grava no .md: quando o arquivo muda, só os blocos alterados perdem a edição.