-
-
Save teeschorle/4c4c7607d9ae14cab96475b3b10e8fe6 to your computer and use it in GitHub Desktop.
#include <cs50.h> | |
#include <stdio.h> | |
#include <string.h> | |
// Max number of candidates | |
#define MAX 9 | |
// Candidates have name and vote count | |
typedef struct | |
{ | |
string name; | |
int votes; | |
} | |
candidate; | |
// Array of candidates | |
candidate candidates[MAX]; | |
// Number of candidates | |
int candidate_count; | |
// Function prototypes | |
bool vote(string name); | |
void print_winner(void); | |
int main(int argc, string argv[]) | |
{ | |
// Check for invalid usage | |
if (argc < 2) | |
{ | |
printf("Usage: plurality [candidate ...]\n"); | |
return 1; | |
} | |
// Populate array of candidates | |
candidate_count = argc - 1; | |
if (candidate_count > MAX) | |
{ | |
printf("Maximum number of candidates is %i\n", MAX); | |
return 2; | |
} | |
for (int i = 0; i < candidate_count; i++) | |
{ | |
candidates[i].name = argv[i + 1]; | |
candidates[i].votes = 0; | |
} | |
int voter_count = get_int("Number of voters: "); | |
// Loop over all voters | |
for (int i = 0; i < voter_count; i++) | |
{ | |
string name = get_string("Vote: "); | |
// Check for invalid vote | |
if (!vote(name)) | |
{ | |
printf("Invalid vote.\n"); | |
} | |
} | |
// Display winner of election | |
print_winner(); | |
} | |
// Update vote totals given a new vote | |
bool vote(string name) | |
{ | |
// TODO | |
for (int i = 0; i < candidate_count; i++) | |
{ | |
if (strcmp(candidates[i].name, name) == 0) | |
{ | |
candidates[i].votes++; | |
return true; | |
} | |
} | |
// TODO end | |
return false; | |
} | |
// Print the winner (or winners) of the election | |
void print_winner(void) | |
{ | |
// TODO | |
int maxvotes = 0; | |
// find highest number of votes | |
for (int i = 0; i < candidate_count; i++) | |
{ | |
if (candidates[i].votes > maxvotes) | |
{ | |
maxvotes = candidates[i].votes; | |
} | |
} | |
// print winners | |
for (int i = 0; i < candidate_count; i++) | |
{ | |
if (candidates[i].votes == maxvotes) | |
{ | |
printf("%s\n", candidates[i].name); | |
} | |
} | |
// TODO end | |
return; | |
} | |
Sorry to bother you. I am doing my problem set 3 make plurality. I am really confused on the print_winner function definition part // find the highest number of votes.
Could you explain it a little bit when you have time please?
Appreciate it.
I think the theory behind the print_winner function goes as follows;
1)Set an initial maxvotes value to 0 as a starting point to compare to
2)Iterate over the list of candidates, updating the maxvotes value as you move through each element of the array
3)Iterate over the list of candidates again printing those that have numbers of votes equal to the maxvotes values as you go
I am currently working through this myself and I think that is the logic behind it
Thank you very much. Now I understand how the "int maxvotes" works. You are so smart!!
Please feel free to PM me in the future and we can work through problems togetherGuys I did everything until problem sets 3 runoff, although I skipped the pset 0 first. Im looking forward for collaboration or If anyone need help, or maybe I need help, pls pm me +65 8619 8015.
Hey I am also looking for someone to collaborate with. Maybe we can ?
Can someone please explain how the "vote(name)" function is called in the 'main' code? I only see one condition "if (!vote(i, j, name))" related to this function, and as I understand this just prints "Invalid vote" if the "vote" returns false.