A Sociedade Brasileira de Computação (SBC) promove, anualmente, a maratona de programação. Nesse evento, competidores de toda a América Latina competem em um desafio onde o raciocínio matemático e a capacidade de trabalhar sob pressão são avaliados a níveis extremos.
Em uma de suas edições, a SBC incluiu um exercício que faz referência ao jogo “Dois ou Um” (também conhecido como “Dois ou Um”, em algumas localidades do país). O jogo funciona como descrito a seguir.
“Cada jogador escolhe um valor entre dois ou um; ao som de um comando (geralmente um dos competidores anuncia em voz alta “Dois ou... Um! ”), todos os participantes mostram o valor escolhido, utilizando uma das mãos: se o valor escolhido foi um, o competidor mostra o dedo indicador estendido; se o valor escolhido foi dois, mostra a mão com exatos dois dedos estendidos. O ganhador é aquele que tiver escolhido um valor diferente de todos os outros; se não há um jogador com valor diferente de todos os outros (por exemplo todos os jogadores escolhem dois, ou um grupo de jogadores escolhe dois e outro grupo escolhe um), não há ganhador. ”
André, Carlos e Pietro são grandes amigos e jogam Dois ou Um a toda hora: para determinar quem será o motorista da rodada, quem vai pagar a conta, etc. Jogam tanto que resolveram fazer um aplicativo de celular para jogar. Como não sabem programar, dividiram as tarefas entre amigos que sabem, inclusive você. Dados os três valores escolhidos por André, Carlos e Pietro, cada valor dois ou um, escreva um algoritmo que determina se há um ganhador, e nesse caso determina quem é o ganhador.
O algoritmo deve receber como entrada, três valores inteiros que serão armazenados nas variáveis A, C e P indicando os valores escolhidos por André, Carlos e Pietro, respectivamente.
O algoritmo deverá produzir uma única saída, imprimindo apenas um caractere. Se o vencedor for André, deve-se imprimir a letra “A”, na tela; se o vencedor for Carlos, é preciso mostrar o caractere “C”, na tela; se Pietro for o ganhador, então deve-se imprimir “P”; por fim, se não houver vencedor, deve-se imprimir um asterisco, “X”, na tela.
Deve-se considerar que o usuário é leigo, e nem sempre irá digitar ou o número dois (2) ou o número um (1). É preciso que o algoritmo trate as entradas que não estiverem dentro do padrão de dois ou um, solicitando ao usuário que insira um novo valor, caso ele não insira um dado válido (número 2 ou número 1). Considere que o usuário tem acesso apenas ao teclado numérico, sendo impossível inserir caracteres alfabéticos, acentos ou qualquer outro dado diferente de números.
Somente após validados os dados informados pelo usuário, o algoritmo deve apresentar o resultado e, consequentemente, quem foi vitorioso, de acordo com a seguinte tabela de exemplos de entradas e saídas:
Caso
de
Teste Entradas Saída Correspondente
A
(André) C
(Carlos) P
(Pietro) Ganhador:
1º 1 1 1 “X”
2º 1 1 2 “P”
3º 1 2 1 “C”
4º 1 2 2 “A”
5º 2 1 1 “A”
6º 2 1 2 “C”
7º 2 2 1 “P”
8º 2 2 2 “X”
Soluções para a tarefa
Resposta:
PORTUGOL
Explicação:
O algoritmo em Portugol abaixo, desenvolvido com o programa PortugolIDE:
- inicia três variáveis (a, c, p) com o valor 0;
- recebe valores para as três variáveis;
- valida os valores, caso não correspondam ao padrões exige um novo valor;
- verifica que ganhou o jogo.
Espero ter ajudado :)
==*==*==*==*==*==*==*==*
inicio
inteiro a <- 0
inteiro c <- 0
inteiro p <- 0
// Valida a entrada de André
enquanto nao (a = 1 ou a = 2) faz
escrever "Pedro! Informe sua jogada: "
ler a
fimenquanto
// Valida a entrada de Carlos
enquanto nao (c = 1 ou c = 2) faz
escrever "Carlos! Informe sua jogada: "
ler c
fimenquanto
// Valida a entrada de Pietro
enquanto nao (p = 1 ou p = 2) faz
escrever "Pietro! Informe sua jogada: "
ler p
fimenquanto
se (a = 2 e c = 1 e p = 1) ou (a = 1 e c = 2 e p = 2) entao
escrever "A"
senao
se (a = 1 e c = 2 e p = 1) ou (a = 2 e c = 1 e p = 2) entao
escrever "C"
senao
se (a = 1 e c = 1 e p = 2) ou (a = 2 e c = 2 e p = 1) entao
escrever "P"
senao
escrever "X"
fimse
fimse
fimse
fim