Created
April 19, 2022 00:20
-
-
Save dasunsucharith/e2803f007f65bdf49fae11fff52c83dc to your computer and use it in GitHub Desktop.
My solution to CS50 2022 psets3 Plurality
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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) | |
{ | |
// Loop through the count of candidates | |
for (int i = 0; i < candidate_count; i++) | |
{ | |
// Check if the vote is similar to the name of the candidate | |
if (strcmp(candidates[i].name, name) == 0) | |
{ | |
// if it is true then add a vote to the number of votes of that candidate | |
candidates[i].votes++; | |
return true; | |
} | |
} | |
// else print invalid vote | |
return false; | |
} | |
// Print the winner (or winners) of the election | |
void print_winner(void) | |
{ | |
// create a variable and set the value to 0 | |
int num_vote = 0; | |
// iterate over the number of candidate | |
for (int i = 0; i < candidate_count; i++) | |
{ | |
// check each and every vote and which one got the majority | |
if (candidates[i].votes > num_vote) | |
{ | |
num_vote = candidates[i].votes; | |
} | |
} | |
// Iterate over the list of candidates | |
for (int i = 0; i < candidate_count; i++) | |
{ | |
if (candidates[i].votes == num_vote) | |
{ | |
printf("%s\n", candidates[i].name); | |
} | |
} | |
return; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment