CS50 : S3 | 다원화

12349 단어 braziliandevsc

복수



Retornando com os desafios do CS50x(온라인 버전), seguimos para a semana 3.

Neste desafio, é pedido que completemos duas funções, sendo estas funçãovote 및 funçãoprint_winner

Função 투표



Ao baixarmos os arquivos, temos a função desta maneira:

// Update vote totals given a new vote
bool vote(string name)
{
    // TODO
    return false;
}


  • vote recebe apenas um argumento do tipo string ,presentando o nome do candidato.
  • Se o nome for o mesmo de um dos candidatos na eleição, então seu valor de número de votos será incrementado com um novo voto. Assim, a função retornará true para indicar que o voto teve sucesso.

  • Aqui, temos que nos atentar a estrutura já criada pelo código que baixamos, temos este struct que define que cada candidato, terá um name e um votes , sendo estes caractéristicas desta estrutura da dados.

    // Candidates have name and vote count
    typedef struct
    {
        string name;
        int votes;
    }
    candidate;
    


    E analisando o código, também temos essa Importante informação, indicando que teremos um vetor (array) com o nome de candidates do tipo candidate , ou seja, caso seja criado um vetor com três (3) espaços, cada espaço deste tipo de dado, terá uma estrutura envolvendo um name e um vote 특정 de cada candidato.

    // Array of candidates
    candidate candidates[MAX];
    




    Então teremos que percorrer essa lista, e procurar se para cada candidato há uma "match"com o nome inserido para a votação.

    for(int i = 0; i < candidate_count; i++) {
            if(strcmp(name, candidates[i].name) == 0) {
                candidates[i].votes += 1;
                return true;
            }
        }
    


  • Percorremos essa lista do index inicial(lembrando que é baseado no número 0 como posição inicial), até ao número de candidatos existentes.
  • Em C, precisamos utilizar desta função strcmp() para comparer valores de strings . Igualamos a zero, pois a documentação nos diz que:

  • This function returns
    
        an int less than 0 if s1 comes before s2,
        0 if s1 is the same as s2,
        an int greater than 0 if s1 comes after s2.
    


    Então se o name for igual ao candidates[i].name retornará o valor zero (0).
  • Encontrando, incrementa-se o valor do candidato em 1.
  • 레토르네 true
  • Se o name não der match com o nome de nenhum candidato na eleição, então valor total de votos não se altera, ea função retorna false para indicar que o voto não foi computado.

  • Temos então, funçãovote 최종.

    // Update vote totals given a new vote
    bool vote(string name)
    {
        for(int i = 0; i < candidate_count; i++) {
            if(strcmp(name, candidates[i].name) == 0) {
                candidates[i].votes += 1;
                return true;
            }
        }
        return false;
    }
    


    Função print_winner


  • A função deve retornar o nome do candidato com o maior número de votos, e então imprimir uma nova linha.

  • Primeira vamos procurar o número total de votos que existe nesse vetor 후보자. E vamos utilizar do loop e criar uma variável para armazenar o maior valor total de votos que existe entre os candidatos.

    // Print the winner (or winners) of the election
    void print_winner(void)
    {
        int max_votes = 0;
        for(int i = 0; i < candidate_count; i++) {
            if(candidates[i].votes > max_votes) {
                max_votes = candidates[i].votes;
            }
        }
    }
    


  • Criei uma várivel do tipo int para registrar o maior número de votos existente entre os candidatos.
  • Percorro a lista de candidatos e comparo cada o número de votes de cada candidato ao valor da minha variável.
  • Se o valor de votos do candidato seja maior que da minha variável original, então o número de votos do candidato é atribuído a variávelmax_votes .
  • É possível que uma eleição termine em empate, onde múltiplos candidatos possuem o mesmo número de votos. Neste caso, imprima o nome de cada candidato em linhas separadas.

  • Aqui, optei por percorrer de novo a lista e agora, comparar quais candidatos possuem o mesmo número de votos da variávelmax_votes . Desta maneira, seja um ou multiplos candidatos, semper será imprimido em tela aqueles que tiverem a mesma quantidade de votos que a variável preenchida anteriormente.

    // Print the winner (or winners) of the election
    void print_winner(void)
    {
        int max_votes = 0;
        for(int i = 0; i < candidate_count; i++) {
            if(candidates[i].votes > max_votes) {
                max_votes = candidates[i].votes;
            }
        }
    
        for(int i = 0; i < candidate_count; i++) {
            if(candidates[i].votes == max_votes) {
                printf("%s\n", candidates[i].name);
            }
        }
    
    }
    


  • Percorro a lista, e vou comparando o número de votos de cada candidato com o número máximo de votos anteriormente.
  • Se for igual, será impresso em tela o nome em tela, e junto com o marcador \n para pular a próxima linha.

  • É isso, pessoal!



    Termina por aqui, o PSET da semana 3.

    좋은 웹페이지 즐겨찾기