• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Pagota

JOGO PEDRA PAPEL TESOURA [DUVIDA]

13 mensagens neste tópico

Este cofigo que criei está-me a dar um erro estranho:

PROGRAM ppt;
var jogadaA,jogadaB:string;
    num_jogos:integer;
    n:integer;
    
PROCEDURE inicio;
Begin
  writeln ('Bem vindos ao jogo Pedra, Papel e Tesoura!');
  writeln ('Para começar indique o numero de jogos que pretende jogar contra o seu adversário');
  read (num_jogos);
  writeln ('Vamos lá jogar!');
End;

PROCEDURE jogo;
Begin
for n:=1 to num_jogos do
  writeln ('Jogador A: PEDRA - PAPEL - TESOURA?');
  read (jogadaA);
  writeln ('Jogador B: PEDRA - PAPEL - TESOURA?');
  read (jogadaB);
  if jogadaA='PEDRA' and jogadaB='PAPEL'
  then jogadorB:=jogadorB+1
   else
  	if jogadaA='PEDRA' and jogadaB='TESOURA'
  	then jogadorA:=jogadorA+1
  	   else
  		if jogadaA='PEDRA' and jogadaB='PEDRA'
  		then if jogadaA='PAPEL' and jogadaB='PEDRA'
  			then jogadorA:=jogadorA+1
  			   else
  				if jogadaA='PAPEL' and jogadaB='TESOURA'
  				then jogadorB:=jogadorB+1
  				   else
  					if jogadaA='PAPEL' and jogadaB='PAPEL'
  					then if jogadaA='TESOURA' and jogadaB='PEDRA'
  						then jogadorB:=jogadorB+1
  						   else
  							if jogadaA='TESOURA' and jogadaB='PAPEL'
  							then jogadorA:=jogadorA+1
  							   else
  							  	if jogadaA='TESOURA' and jogadaB='TESOURA'
  								then writeln ('Fim do jogo!!! Pontuações:')
  								else
  								writeln ('ERRO!!! Fim do programa!');
End;
BEGIN 
jogadorA:=0;
jogadorB:=0;
textcolor (red);
writeln ('O JOGO FUNCIONA APENAS EM MAIUSCULAS!');
writeln ('CASO NAO JOGUE EM MAIUSCULAS O JOGO TERMINA!');
textcolor (white);
inicio;
jogo;
writeln ('Jogador A: ',jogadorA,' Jogador B: ',jogadorB);
END.

No 1º IF, o compilador, diz que os tipos de operandois na expressão devem ser compativeis, e eles são....

alguem me ajuda?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é logo no 1º IF da sequencia. se souberes outra forma de fazer isso sem esses IF encadeados, sou todo de ouvidos :-[ :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando as jogadas são iguais podes ver se jogadaA = jogadaB, não precisas fazer 3 comparações.

Não conheço pascal, mas se der para usar switch/case e o operador ternário, fica mto mais simples.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso diminui-me 1 comparação apenas...xD pois tenho de ver se as outras são iguais ou não na mesma

:D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por isso é q perguntei se em pascal existe switch/case e operador ternário.

Assim fazias o código de forma mto simples.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

existe o case

case n1 of
1:blabla
2:bleble
etc...

~

mas não posso fazer isso neste programa pois o case não suporta variaves string

STRING

:nono1:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também n precisas, podes definir as variaveis:

1 -> Pedra

2 -> Papel

3 -> Tesoura

Fazes a tradução da string para o inteiro respectivo, e depois já podes usar o case.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja tinha pensado nisso, mas assim não demonstro q adquiri as competençias para a prof... :wallbash: isto da-me cabo da  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como assim?

Na linha de comandos escreves: Pedra

e dentro do teu código traduzes isso para o valor respectivo -> 1.

(Penso q o pascal n tenha enumerados, numa linguagem com enumerados, podias traduzir logo p o enumerado respectivo).

Depois se o valor dos 2 jogadores é o mm, retorna logo empate, caso contrário, switch/case.

Parece-me bem, e com operador ternario (n sei se existe em pascal), ficava mto simples.

Que competencias faltam para agradar á tua professora?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não faço ideia... dai querer ter tudo o + perfeito possivel :cheesygrin:

Associar números às strings para poder usar um switch é uma decisão inteligente, não reduz em nada a demostração de competências adquiridas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora