C++ Projetos

Nas aulas, cada página ensina um assunto. Nos projetos, você junta vários assuntos para construir um programa de verdade, do arquivo vazio até a versão final. É aqui que o que você estudou se encaixa: o cin da aula de entrada conversa com um switch, que chama uma função, que guarda os dados num vector e grava tudo num arquivo.

Você vai aprender
  • Como os seis projetos do guia estão organizados (em etapas pequenas).
  • Que aulas cada projeto pratica e em que ordem fazê-los.
  • Como rodar cada etapa: no editor do guia ou no terminal do seu computador.
  • Como o editor "digita" a entrada dos programas que leem o teclado.
  • O que fazer quando o seu código não bate com o da etapa.

A ideia: construir como um pedreiro, não como um mágico

Ninguém escreve um programa inteiro de uma vez. Um pedreiro não levanta a casa num dia: primeiro a fundação, depois uma parede, confere se está no prumo, depois a outra. Programar é igual. Cada projeto deste guia é dividido em etapas, e cada etapa acrescenta uma coisa nova ao programa da etapa anterior. No fim de toda etapa, o programa compila e roda. Você nunca fica com um monte de código "que ainda não funciona".

Toda página de projeto segue o mesmo roteiro:

  1. O que vamos construir. Uma sessão real do programa pronto, para você ver aonde vai chegar.
  2. Antes de começar. As aulas que você precisa ter visto (com links) e a pasta do projeto.
  3. As etapas. Cada uma mostra o código novo, explica o que mudou, mostra a compilação e a saída reais (com o g++ 15 na máquina da Ana) e termina com uma caixa Experimente em que você faz a etapa.
  4. Quando dá errado. Os erros que aparecem de verdade naquele projeto, com a mensagem completa e a correção.
  5. O código completo e os desafios. A versão final, inteira, e ideias para você continuar sozinho.

Os seis projetos

Os projetos estão em ordem de dificuldade. Os três primeiros usam o Nível 1 e o começo do Nível 2 (funções, structs, arquivos); os três últimos pedem classes, a biblioteca padrão e organização em vários arquivos, do Nível 3.

ProjetoO que éAulas que ele praticaFaça depois de
Calculadora
6 etapas
Calculadora de terminal: lê dois números e a operação, recusa a divisão por zero e o texto no lugar de número, repete até você sair.cin, switch, double, do-while, Validar a Entrada, FunçõesNível 1 + Funções
Jogo de Adivinhação
6 etapas
O computador sorteia um número de 1 a 100 e você tenta adivinhar, com dicas, contagem de tentativas, "jogar de novo" e recorde.if/else if, while, ++, Números Aleatórios, Funções, ReferênciaNível 1 + Funções
Agenda de Contatos
6 etapas
Adiciona, lista, busca (sem diferenciar maiúsculas) e remove contatos, e guarda tudo num arquivo de texto.Structs, vector, getline, Funções de String, Referência, ArquivosStructs e Arquivos
Contas Bancárias (POO)
8 etapas
Contas que depositam e sacam com validação, uma exceção para saldo insuficiente, conta poupança, extrato alinhado e o programa dividido em .h e .cpp.Classes, public e private, Exceções, Herança, Polimorfismo, unique_ptr, std::format, Vários ArquivosPolimorfismo
Controle de Estoque
7 etapas
Os produtos da papelaria da Ana: entradas e saídas, alerta de estoque baixo, relatório ordenado por valor e um arquivo CSV.Structs, std::map, optional, Desestruturação, Lambdas, sort, Texto ↔ Número, Arquivosstd::map e Algoritmos
Analisador de Texto
7 etapas
Lê um arquivo e conta linhas, palavras e caracteres (com acentos!), as palavras mais frequentes e a mais longa, comparando com o wc do Linux.Arquivos, Acentos e UTF-8, std::map, sort, Lambdas, std::formatstd::map e Acentos e UTF-8
Não precisa ter terminado o nível inteiro

A coluna "Faça depois de" é o mínimo. Se alguma etapa usar algo que você ainda não viu, o texto tem o link para a aula. Abra numa aba nova, leia e volte. E não é preciso seguir a ordem da tabela: se você gosta de jogos, comece pela adivinhação.


Onde rodar: duas formas

1. No editor do guia (mais fácil)

Toda etapa tem uma caixa Experimente com o código da etapa anterior. Você edita, clica em Rodar e vê os avisos do compilador e a saída. Se travar, o botão de solução mostra a resposta. Veja como o editor funciona em O Editor do Guia.

Quase todos os projetos leem o teclado. Nas missões, o guia já preenche o que "a pessoa digitaria": é a entrada da missão, descrita no enunciado (por exemplo, "a entrada é 10, /, 4"). Há uma diferença em relação ao terminal: lá, o que você digita aparece na tela depois de cada pergunta. No editor, a entrada já está pronta e não aparece na saída. Por isso as perguntas ficam grudadas:

No terminal (você digita 10 e 5)No editor (entrada da missão: 10 e 5)
Primeiro número: 10
Segundo número: 5
10 + 5 = 15
Primeiro número: Segundo número: 10 + 5 = 15

Experimente agora. Este programa lê um nome, como os projetos fazem o tempo todo. A entrada Ana já vem preenchida:

Missão: depois de ler o nome, mostre Olá, Ana! Vamos programar. usando a variável nome (não escreva "Ana" no código). Se precisar, revise getline e Juntar Strings.

#include <iostream>
#include <string>

int main() {
    std::string nome;
    std::cout << "Seu nome: ";
    std::getline(std::cin, nome);
    // escreva aqui a saudação
}
#include <iostream>
#include <string>

int main() {
    std::string nome;
    std::cout << "Seu nome: ";
    std::getline(std::cin, nome);
    std::cout << "Olá, " << nome << "! Vamos programar.\n";
}

2. No terminal do seu computador (o jeito "de verdade")

Para guardar o seu trabalho, crie uma pasta para cada projeto dentro de ~/cpp, escreva o arquivo num editor (Editores e IDEs mostra as opções) e compile com o comando padrão do guia (veja Compilar com g++). Esta é a máquina da Ana fazendo a primeira etapa da calculadora:

$ mkdir -p cpp/calculadora           « cria a pasta do projeto (e a cpp, se não existir)
$ cd cpp/calculadora
$ ls                                  « vazia, por enquanto
$ ls                                  « a Ana escreveu o arquivo no editor
calculadora.cpp
$ g++ -std=c++23 -Wall -Wextra calculadora.cpp -o calculadora
$ ls
calculadora  calculadora.cpp          « o g++ criou o programa "calculadora"
$ ./calculadora
=== Calculadora da Ana ===
Primeiro número: 7                    « 7 e 3 foram digitados pela Ana
Segundo número: 3
7 + 3 = 10
g++ -std=c++23 -Wall -Wextra
Compila em C++23, com os avisos ligados. Sem o -std=c++23, o g++ 15 usa o C++17 e recursos novos não funcionam (veja Novidades do C++11 ao C++26).
calculadora.cpp
O código-fonte.
-o calculadora
O nome do programa a criar (-o de output, "saída").
./calculadora
Roda o programa que está nesta pasta (./ = "aqui").

Toda vez que mudar o código, compile de novo antes de rodar: o programa calculadora é uma "foto" do código no momento da compilação. Para não esquecer, junte os dois comandos com && ("e, se deu certo, então"): g++ -std=c++23 -Wall -Wextra calculadora.cpp -o calculadora && ./calculadora.

O projeto Contas Bancárias termina dividido em vários arquivos .h e .cpp, compilados juntos; a página mostra o comando, e a aula Compilar Vários Arquivos explica o porquê. Projetos maiores costumam usar Make ou CMake.

FormaComoQuando usar
Editor do guiabotão RodarPara fazer as etapas rapidamente, em qualquer computador ou celular. A entrada vem pronta.
Terminalg++ -std=c++23 -Wall -Wextra arquivo.cpp -o programa e ./programaPara guardar o projeto, digitar a entrada de verdade e usar arquivos que ficam no seu disco (agenda, estoque, texto).
Vários arquivosg++ … a.cpp b.cpp -o programaQuando o projeto é dividido em .h e .cpp (banco).

Como estudar um projeto

  1. Leia a etapa inteira antes de digitar. Entenda o que muda e por quê.
  2. Digite o código, não copie e cole. Parece mais lento, mas é digitando que você erra, lê a mensagem do compilador e aprende a consertar. Os erros mais comuns estão em Mensagens de Erro.
  3. Compile com os avisos ligados e rode depois de cada etapa. Compare com a saída mostrada. Se for diferente, procure a diferença no código antes de seguir.
  4. Mude alguma coisa. Troque uma mensagem, um número, uma condição. Rode de novo. Prever o que vai acontecer e conferir é o melhor exercício que existe.
  5. Só então vá para a próxima etapa. No fim, tente os desafios sem olhar a solução.
