Mudanças entre as edições de "PRG29003: Introdução a C++"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 103: Linha 103:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
# Siga as instruções de instalação.
 
# 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 ==
 
== Jogo da Forca ==
Linha 136: Linha 140:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
''Um início de implementação do jogo da Forca em C++''
 
''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.
 +
 +
 +
[[imagem:PRG2-Jogo-senha.jpg|400px]]
 +
 +
 +
== Jogo ''Craps'' ==

Edição das 14h12min 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:

  1. 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)
    $
    
  2. 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.
  3. Faça o download do instalador do Netbeans:
  4. 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
    
  5. 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.

Prg2-forca.gif


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.


PRG2-Jogo-senha.jpg


Jogo Craps