QUESTÃO 1
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”
O algoritmo deve ser escrito em pseudocódigo (portugol) e submetido para correção em formato txt (documento de texto – notepad) ou doc (documento do Microsoft Word). Algoritmos sem indentação terão desconto em pontuação. Serão avaliadas a corretude semântica e sintática, bem como a eficiência do código.
Sociedade Brasileira de Computação. Caderno de Problemas - Maratona de Programação da SBC – ACM ICPC. 2013. Disponível em , acessado em 09/03/2018
Soluções para a tarefa
Resposta:
* O algoritmo em Portugol, testado com o programa VISUALG;
* Inicia três variáveis (a, c, p) de André, Carlos e Pietro, com o valor 0;
* Recebe valores para as três variáveis;
* Valida os valores, caso não correspondam aos padrões, exige um novo valor;
* Verifica quem ganhou o jogo, ou, se ninguém ganhou.
Explicação:
algoritmo "DoisOuUm"
var
a, c, p: inteiro
inicio
Enquanto (a<1) ou (a>2) faca
Escreval("André, 2 ou 1.")
Leia(a)
FimEnquanto
Enquanto (c<1) ou (c>2) faca
Escreval("Carlos, 2 ou 1.")
Leia(c)
FimEnquanto
Enquanto (p<1) ou (p>2) faca
Escreval("Pietro, 2 ou 1.")
Leia(p)
FimEnquanto
LimpaTela
Se(a=1) e (c=1) e (p=1) ou (a=2) e (c=2) e (p=2) entao
Escreval("X")
Senao
Se(a=1) e (c=1) e (p=2) entao
Escreval("P")
Senao
Se(a=1) e (c=2) e (p=1) entao
Escreval("C")
Senao
Se(a=1) e (c=2) e (p=2) entao
Escreval("A")
Senao
Se(a=2) e (c=1) e (p=1) entao
Escreval("A")
Senao
Se(a=2) e (c=1) e (p=2) entao
Escreval("C")
Senao
Se(a=2) e (c=2) e (p=1) entao
Escreval("P")
FimSe
FimSe
FimSe
FimSe
FimSe
FimSe
FimSe
fimalgoritmo