Pagota Posted September 20, 2009 at 09:27 AM Report #287900 Posted September 20, 2009 at 09:27 AM 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?
bruno1234 Posted September 20, 2009 at 12:11 PM Report #287909 Posted September 20, 2009 at 12:11 PM Com tanto if encadeado isso é complicadissimo de ler. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos
Pagota Posted September 20, 2009 at 12:13 PM Author Report #287910 Posted September 20, 2009 at 12:13 PM é logo no 1º IF da sequencia. se souberes outra forma de fazer isso sem esses IF encadeados, sou todo de ouvidos ? 😛
bruno1234 Posted September 20, 2009 at 12:40 PM Report #287913 Posted September 20, 2009 at 12:40 PM 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. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos
Pagota Posted September 20, 2009 at 01:24 PM Author Report #287914 Posted September 20, 2009 at 01:24 PM isso diminui-me 1 comparação apenas...xD pois tenho de ver se as outras são iguais ou não na mesma 😄
bruno1234 Posted September 20, 2009 at 03:05 PM Report #287925 Posted September 20, 2009 at 03:05 PM Por isso é q perguntei se em pascal existe switch/case e operador ternário. Assim fazias o código de forma mto simples. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos
Pagota Posted September 20, 2009 at 03:11 PM Author Report #287926 Posted September 20, 2009 at 03:11 PM 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:
bruno1234 Posted September 20, 2009 at 03:14 PM Report #287927 Posted September 20, 2009 at 03:14 PM 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. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos
Pagota Posted September 20, 2009 at 04:02 PM Author Report #287934 Posted September 20, 2009 at 04:02 PM ja tinha pensado nisso, mas assim não demonstro q adquiri as competençias para a prof... isto da-me cabo da
bruno1234 Posted September 20, 2009 at 04:15 PM Report #287935 Posted September 20, 2009 at 04:15 PM 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? Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos
Pagota Posted September 20, 2009 at 08:03 PM Author Report #287967 Posted September 20, 2009 at 08:03 PM Não faço ideia... dai querer ter tudo o + perfeito possivel 😁
pedrosorio Posted September 20, 2009 at 09:51 PM Report #287979 Posted September 20, 2009 at 09:51 PM Não faço ideia... dai querer ter tudo o + perfeito possivel 😁 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. Não respondo a dúvidas por mensagem.
bruno1234 Posted September 21, 2009 at 08:44 PM Report #288055 Posted September 21, 2009 at 08:44 PM E os if's encadeados não é só mau feitio meu, é globalmente considerado uma anti-pattern. Podem ver aqui um exemplo de um código com e sem ifs encadeados: http://www.lostechies.com/blogs/chrismissal/archive/2009/05/27/anti-patterns-and-worst-practices-the-arrowhead-anti-pattern.aspx Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now