IT, Programming, & Web Development › Forums › Need help for max function
- This topic is empty.
-
AuthorPosts
-
December 19, 2022 at 5:35 am #1016
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.
[dm_code_snippet background=”yes” background-mobile=”yes” slim=”yes” line-numbers=”yes” bg-color=”#abb8c3″ theme=”dark” language=”clike” wrapped=”yes” height=”” copy-text=”Copy Code” copy-confirmed=”Copied”]
#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[i].name = argv[i + 1]; candidates[i].votes = 0; candidates[i].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[i][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[i].eliminated) { printf("%s\n", candidates[i].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[i].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; } */
[/dm_code_snippet]
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]
-
AuthorPosts
- You must be logged in to reply to this topic.