• This topic is empty.
Viewing 1 post (of 1 total)
  • Author
    Posts
  • #1016
    admin
    Keymaster

      For the below code, it will help if any clue provided how to use max function properly so that the name of the candidate securing maximum no. of votes for rank 1 displayed.

      
      
      #include <cs50.h>
      #include <stdio.h>
      #include <string.h>
      #include <stdlib.h>
      
      // Max voters and candidates
      #define MAX_VOTERS 100
      #define MAX_CANDIDATES 9
      
      // preferences[j] is jth preference for voter i
      int preferences[MAX_VOTERS][MAX_CANDIDATES];
      
      // Candidates have name, vote count, eliminated status
      typedef struct
      {
          string name;
          int votes;
          bool eliminated;
      }
      candidate;
      
      // Array of candidates
      candidate candidates[MAX_CANDIDATES];
      
      // Numbers of voters and candidates
      int voter_count;
      int candidate_count;
      
      // Function prototypes
      bool vote(int voter, int rank, string name);
      void tabulate(void);
      bool print_winner(void);
      int find_min(void);
      bool is_tie(int min);
      void eliminate(int min);
      
      int main(int argc, string argv[])
      {
          // Check for invalid usage
          if (argc < 2)
          {
              printf("Usage: runoff [candidate ...]\n");
              return 1;
          }
      
          // Populate array of candidates
          candidate_count = argc - 1;
          if (candidate_count > MAX_CANDIDATES)
          {
              printf("Maximum number of candidates is %i\n", MAX_CANDIDATES);
              return 2;
          }
          for (int i = 0; i < candidate_count; i++)
          {
              candidates.name = argv;
              candidates.votes = 0;
              candidates.eliminated = false;
          }
      
          voter_count = get_int("Number of voters: ");
          if (voter_count > MAX_VOTERS)
          {
              printf("Maximum number of voters is %i\n", MAX_VOTERS);
              return 3;
          }
      
          // Keep querying for votes
          for (int i = 0; i < voter_count; i++)
          {
      
              // Query for each rank
              for (int j = 0; j < candidate_count; j++)
              {
                  string name = get_string("Rank %i: ", j + 1);
      
                  // Record vote, unless it's invalid
                  if (!vote(i, j, name))
                  {
                      printf("Invalid vote.\n");
                      return 4;
                  }
                  //printf("%i, %i, %s\n", i + 1, j + 1, candidates[preferences[j]].name);
              }
         }
      
      
      //printf("complete");
      
      
      tabulate();
      }
      
      
          /*
      
          // Keep holding runoffs until winner exists
          while (true)
          {
              // Calculate votes given remaining candidates
              tabulate();
      
              // Check if election has been won
              bool won = print_winner();
              if (won)
              {
                  break;
              }
      
              // Eliminate last-place candidates
              int min = find_min();
              bool tie = is_tie(min);
      
              // If tie, everyone wins
              if (tie)
              {
                  for (int i = 0; i < candidate_count; i++)
                  {
                      if (!candidates.eliminated)
                      {
                          printf("%s\n", candidates.name);
                      }
                  }
                  break;
              }
      
              // Eliminate anyone with minimum number of votes
              eliminate(min);
      
              // Reset vote counts back to zero
              for (int i = 0; i < candidate_count; i++)
              {
                  candidates.votes = 0;
              }
          }
          return 0;
      }
      
      */
      
      // Record preference if vote is valid
      bool vote(int voter, int rank, string name)
      {
          //printf("voter no (via local function taking value of voter as argument).: %i, rank selected (via local function taking value of rank as argument) %i\n", voter + 1, rank + 1);
          for (int t = 0; t < candidate_count; t++)
              {
                  if(strcmp(name, candidates[t].name) == 0)
                  {
                  preferences[voter][rank] = t;
                  //printf("preference of voter no. %i for rank %i is %s\n", voter + 1, rank + 1, candidates[t].name);
                  return 4;
                  }
              }
          return 0;
      }
      
      
      
      // Tabulate votes for non-eliminated candidates
      void tabulate(void)
      {
          int vc = 0;
          int cc = 0;
          for (vc = 0; vc < voter_count; vc++)
          {
              //candidates[cc].votes = candidates[preferences[vc][0]].votes + 1
                  printf("no. 1 is %s", candidates[preferences[vc][0]].name);
                  for (cc = 0; cc < candidate_count; cc++)
                  {
                      if (candidates[cc].name == candidates[preferences[vc][0]].name)
                      {
                      candidates[cc].votes = candidates[cc].votes + 1;
                      printf("candidate vote is %i", candidates[cc].votes);
                      }
                  }
                  //int z = max(candidates[cc].votes);
                 // printf("%i", max(candidates[cc].votes));
      
          }
      
              //for (vc = 0; vc < voter_count; vc++)
              //{
                  //for (cc = 0; cc < candidate_count; cc++)
                  //{
                      //if (candidates[cc].name == preferences[vc][cc])
                  //}
              //}
      
      
      
         return;
      }
      
      /*
      
      // Print the winner of the election, if there is one
      bool print_winner(void)
      {
          // TODO
          return false;
      }
      
      // Return the minimum number of votes any remaining candidate has
      int find_min(void)
      {
          // TODO
          return 0;
      }
      
      // Return true if the election is tied between all candidates, false otherwise
      bool is_tie(int min)
      {
          // TODO
          return false;
      }
      
      // Eliminate the candidate (or candidates) in last place
      void eliminate(int min)
      {
          // TODO
          return;
      }
      */
      

       

      Help is particularly needed for line no. 175 and 176 above:

      int z = max(candidates[cc].votes);

      printf(“%i”, max(candidates[cc].votes));

      I intend to store and display Tom in the above sample with max votes for rank 1.


      Reply


      https://edstem.org/us/courses/176/discussion/2341069?comment=5358109[learn_press_profile]

    Viewing 1 post (of 1 total)
    • You must be logged in to reply to this topic.
    Scroll to Top