std::vector<double> meanItemRating(gk_csr_t *mat) { std::vector<double> meanRating(mat->ncols, 0); std::vector<int> count(mat->ncols, 0); for (int u = 0; u < mat->nrows; u++) { for (int ii = mat->rowptr[u]; ii < mat->rowptr[u+1]; ii++) { int item = mat->rowind[ii]; float rating = mat->rowval[ii]; meanRating[item] += rating; count[item]++; } } for (int i = 0; i < mat->ncols; i++) { meanRating[i] = meanRating[i]/count[i]; } return meanRating; }
int main(int argc, char* argv[]) { int test_mode = 0; if (argc == 2) { if (strcmp(argv[1], "test") == 0) { test_mode = 1; printf("[start_test]\n"); test_data(); } } else { printf("Enter meal names and ratings in the form <name> <rating>.\n"); printf("No spaces are allowed in the name and the rating.\n"); printf("The rating can be * through *****.\n"); printf("To finish, enter \"end\" for a meal name.\n"); while (names < MAX_NAMES) { char name[MAX_NAME_LENGTH]; char rating[MAX_RATING_LENGTH + 1]; printf("\nName and rating: "); scanf("%s", &name); if (strcmp(name, "end") == 0) { break; } scanf("%s", rating); addNameAndRating(name, rating); } printf("\n"); } if (names) { // Print data entered and call libRatings.addRating(). printf("This is the data you entered:\n"); for (int i = 0; i < names; i++) { printf("%s (%s)\n", name_list[i], rating_list[i]); addRating(rating_list[i]); } // Print statistical information. printf("\nThe mean rating is %s\n", meanRating()); // 1 if (medianRating) { // 2 printf("The median rating is %s\n", medianRating()); } if (frequentRating) { // 3 printf("The most frequent rating is %s\n", frequentRating()); } //printf("\n"); } if (test_mode) { printf("[end_test]\n"); } return 0; }