CS50-MCZ

Uma introdução aos empreendimentos intelectuais da Ciência da Computação e da arte da programação.


Plurality


Para este programa, você implementará um programa que realiza uma eleição de pluralidade (plurality election), conforme abaixo.

$ ./plurality Alice Bob Charlie
Number of voters: 4
Vote: Alice
Vote: Bob
Vote: Charlie
Vote: Alice
Alice
      

Contexto

As eleições assumem diversas formas e tamanhos. No Reino Unido, o Primeiro Ministro é oficialmente nomeado pelo monarca, que geralmente escolhe o líder do partido político que obtém a maioria dos assentos na Câmara dos Comuns. Nos Estados Unidos, é utilizado um processo de Colégio Eleitoral multi-etapas, no qual os cidadãos votam em como cada estado deve alocar eleitores que, posteriormente, elegem o Presidente.

Talvez a forma mais simples de realizar uma eleição seja por meio de um método comumente conhecido como "voto majoritário simples" (também conhecido como "primeiro-passo-o-posto" ou "vencedor leva tudo"). No voto majoritário simples, cada eleitor tem direito a votar em um candidato. Ao final da eleição, o candidato que obtiver o maior número de votos é declarado vencedor da eleição.

Começando

Acesse o code.cs50.io, clique na sua janela do terminal e execute cd sozinho. Você deve encontrar que o prompt da sua janela do terminal se assemelha ao abaixo:

$

Em seguida, execute

wget https://cdn.cs50.net/2022/fall/psets/3/plurality.zip

Para baixar um arquivo ZIP chamado plurality.zip em seu codespace.

Em seguida, execute

unzip plurality.zip

para criar uma pasta chamada plurality. Você não precisa mais do arquivo ZIP, então pode executar

rm plurality.zip

e responda com "y" seguido de Enter no prompt para remover o arquivo ZIP que você baixou.

Agora digite

cd plurality

seguido de Enter para mover-se para (ou seja, abrir) esse diretório. Seu prompt agora deve se parecer com o abaixo.

plurality/ $

Se tudo ocorreu com sucesso, você deve executar:

ls

e veja um arquivo chamado plurality.c. Executando code plurality.c deverá abrir o arquivo onde você irá digitar o seu código para este conjunto de problemas. Se não, refaça seus passos e veja se consegue determinar onde errou!

Entendimento

Vamos dar uma olhada no arquivo plurality.c e ler o código de distribuição que foi fornecido.

A linha #define MAX 9 é uma sintaxe usada aqui para significar que MAX é uma constante (igual a 9) que pode ser usada em todo o programa. Aqui, representa o número máximo de candidatos que uma eleição pode ter.

O arquivo, em seguida, define uma struct chamada de candidate. Cada candidate tem dois campos: uma string chamada name representando o nome do candidato e um int chamado votes representando o número de votos que o candidato tem. Em seguida, o arquivo define um array global de candidates, onde cada elemento é em si um candidate.

Agora, dê uma olhada na função main em si. Veja se você consegue encontrar onde o programa define uma variável global candidate_count representando o número de candidatos na eleição, copia argumentos de linha de comando para a matriz candidates e pede ao usuário para digitar o número de eleitores. Em seguida, o programa permite que cada eleitor digite um voto (veja como?), chamando a função vote em cada candidato votado. Finalmente, main faz uma chamada à função print_winner para imprimir o(s) vencedor(es) da eleição.

Se você olhar mais para baixo no arquivo, no entanto, notará que as funções vote e print_winner foram deixadas em branco. Essa parte cabe a você completar!

Especificação

Complete a implementação de plurality.c de tal maneira que o programa simule uma eleição de voto plural.

Você não deve modificar nada mais em plurality.c além das implementações das funções vote e print_winner (e a inclusão de arquivos de cabeçalho adicionais, se desejar).

Uso

Seu programa deve se comportar conforme o exemplo abaixo:

$ ./plurality Alice Bob
Number of voters: 3
Vote: Alice
Vote: Bob
Vote: Alice
Alice
  
$ ./plurality Alice Bob
Number of voters: 3
Vote: Alice
Vote: Charlie
Invalid vote.
Vote: Alice
Alice
  
$ ./plurality Alice Bob Charlie
Number of voters: 5
Vote: Alice
Vote: Charlie
Vote: Bob
Vote: Bob
Vote: Alice
Alice
Bob
  

Testando

Certifique-se de testar seu código para garantir que ele lida com…

Execute o abaixo para avaliar a correção do seu código usando check50. Mas certifique-se de compilar e testar também!

check50 cs50/problems/2023/x/plurality

Execute o código abaixo para avaliar o estilo do seu código usando style50.

style50 plurality.c

Como Submeter

No seu terminal, execute o comando abaixo para submeter o seu trabalho.

submit50 cs50/problems/2023/x/plurality