Mudanças entre as edições de "PRG29003: Introdução a C++"
Linha 148: | Linha 148: | ||
[[imagem:PRG2-Jogo-senha.jpg|400px]] | [[imagem:PRG2-Jogo-senha.jpg|400px]] | ||
+ | |||
+ | Um programa para esse jogo poderia usar números no lugar de cores. O programa sortearia inicialmente uma combinação de cores, e em seguida pediria ao jogador para tentar combinações sucessivamente, até que se descubra a combinação correta. A cada tentativa, o programa informaria ao jogador quantas cores estão em posição correta e quantas estão em posição errada. Por exemplo, o jogo poderia interagir com o jogador desta forma: | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | A cada tentativa, digite os códigos de cores separados por espaços: | ||
+ | Cores: valores entre 1 e 8 | ||
+ | |||
+ | Cores: 1 1 2 2 | ||
+ | Cores em posições corretas: 1 | ||
+ | Cores em posições erradas: 0 | ||
+ | |||
+ | Cores: 3 3 2 2 | ||
+ | Cores em posições corretas: 1 | ||
+ | Cores em posições erradas: 0 | ||
+ | |||
+ | Cores: 1 4 3 4 | ||
+ | Cores em posições corretas: 1 | ||
+ | Cores em posições erradas: 1 | ||
+ | |||
+ | Cores: | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | Tente criar um programa para esse jogo ! | ||
== Jogo ''Craps'' == | == Jogo ''Craps'' == |
Edição das 14h19min de 8 de fevereiro de 2018
A linguagem de programação a ser usada se chama C++. Como indica o nome, essa linguagem é uma extensão à linguagem C, de forma a aderir ao paradigma de orientação a objetos. Como esse assunto será visto em profundidade na 4a fase, na disciplina de POO (Programação Orientada a Objetos), faremos um uso mais superficial dessa linguagem. Quer dizer, usaremos algumas de suas construções, mas não nos deteremos em seus aspectos teóricos. O objetivo de usar C++ é introduzir essa linguagem, que será usada em próximas disciplinas.
Mas o que tem de especial a linguagem C++ ? Muita coisa, se comparada à linguagem C. Veja este exemplo sobre string em ambas linguagens:
Linguagem C | Linguagem C++ |
---|---|
#include <stdio.h>
#include <string.h>
int main() {
char nome[32], sobrenome[32];
char nomeCompleto[64];
printf("Nome: ");
scanf("%32s", nome);
printf("Sobrenome: ");
scanf("%32s", sobrenome);
strcpy(nomeCompleto, nome);
strcat(nomeCompleto, " ");
strcat(nomeCompleto, sobrenome);
printf("Nome completo: %s\n", nomeCompleto);
return 0;
}
|
#include <iostream>
#include <string>
using namespace std;
int main() {
string nome, sobrenome, nomeCompleto;
cout << "Nome: ";
cin >> nome;
cout << "Sobrenome: ";
cin >> sobrenome;
nomeCompleto = nome + " " + sobrenome;
cout << "Nome completo: " << nomeCompleto << endl;
}
|
Obs: para compilar o programa C++, grave-o em um arquivo com extensão .cpp ou .cc e compile-o assim (supondo que o arquivo se chame main.cpp):
g++ -std=c++11 -o exemplo main.cpp
Esse exemplo mostra algumas diferenças entre as linguagens:
- strings em C++ são representadas por variáveis do tipo string. Valores string podem ser concatenados com o operador +.
- A leitura de dados do console (entrada padrão) se faz por meio da variável predefinida cin (console input). Essa variável cin funciona como um arquivo somente leitura, e é similar a stdin da biblioteca C padrão. No exemplo, a leitura formatada se faz por meio do operador >> (operador leitura). Outras formas de ler dados serão vistas mais adiante na disciplina.
- A escrita de dados no console (saída padrão) se faz por meio da variável predefinida cout (console output). Essa variável também funciona como um arquivo, porém somente escrita, e é similar a stdout da biblioteca C padrão. A escrita formatada de dados se faz por meio do operador << (operador escrita). Outras formas de escrever dados serão vistas mais adiante.
Esses e outros detalhes diferem entre as linguagens C e C++, mas a principal diferença entre elas reside no paradigma de programação com que foram concebidas. A linguagem C segue o paradigma de programação estruturada, e C++ segue o paradigma de orientação a objetos. Em C++, um programa é pensado como um conjunto de objetos que se relacionam com o objetivo de apresentar a solução imaginada.
Em uma aula posterior teremos um primeiro contato com classes e objetos.
Uso do NetBeans
Na disciplina recomenda-se usar o ambiente integrado de desenvolvimento (IDE - Integrated Development Environment) NetBeans. Esse software auxilia na escrita de programas, pois integra um editor de texto, um gerenciador de projetos, compilador e depurador, além de ajuda on-line e outras facilidades. Os exemplos durante a disciplina serão disponibilizados como projetos do NetBeans, mas não é obrigado utilizá-lo - pode-se trabalhar diretamente com um editor de textos (ex: gedit) e o compilador C++ (g++) e depurador (gdb), porém isso é um pouco mais trabalhoso ...
Para instalar o NetBeans siga estes passos:
- Certifique-se de que possui a máquina virtual Java instalada. Execute este comando em um terminal:
$ java -version java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b16) Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode) $
- Se não tiver o Java instalado, faça o seguinte:
- Faça o download do instalador, escolhendo a versão adequada para o seu Linux (deve ser um arquivo .tar.gz para a versão do seu sistema operacional, se 32 ou 64 bits).
- Descompacte o arquivo do instalador dentro do seu diretório pessoal. Note que deve aparecer uma pasta chamada jre1.8.0.121 (ou algo parecido).
- Inclua esta linha ao arquivo .profile que existe em sua pasta pessoal, substituindo a versão do Java se necessário (use um editor de texto, como o gedit ou pluma):
export PATH=${PATH}:${HOME}/jre1.8.0.121/bin
- Saia da sua conta (encerre a sessão), e em seguida entre novamente.
- Faça o download do instalador do Netbeans:
- Execute o instalador em um terminal de texto. Supondo que o download foi realizado na pasta Download:
$ bash Download/netbeans-8.2-cpp-linux-x64.sh
- Siga as instruções de instalação.
Alguns pequenos programas
Jogos clássicos são um bom exemplo de problemas interessantes e relativamente simples de transformar em programas. A seguir são sugeridos programas para alguns desses jogos.
Jogo da Forca
O jogo da Forca é um jogo em que se tenta adivinhar uma palavra letra a letra. Um jogador escolhe uma palavra, e informa quantas letras ela possui. Outro jogador tenta descobrir a palavra, informando sucessivamente letras que imagina pertencer à palavra. Cada letra que não exista na palavra implica uma penalidade, acrescentando uma parte do corpo à forca, como ilustrado na figura a seguir. Se o corpo na forca ficar completo, o desafiador perde a partida.
Esse jogo pode ser facilmente implementado como um programa. Basicamente ele trata de manipulação de string e caracteres. Sendo assim, implemente esse jogo em linguagem C++.
Um bom ponto de partida é primeiro definir um protótipo que seja o mais simples posśivel, porém que contenha as características essenciais do jogo.
#include <iostream>
#include <string>
using namespace std;
int main() {
string palavra = "abacaxi"; // a palavra a ser descoberta
string incompleta = "_______"; // a parte da palavra que já está revelada
int tentativas = 7; // a quantidade de erros que podem ser cometidos
// abaixo deve-se escrever o algoritmo do jogo ...
}
Um início de implementação do jogo da Forca em C++
Jogo da Senha
O jogo da Senha é um jogo clássico entre dois jogadores. Um jogador escolhe uma senha, composta por uma combinação de quatro peças coloridas, e a esconde usando um pequeno anteparo. O outro jogador deve então tentar descobrir a combinação de peças, limitado por dez tentativas. A cada tentativa, o dono da senha usa uma combinação de peças brancas e pretas para informar ao desafiante quantas peças ele acertou. Cada peça preta informa que uma peça tem a cor certa e está na posição correta. Cada peça branca informa que uma peça com cor certa está em posição errada. Assim, usando raciocínio lógico, o desafiante deve ser capaz de descobrir a combinação correta de peças coloridas. A figura a seguir mostra o tabuleiro desse jogo.
Um programa para esse jogo poderia usar números no lugar de cores. O programa sortearia inicialmente uma combinação de cores, e em seguida pediria ao jogador para tentar combinações sucessivamente, até que se descubra a combinação correta. A cada tentativa, o programa informaria ao jogador quantas cores estão em posição correta e quantas estão em posição errada. Por exemplo, o jogo poderia interagir com o jogador desta forma:
A cada tentativa, digite os códigos de cores separados por espaços:
Cores: valores entre 1 e 8
Cores: 1 1 2 2
Cores em posições corretas: 1
Cores em posições erradas: 0
Cores: 3 3 2 2
Cores em posições corretas: 1
Cores em posições erradas: 0
Cores: 1 4 3 4
Cores em posições corretas: 1
Cores em posições erradas: 1
Cores:
Tente criar um programa para esse jogo !
Jogo Craps
Um jogo de dados popular em cassinos se chama craps. Ele aparece em muitos filmes ambientados em cassinos, e a figura a seguir mostra a mesa do jogo. Nesse jogo se usam dois dados, que devem ser lançados em rodadas. Uma rodada é composta por jogadas sucessivas, sendo dividida em duas etapas: come-out e point. Apostas podem ser feitas com base nas categorias de resultados possíveis.
Uma rodada inicia com uma ou mais jogadas até que se atinja o estado de come-out. Basicamente, os dados devem somar um dentre os valores 4, 5, 6, 8, 9 ou 10 para que se passe à etapa seguinte, chamada point. O valor obtido ao final de come-out é chamado também de point, e o objetivo é repeti-lo na próxima etapa. O jogador lança os dados até obter novamente o point, quando então ganha a rodada, ou aparecer o valor 7, quando a perde.
As apostas são do tipo pass ou dont pass, que é o oposto da primeira. A aposta pass vence se:
- A rodada na etapa point terminar conseguindo-se obter o valor point com os dados
- Durante a etapa come-out, os valores 7 ou 11 aparecerem nos dados.
... e perde se:
- A rodada na etapa point terminar com o valor 7.
- Durante a etapa come-out, os valores 2, 3 ou 12 aparecerem nos dados.
O jogo parece razoavelmente simples. Como seria um programa que o implementasse ?