"O meu não funciona e o da página funciona"

Quase sempre é um destes: um ; esquecido, uma chave } a mais ou a menos, um #include que faltou, aspas duplas onde deviam ser simples ("+" em vez de '+'), ou o programa antigo rodando porque você não compilou de novo. Leia a primeira linha com error: ela diz o arquivo, a linha e a coluna (calculadora.cpp:12:5: error: …). Veja como ler essas mensagens em Lendo Erros do Compilador. E não ignore os warning: em vários projetos, o aviso é a única pista de um erro de lógica (veja Avisos).

O programa ficou repetindo a mesma linha sem parar

Um laço que lê do teclado e não confere se a leitura deu certo vira um laço infinito quando alguém digita texto no lugar de número. Aperte Ctrl+C para parar o programa. A etapa 5 da Calculadora mostra o problema e a solução, com saídas reais.


Missão: o esqueleto de todo menu

A calculadora, a agenda, o banco e o estoque têm a mesma estrutura: um menu que se repete até a pessoa escolher sair. Monte esse esqueleto agora, e você vai reconhecê-lo em todos os projetos.

Missão: o menu funciona, mas só uma vez. Coloque o trecho que mostra o menu, lê a opção e executa o switch dentro de um while (opcao != 0). A entrada escolhe 1, 2, 7 (inválida) e 0. Veja while e switch se precisar.

#include <iostream>

int main() {
    int opcao = -1;

    std::cout << "\n1. Dizer oi  2. Dizer tchau  0. Sair\n";
    std::cout << "Opção: ";
    if (!(std::cin >> opcao)) {
        opcao = 0;  // a entrada acabou ou não era número: sai
    }
    switch (opcao) {
        case 1: std::cout << "Oi!\n"; break;
        case 2: std::cout << "Tchau!\n"; break;
        case 0: break;
        default: std::cout << "Opção inválida.\n";
    }

    std::cout << "Fim do programa.\n";
}
#include <iostream>

int main() {
    int opcao = -1;

    while (opcao != 0) {
        std::cout << "\n1. Dizer oi  2. Dizer tchau  0. Sair\n";
        std::cout << "Opção: ";
        if (!(std::cin >> opcao)) {
            opcao = 0;  // a entrada acabou ou não era número: sai
        }
        switch (opcao) {
            case 1: std::cout << "Oi!\n"; break;
            case 2: std::cout << "Tchau!\n"; break;
            case 0: break;
            default: std::cout << "Opção inválida.\n";
        }
    }

    std::cout << "Fim do programa.\n";
}

No terminal da Ana, a solução fica assim:

$ g++ -std=c++23 -Wall -Wextra menu.cpp -o menu
$ ./menu

1. Dizer oi  2. Dizer tchau  0. Sair
Opção: 1
Oi!

1. Dizer oi  2. Dizer tchau  0. Sair
Opção: 2
Tchau!

1. Dizer oi  2. Dizer tchau  0. Sair
Opção: 7
Opção inválida.

1. Dizer oi  2. Dizer tchau  0. Sair
Opção: 0
Fim do programa.

Exercícios

1. A Ana terminou a etapa 2 de um projeto, mas o programa não compila. O que ela deve fazer?

2. Na missão, o editor mostrou Primeiro número: Segundo número: 10 + 5 = 15, tudo numa linha. O que aconteceu?

3. Qual projeto pratica classes, herança e exceções?

4. A Ana mudou o código, rodou ./agenda e nada mudou. Qual a causa mais provável?

5. Complete o comando que compila agenda.cpp no padrão do guia e, se deu certo, roda o programa:

g++ -std=c++23 -Wall -Wextra agenda.cpp -o agenda

Resumo

  • Cada projeto é construído em etapas; no fim de cada etapa, o programa compila e roda.
  • Seis projetos, em ordem de dificuldade: Calculadora, Adivinhação, Agenda, Banco, Estoque e Analisador de Texto.
  • No editor do guia, a entrada da missão vem pronta e não aparece na saída; no terminal, você digita.
  • No terminal: g++ -std=c++23 -Wall -Wextra arquivo.cpp -o programa && ./programa, e compile de novo a cada mudança.
  • Leia a etapa, digite, compile, compare a saída, mude algo, e só então siga.

Comece pelo primeiro: Calculadora.