136 lines
4.0 KiB
C
Executable File
136 lines
4.0 KiB
C
Executable File
/*
|
||
In this task, you should get familiar with enum.
|
||
The program allows the user to enter ratings for a movie
|
||
using integers that should correspond to an enum.
|
||
Only ratings between 1 and 5 are considered.
|
||
|
||
The program processes the ratings,
|
||
prints the average rating using stars (i.e., *) and
|
||
prints a recommendation based on the average ratings.
|
||
|
||
Your task is:
|
||
|
||
- Declare a typedef’d enum for the 5 categories of the rating system
|
||
- 1 == worst rating
|
||
- 5 == best rating
|
||
- all ratings are entered by the user
|
||
- calculate average rating using total_ratings and weighted_ratings
|
||
- total_ratings == total number of ratings entered by the user
|
||
- weighted_ratings == ratings weighted by their category
|
||
- ratings in 1st category: weighted with 1
|
||
- ratings in 2nd category: weighted with 3
|
||
|
||
This is necessary to calculate the average rating by dividing weighted_ratings by total_ratings
|
||
Use your typedef’d enum as data type of the variable in which you store the average ratings
|
||
Use an integer division to calculate the average rating
|
||
(e.g., an average rating of 3.84 corresponds to the 3rd category).
|
||
|
||
Print the average rating using stars.
|
||
For instance, if the average rating of the movie is in the
|
||
3rd category of the rating system, then print Average rating: ***.
|
||
|
||
Print a recommendation based on the rating category of the movie’s average rating:
|
||
- 1st category: The movie is terrible, do not watch it
|
||
- 2nd category: The movie is bad and not worth watching
|
||
- 3rd category: The movie is average, neither especially good nor bad
|
||
- 4th category: The movie is good and worth watching
|
||
- 5th category: The movie is excellent and a must-see
|
||
- Print "Invalid rating for the movie" if none of the above cases apply.
|
||
|
||
|
||
Examples:
|
||
|
||
Enter movie ratings (1 = TERRIBLE, 2 = BAD, 3 = AVERAGE, 4 = GOOD, 5 = EXCELLENT). End with -1:
|
||
3 4 3 3 2 3 5 4 4 3 3 -1
|
||
Average rating: ***
|
||
Recommendation: The movie is average, neither especially good nor bad
|
||
|
||
|
||
Enter movie ratings (1 = TERRIBLE, 2 = BAD, 3 = AVERAGE, 4 = GOOD, 5 = EXCELLENT). End with -1:
|
||
5 4 3 4 5 4 3 4 5 4 3 5 5 5 5 5 3 3 3 -1
|
||
Average rating: ****
|
||
Recommendation: The movie is good and worth watching
|
||
*/
|
||
|
||
#include <stdio.h>
|
||
|
||
#define MAX_RATING 5
|
||
|
||
// TODO: Declare a (typedef'd) enum for a movie rating scale that consists of 5 categories
|
||
|
||
typedef enum _Ratings_ {
|
||
TERRIBLE = 1,
|
||
BAD,
|
||
AVERAGE,
|
||
GOOD,
|
||
EXCELLENT
|
||
} Ratings;
|
||
|
||
void giveRecommendation(Ratings rating)
|
||
{
|
||
printf("Recommendation: ");
|
||
switch (rating) {
|
||
case TERRIBLE:
|
||
printf("The movie is terrible, do not watch it\n");
|
||
break;
|
||
case BAD:
|
||
printf("The movie is bad and not worth watching\n");
|
||
break;
|
||
case AVERAGE:
|
||
printf("The movie is average, neither especially good nor bad\n");
|
||
break;
|
||
case GOOD:
|
||
printf("The movie is good and worth watching\n");
|
||
break;
|
||
case EXCELLENT:
|
||
printf("The movie is excellent and a must-see\n");
|
||
break;
|
||
default:
|
||
printf("Invalid rating for the movie\n");
|
||
break;
|
||
}
|
||
}
|
||
|
||
int main(void)
|
||
{
|
||
printf("Enter movie ratings (1 = TERRIBLE, 2 = BAD, 3 = AVERAGE, 4 = GOOD, 5 = EXCELLENT). End with -1:\n");
|
||
|
||
int input = 0;
|
||
int ratings[MAX_RATING] = {0};
|
||
while (1)
|
||
{
|
||
scanf("%d", &input);
|
||
if (input == -1) break;
|
||
|
||
if (input > 0 && input <= MAX_RATING)
|
||
{
|
||
ratings[--input]++;
|
||
}
|
||
}
|
||
|
||
int total_ratings = 0;
|
||
int weighted_ratings = 0;
|
||
for (int i = 0; i < sizeof(ratings)/sizeof(ratings[0]); i++)
|
||
{
|
||
total_ratings += ratings[i];
|
||
weighted_ratings += (ratings[i] * (i+1));
|
||
}
|
||
|
||
if (total_ratings == 0)
|
||
{
|
||
printf("No ratings entered\n");
|
||
return 1;
|
||
}
|
||
// TODO: Store the average rating in a variable. The data type of the variable should be your typedef'd enum
|
||
Ratings average_rating = weighted_ratings / total_ratings;
|
||
|
||
// TODO: Print the average rating by displaying stars
|
||
printf("Average rating: ");
|
||
for(int i = 0; i < average_rating; i++) printf("%c", '*');
|
||
printf("\n");
|
||
|
||
// TODO: Print the recommendation
|
||
giveRecommendation(average_rating);
|
||
|
||
return 0;
|
||
} |