Ir ao conteúdo

Posts recomendados

Postado

Oi, eu quero saber se tem algum codigo que consiga guardar uma instrução quase como uma variável.

Olha:

        if(jogada1 == '3' && jogada2 == '2') //TESOURA VENCE PAPEL.
        cout << "\n\n" << jogador1 << " venceu!";
    else if(jogada1 == '2' && jogada2 == '3')
        cout << "\n\n" << jogador2 << " venceu!";
    else if(jogada1 == '2' && jogada2 == '1') //PAPEL VENCE PEDRA.
        cout << "\n\n" << jogador1 << " venceu!";
    else if(jogada1 == '1' && jogada2 == '2')
        cout << "\n\n" << jogador2 << " venceu!";
    else if(jogada1 == '1' && jogada2 == '3') //PEDRA VENCE TESOURA.
        cout << "\n\n" << jogador1 << " venceu!";
    else if(jogada1 == '3' && jogada2 == '1')
        cout << "\n\n" << jogador2 << " venceu!";

	if(jogada1 == '3' && jogada2 == '2') //TESOURA VENCE PAPEL.
		cout << "\n\n" << jogador1 << " venceu!";
	else if(jogada1 == '2' && jogada2 == '3')
		cout << "\n\n" << jogador2 << " venceu!";
	else if(jogada1 == '2' && jogada2 == '1') //PAPEL VENCE PEDRA.
		cout << "\n\n" << jogador1 << " venceu!";
	else if(jogada1 == '1' && jogada2 == '2')
		cout << "\n\n" << jogador2 << " venceu!";
	else if(jogada1 == '1' && jogada2 == '3') //PEDRA VENCE TESOURA.
		cout << "\n\n" << jogador1 << " venceu!";
	else if(jogada1 == '3' && jogada2 == '1')
		cout << "\n\n" << jogador2 << " venceu!";

 

veja que nas tomadas de decisões só muda o "jogador1" para "jogador2".

então eu fiquei pensando, tem como eu guardar esse comando e depois chama-la?

ex:

      if(jogada1 == '3' && jogada2 == '2')

                       jogador1Vence;

 

ai eu substituiria os cout por jogador1Vence ou jogador2Vence. Sempre que eu chamar esse jogador1Vence ou jogador2Vence ele vai executar o comando cout .... tendeu? tem como fazer isso?


 

 

Postado

@Matheus Marcelino

1 hora atrás, Matheus Marcelino disse:

substituiria os cout por jogador1Vence ou jogador2Vence

Você pode usar define:

#define jogador1Vence cout << "jogador 1 Vence"

#include <iostream>

using namespace std;

int main()
{
    char jogada1 = '3';
    char jogada2 = '2';
    if(jogada1 == '3' && jogada2 == '2')
        jogador1Vence;

    return 0;
}

Para cada ocorrência de jogador1Vence, o compilador substitui esse identificador por cout << "jogador 1 Vence".

Postado
1 hora atrás, Matheus Marcelino disse:

tem como fazer isso?

 

Isso é chamado função...

 

Há 4 maneiras de fazer isso em C++, se eu entendi direito...

 

Esse é um exemplo simples:
 

#include <iostream>
using namespace std;

class Placar
{
public:
	void operator() (string jogador) const
	{   cout << jogador << " venceu! [1]\n";
		return;
	}
	void anuncio(string vencedor) { cout << vencedor << " venceu! [4]\n"; };
};

void anuncio(string vencedor) { cout << vencedor << " venceu! [3]\n"; };

int main()
{
	auto jogador = "Johhny Cash";
	auto o_vencedor = [jogador]() { cout << jogador << " venceu! [2]\n"; };
	Placar vencedor;

	vencedor(jogador); // functor
	o_vencedor(); // lambda
	anuncio(jogador); // free function
	vencedor.anuncio(jogador); // class method
	return 0;
}


Essa é a saída:

 

Johhny Cash venceu! [1]
Johhny Cash venceu! [2]
Johhny Cash venceu! [3]
Johhny Cash venceu! [4]

 

Compare os 4. É isso que quer fazer? Se não entender algum, pergunte pelo número ;) 

Se não era isso :( pergunte de novo de outro modo pra eu ver se posso ajudar

 

Sobre seu programa: essa maneira que usou não é assim eficiente. Você não precisa testar sempre as mesmas coisas. Use uma tabela,

 

Claro, como @Lucca Rodrigues disse, um #define pode ser uma quinta solução, mas é só processamento de texto, substituindo a definição no programa antes de compilar...

 

  • Obrigado 1
Postado
5 horas atrás, Matheus Marcelino disse:

Oi, eu quero saber se tem algum codigo que consiga guardar uma instrução quase como uma variável.

 

Isso pode fazer como eu expliquei, ou usar um #define 

 

5 horas atrás, Matheus Marcelino disse:

veja que nas tomadas de decisões só muda o "jogador1" para "jogador2".

então eu fiquei pensando, tem como eu guardar esse comando e depois chama-la?

 

Agora isso que escreveu é o que se chama de tabela de decisão e se programa ANTES as decisões, e não testa toda vez a mesma coisa para os mesmos resultados.

 

Compare:
 

int main()
{
	string jogador1 = "Jogador 1";
	string jogador2 = "Jogador 2";
	string tabela[3] { "empate", jogador1 + " venceu",	jogador2 + " venceu" };
	const char* mov[3] { "pedra", "papel", "tesoura" };
	char final[3][3] = { {0,2,1 }, {1,0,2}, {2,1,0} };
	for (int um = 0; um < 3; um += 1)
		for (int dois = 0; dois < 3; dois += 1)
			cout << mov[um] << " x " << mov[dois] << ":  "
                << tabela[final[um][dois]] << endl;
	return 0;
}

 

É só uma linha de código. Aqui tem mais porque o programa mostra TODOS os resultados possíveis, para conferir
 

pedra x pedra:  empate
pedra x papel:  Jogador 2 venceu
pedra x tesoura:  Jogador 1 venceu
papel x pedra:  Jogador 1 venceu
papel x papel:  empate
papel x tesoura:  Jogador 2 venceu
tesoura x pedra:  Jogador 2 venceu
tesoura x papel:  Jogador 1 venceu
tesoura x tesoura:  empate

 

mas basta o cout:
 

	cout << mov[um] << " x " << mov[dois] << ":  "
      << tabela[final[um][dois]] << endl;

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!