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.
- 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:
- O que vamos construir. Uma sessão real do programa pronto, para você ver aonde vai chegar.
- Antes de começar. As aulas que você precisa ter visto (com links) e a pasta do projeto.
- 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.
- Quando dá errado. Os erros que aparecem de verdade naquele projeto, com a mensagem completa e a correção.
- 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.
| Projeto | O que é | Aulas que ele pratica | Faç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ções | Ní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ência | Ní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, Arquivos | Structs 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 Arquivos | Polimorfismo |
| 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, Arquivos | std::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::format | std::map e Acentos e UTF-8 |
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 (
-ode 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.
| Forma | Como | Quando usar |
|---|---|---|
| Editor do guia | botão Rodar | Para fazer as etapas rapidamente, em qualquer computador ou celular. A entrada vem pronta. |
| Terminal | g++ -std=c++23 -Wall -Wextra arquivo.cpp -o programa e ./programa | Para guardar o projeto, digitar a entrada de verdade e usar arquivos que ficam no seu disco (agenda, estoque, texto). |
| Vários arquivos | g++ … a.cpp b.cpp -o programa | Quando o projeto é dividido em .h e .cpp (banco). |
Como estudar um projeto
- Leia a etapa inteira antes de digitar. Entenda o que muda e por quê.
- 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.
- 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.
- 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.
- Só então vá para a próxima etapa. No fim, tente os desafios sem olhar a solução.
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).
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:
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.