# #Lógica - A5 - 20/07
##### Aluno: Pedro Ciccone
###### tags: `Logica de Programação`
### Exercícios aula
**1.** Imprima na tela o total de votos até o momento.
```
function processarVotos(votosA, votosB, votosC) {
//Sua resolução aqui
let resultadoTotal = votosA + votosB + votosC;
imprimir(`Atualmente, a votação acumula ${resultadoTotal} votos.`);
};
```
**2.** Imprima na tela o candidato que está ganhando. Em caso de empate pode imprimir o nome de qualquer um deles.
```
function processarVotos(votosA, votosB, votosC) {
//Sua resolução aqui
if (votosA > votosB && votosA > votosC) {
imprimir("O cantidato A está ganhando.");
} else if (votosB > votosA && votosB > votosC) {
imprimir("O candidato B está ganhando.");
} else if (votosC > votosA && votosC > votosB) {
imprimir("O candidato C está ganhando.");
} else {
imprimir("Nesse momento está se produzindo um empate.")
};
};
```
**3.** Imprima na tela o nome do candidato que está ganhando e a quantidade de votos dele.
```
function processarVotos(votosA, votosB, votosC) {
//Sua resolução aqui
if (votosA > votosB && votosA > votosC) {
imprimir(`O candidato A está ganhando com ${votosA} votos.`);
} else if (votosB > votosA && votosB > votosC) {
imprimir(`O candidato B está ganhando com ${votosB} votos.`);
} else if (votosC > votosA && votosC > votosB) {
imprimir(`O candidato C está ganhando com ${votosC} votos.`);
} else {
imprimir("Atualmente, está se produzindo um empate.");
};
};
```
**4.** Imprima na tela o nome do candidato que está ganhando e a porcentagem dos votos totais que ele tem.
```
function processarVotos(votosA, votosB, votosC) {
//Sua resolução aqui
let resultadoTotal = votosA + votosB + votosC;
let porcentagemA = (votosA * 100) / resultadoTotal, porcentagemB = (votosB * 100) / resultadoTotal, porcentagemC = (votosC * 100) / resultadoTotal;
if (votosA > votosB && votosA > votosC) {
imprimir(`O candidato A está ganhando com o ${porcentagemA}% dos votos.`);
} else if (votosB > votosA && votosB > votosC) {
imprimir(`O candidato B está ganhando com o ${porcentagemB}% dos votos.`);
} else if (votosC > votosA && votosC > votosB) {
imprimir(`O candidato C está ganhando com o ${porcentagemC}% dos votos.`);
} else {
imprimir("Atualmente, está se produzindo um empate.");
};
};
```
**5.** Imprima na tela o nome do candidato que está ganhando e se haverá segundo turno (não há segundo turno quando o candidato mais votado tem, pelo menos, 50% dos votos totais + 1 voto).
```
function processarVotos(votosA, votosB, votosC) {
//Sua resolução aqui
let resultadoTotal = votosA + votosB + votosC;
let porcentagemA = (votosA * 100) / resultadoTotal, porcentagemB = (votosB * 100) / resultadoTotal, porcentagemC = (votosC * 100) / resultadoTotal;
if (votosA > votosB && votosA > votosC) {
if (votosA > (resultadoTotal / 2)) {
imprimir(`O candidato A está ganhando com o ${porcentagemA}% dos votos, pelo que não haveria segundo turno.`);
} else {
imprimir(`O candidato A está ganhando com o ${porcentagemA}% dos votos. Até agora, há segundo turno.`);
};
} else if (votosB > votosA && votosB > votosC) {
if (votosB > (resultadoTotal / 2)) {
imprimir(`O candidato B está ganhando com o ${porcentagemB}% dos votos, pelo que não haveria segundo turno.`);
} else {
imprimir(`O candidato B está ganhando com o ${porcentagemB}% dos votos. Até agora, há segundo turno.`);
};
} else if (votosC > votosA && votosC > votosB) {
if (votosC > (resultadoTotal / 2)) {
imprimir(`O candidato A está ganhando com o ${porcentagemC}% dos votos, pelo que não haveria segundo turno.`);
} else {
imprimir(`O candidato A está ganhando com o ${porcentagemC}% dos votos. Até agora, há segundo turno.`);
};
} else {
imprimir("Atualmente, está se produzindo um empate.");
};
};
```
**6.** Imprima na tela o candidato que está ganhando e quantos votos ele tem de vantagem para o segundo colocado. Em caso de empate imprima o nome dos que estão empatados.
```
function processarVotos(votosA, votosB, votosC) {
//Sua resolução aqui
const ranking = [];
if (votosA >= votosB) {
ranking[0] = {
nome: "A",
votos: votosA
};
ranking[1] = {
nome: "B",
votos: votosB
};
} else {
ranking[0] = {
nome: "B",
votos: votosB
};
ranking[1] = {
nome: "A",
votos: votosA
};
};
if (votosC > ranking[0].votos) {
ranking.unshift({
nome: "C",
votos: votosC
});
} else {
if (votosC > ranking[1].votos) {
ranking.push(ranking[1]);
ranking[1] = {
nome: "C",
votos: votosC
};
} else {
ranking.push({
nome: "C",
votos: votosC
});
};
};
const vantagem = ranking[0].votos - ranking[1].votos;
if (vantagem === 0) {
if (ranking[1].votos - ranking[2].votos === 0) {
imprimir("Os três candidatos estão empatados.");
} else {
imprimir(`Os candidatos ${ranking[0].nome} e ${ranking[1].nome} estão empatados no primeiro lugar.`)
};
} else {
if (vantagem === 1) {
imprimir(`O candidato ${ranking[0].nome} está vencendo com ${vantagem} voto de vantagem.`)
} else {
imprimir(`O candidato ${ranking[0].nome} está vencendo com ${vantagem} votos de vantagem.`)
};
};
};
```
**7.** Imprima na tela o candidato que está perdendo e quantos votos ele precisa receber para empatar com o primeiro.
```
function processarVotos(votosA, votosB, votosC) {
//Sua resolução aqui
const ranking = [];
if (votosA >= votosB) {
ranking[0] = {
nome: "A",
votos: votosA
};
ranking[1] = {
nome: "B",
votos: votosB
};
} else {
ranking[0] = {
nome: "B",
votos: votosB
};
ranking[1] = {
nome: "A",
votos: votosA
};
};
if (votosC > ranking[0].votos) {
ranking.unshift({
nome: "C",
votos: votosC
});
} else {
if (votosC > ranking[1].votos) {
ranking.push(ranking[1]);
ranking[1] = {
nome: "C",
votos: votosC
};
} else {
ranking.push({
nome: "C",
votos: votosC
});
};
};
const desvantagem = ranking[0].votos - ranking[2].votos;
if (desvantagem === 0) {
if (ranking[1].votos - ranking[2].votos === 0) {
imprimir("Os três candidatos estão empatados.");
};
} else {
if (desvantagem === 1) {
imprimir(`O candidato ${ranking[2].nome} está perdendo por ${desvantagem} voto.`)
} else {
imprimir(`O candidato ${ranking[2].nome} está perdendo por ${desvantagem} votos.`)
};
};
};
```
**8. DESAFIO EXTRA.** Imprima na tela a quantidade de votos que o candidato que está na segunda posição deveria receber em sequência para alcançar o segundo turno. Dicas:
* Lembre-se de que a cada novo voto recebido por este candidato o total de votos também aumenta.
* A matemática está em dia por aí? Recomendo papel e caneta.
* Cuidado para não imprimir números negativos na tela, pega mal.
```
```
### Exercícios casa
#### Introdução
Num jogo de vôlei de praia, dois times disputam ponto a ponto. O primeiro time a fazer 21 pontos ou mais, desde que tenha 2 pontos de vantagem sobre o adversário, vence o set. Ao vencer um set, um novo se inicia do zero. Vence a partida o time que vencer dois sets primeiro.
Caso cada um dos times vença um set, o jogo vai para o terceiro set. O terceiro set é chamado de tie break, ou set de desempate. Neste set, vence o time que primeiro fizer 15 pontos ou mais, desde que tenha pelo menos 2 pontos de vantagem para o adversário.
Você vai perceber que o placar encontrado no projeto que você baixou não funciona bem. Apesar de ir aumentando a pontuação de cada um dos times, ele não identifica quando um set acabou, nem atualiza a pontuação do set para o time vencedor. Vamos consertá-lo!
#### Exercícios
**1.** Seguindo as regras descritas na introdução, faça com que, no momento adequado, o placar zere a pontuação dos times e aumente em um a pontuação de set do time que venceu o set. Faça isso modificando as variáveis `scoreA`, `scoreB`, `setA`, `setB` quando necessário e depois chamando a função `atualizarPlacar()`, conforme o vídeo explicativo.
**2.** Quando algum time vencer o set, exiba essa informação em informações adicionais, incluindo o nome do time e qual set foi vencido.
**3.** Quando algum time vencer o jogo, exiba essa informação em informações adicionais, incluindo o nome do time que venceu o jogo.
**4.** Toda vez que um time vencer uma partida por 2 sets a 0, exiba a mensagem `Que lavada! O time X venceu por 2 sets a 0`.
**5.** Toda vez que um time está a um ponto de vencer um set, é dito que ele tem um *set-point*. Quando um time tiver um *set-point*, exiba essa informação na tela, incluindo o time que tem o *set-point* e qual set está sendo disputado nesse momento.
**6.** Toda vez que um time está a um ponto de vencer um jogo, é dito que ele tem um *match-point*. Quando um time tiver um *match-point*, exiba essa informação na tela, incluindo o time que tem o *match-point*.
#### Resolução
```
function processarPonto() {
//seu código aqui
if (setA == 1 && setB == 1) {
if (scoreA >= 14 && scoreA - scoreB >= 1) {
infoAdicional = "Match-point para o Time A!"
} else if (scoreB >= 14 && scoreB - scoreA >= 1) {
infoAdicional = "Match-point para o Time B!"
} else {
infoAdicional = "";
}
if (scoreA >= 15 && scoreA - scoreB >= 2) {
setA++;
scoreA = 0;
scoreB = 0;
infoAdicional = "O Time A venceu o jogo!"
} else if (scoreB >= 15 && scoreB - scoreA >= 2) {
setB++;
scoreA = 0;
scoreB = 0;
infoAdicional = "O Time B venceu o jogo!"
} else {
}
} else {
if (scoreA >= 20 && scoreA - scoreB >= 1) {
if (setA === 1) {
infoAdicional = "Match-point para o Time A!"
} else {
infoAdicional = `Set-point para o Time A no ${setA + setB + 1}o set!`;
}
} else if (scoreB >= 20 && scoreB - scoreA >= 1) {
if (setB === 1) {
infoAdicional = "Match-point para o Time B!"
} else {
infoAdicional = `Set-point para o Time B no ${setA + setB + 1}o set!`;
}
} else {
infoAdicional = "";
}
if (scoreA >= 21 && scoreA - scoreB >= 2) {
setA++;
scoreA = 0;
scoreB = 0;
if (setA === 2) {
infoAdicional = "Que lavada! O Time A venceu o jogo por 2 a 0!"
} else {
infoAdicional = `O Time A venceu o ${setA + setB}o set!`;
}
} else if (scoreB >= 21 && scoreB - scoreA >= 2) {
setB++;
scoreA = 0;
scoreB = 0;
if (setB === 2) {
infoAdicional = "Que lavada! O Time B venceu o jogo por 2 a 0!"
} else {
infoAdicional = `O Time B venceu o ${setA + setB}o set!`;
}
} else {
}
}
atualizarPlacar();
};
```