//GPA calculator for ASU-science
#include <iostream>
#include <vector>
#include <string>
#include <random>
using namespace std;
#define t "\t\t";
struct course {
string name, rank;
int credits;
float gpa,grade;
course( string Cname, int Ccredits, float Cgrade) {
name = Cname; credits = Ccredits; grade = Cgrade;
gpa = calcCGPA( ) ;
}
float calcCGPA( ) {
float n = grade / ( credits * 0.5 ) ;
if ( n >= 90 ) { rank = 'A' ; gpa = 4 ; }
else if ( n >= 85 ) { rank = "A-" ; gpa = 3.67 ; }
else if ( n >= 80 ) { rank = "Β+" ; gpa = 3.33 ; }
else if ( n >= 75 ) { rank = 'B' ; gpa = 3.00 ; }
else if ( n >= 70 ) { rank = "C+" ; gpa = 2.67 ; }
else if ( n >= 65 ) { rank = 'C' ; gpa = 2.33 ; }
else if ( n >= 60 ) { rank = 'D' ; gpa = 2.00 ; }
else { rank = 'F' ; gpa = 0 ; }
return gpa;
}
void gpa2rank( ) {
float n = grade / ( credits * 0.5 ) ;
if ( n >= 4 ) { rank = 'A' ; }
else if ( n >= 3.67 ) { rank = "A-" ; }
else if ( n >= 3.33 ) { rank = "Β+" ; }
else if ( n >= 3.00 ) { rank = 'B' ; }
else if ( n >= 2.67 ) { rank = "C+" ; }
else if ( n >= 2.33 ) { rank = 'C' ; }
else if ( n >= 2.00 ) { rank = 'D' ; }
else { rank = 'F' ; }
}
void display( ) {
cout << name << t;
cout << credits << t;
cout << grade << t;
cout << rank << "\n " ;
}
} ;
void pastSem( float & nomerator, int & Tcredits) {
char ans;
cout << "Do you want to calculate the total GPA or a semester GPA?\n a)Yes\t b)No\n " ; cin >> ans;
if ( ans == 'a' || ans == 'y' || ans == 'Y' )
{
float gpa; int credits;
cout << "Insert the total GPA for the past semesters : " ; cin >> gpa;
cout << "Insert the total credit hours for the past semesters : " ; cin >> credits;
nomerator + = gpa * credits;
Tcredits + = credits;
}
else if ( ans == 'b' || ans == 'n' || ans == 'N' )
return ;
else
{
cout << "Invalid insert!\n Please insert a valid character\n \n " ; pastSem( nomerator,Tcredits) ;
}
}
string message( float gpa) {
int i;
srand ( ( int ) gpa) ;
i = rand ( ) % 10 ;
string quote[ 4 ] [ 10 ] =
{
"You rock!" ,"Top tier!" ,"On fire!" ,"So smart!" ,"Ace mode" ,"Too easy" ,"Wow, A!" ,"Nailed it" ,"Brainy!" ,"Slayed!" ,
"Keep it up!" ,"Nice try!" ,"You got it!" ,"So close!" ,"Not bad!" ,"Push more" ,"Stay cool" ,"Keep grind" ,"Halfway!" ,"Try hard!" ,
"U got this" ,"Next time!" ,"Don’t quit" ,"Try again" ,"Head up!" ,"Go harder" ,"Fix this" ,"Be brave" ,"You can!" ,"One shot!" ,
"Wake up!" ,"Yikes!" ,"Do work!" ,"KYS" ,"Low batt" ,"GPA who?" ,"Help?" ,"Oof..." ,"Fix it!" ,"Come on!"
} ;
if ( gpa >= 3.5 ) return quote[ 0 ] [ i] ;
else if ( gpa >= 2.5 ) return quote[ 1 ] [ i] ;
else if ( gpa >= 1.0 ) return quote[ 2 ] [ i] ;
else return quote[ 3 ] [ i] ;
}
int main( ) {
int num, credits;
float grade,nomerator = 0 ;
int totalcredits = 0 ;
int totalpassed ;
string name;
vector< course> C;
pastSem( nomerator, totalcredits) ;
totalpassed = totalcredits;
cout << "Insetrt the number of courses for the semster : " ; cin >> num;
for ( int i = 0 ; i < num; i++ ) {
cout << "Course " << i + 1 << endl;
cout << " Insert the course's name : " ; cin >> name;
cout << " Insert the course's credit hours : " ; cin >> credits;
cout << " Insert the course's degree : " ; cin >> grade;
C.push_back ( { name,credits,grade } ) ;
totalcredits + = credits;
}
cout << "Name" << t;
cout << "Credits" << t;
cout << "Degree" << t;
cout << "Grade" << "\n " ;
for ( auto it : C) {
nomerator + = it.credits * it.gpa ;
if ( it.gpa ! = 0 ) totalpassed + = it.credits ;
it.display ( ) ;
}
C.push_back ( { "Final\n Grade" , totalcredits,nomerator/ 2 } ) ;
cout << "\n " ;
cout << C.back ( ) .name << t;
cout << totalpassed << t;
cout << nomerator/ totalcredits << t;
C.back ( ) .gpa2rank ( ) ;
cout << C.back ( ) .rank << t;
cout << message( C.back ( ) .gpa ) << "\n " ;
return 0 ;
}
Ly9HUEEgY2FsY3VsYXRvciBmb3IgQVNVLXNjaWVuY2UKCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHJhbmRvbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSAgdCAiXHRcdCI7CgpzdHJ1Y3QgY291cnNlIHsKCXN0cmluZyBuYW1lLCByYW5rOwoJaW50ICBjcmVkaXRzOwoJZmxvYXQgZ3BhLGdyYWRlOwoJY291cnNlKHN0cmluZyBDbmFtZSwgaW50IENjcmVkaXRzLCBmbG9hdCBDZ3JhZGUpIHsKCQluYW1lID0gQ25hbWU7IGNyZWRpdHMgPSBDY3JlZGl0czsgZ3JhZGUgPSBDZ3JhZGU7CgkJZ3BhID0gY2FsY0NHUEEoKTsKCX0KCWZsb2F0IGNhbGNDR1BBKCkgewoJCWZsb2F0IG4gPSBncmFkZSAvIChjcmVkaXRzICogMC41KTsKCQlpZiAobiA+PSA5MCkgeyByYW5rID0gJ0EnOyBncGEgPSA0OyB9CgkJZWxzZSBpZiAobiA+PSA4NSkgeyByYW5rID0gIkEtIjtncGEgPSAzLjY3OyB9CgkJZWxzZSBpZiAobiA+PSA4MCkgeyByYW5rID0gIs6SKyI7Z3BhID0gMy4zMzsgfQoJCWVsc2UgaWYgKG4gPj0gNzUpIHsgcmFuayA9ICdCJzsJZ3BhID0gMy4wMDsgfQoJCWVsc2UgaWYgKG4gPj0gNzApIHsgcmFuayA9ICJDKyI7Z3BhID0gMi42NzsgfQoJCWVsc2UgaWYgKG4gPj0gNjUpIHsgcmFuayA9ICdDJzsJZ3BhID0gMi4zMzsgfQoJCWVsc2UgaWYgKG4gPj0gNjApIHsgcmFuayA9ICdEJzsJZ3BhID0gMi4wMDsgfQoJCWVsc2UgeyByYW5rID0gJ0YnOyBncGEgPSAwOyB9CgkJcmV0dXJuIGdwYTsKCX0KCXZvaWQgZ3BhMnJhbmsoKSB7CgkJZmxvYXQgbiA9IGdyYWRlIC8gKGNyZWRpdHMgKiAwLjUpOwoJCWlmIChuID49IDQpIHsgcmFuayA9ICdBJzsgfQoJCWVsc2UgaWYgKG4gPj0gMy42NykgeyByYW5rID0gIkEtIjt9CgkJZWxzZSBpZiAobiA+PSAzLjMzKSB7IHJhbmsgPSAizpIrIjt9CgkJZWxzZSBpZiAobiA+PSAzLjAwKSB7IHJhbmsgPSAnQic7IH0KCQllbHNlIGlmIChuID49IDIuNjcpIHsgcmFuayA9ICJDKyI7fQoJCWVsc2UgaWYgKG4gPj0gMi4zMykgeyByYW5rID0gJ0MnOyB9CgkJZWxzZSBpZiAobiA+PSAyLjAwKSB7IHJhbmsgPSAnRCc7IH0KCQllbHNlIHsgcmFuayA9ICdGJzt9Cgl9Cgl2b2lkIGRpc3BsYXkoKSB7CgkJY291dCA8PCBuYW1lIDw8IHQ7CgkJY291dCA8PCBjcmVkaXRzIDw8IHQ7CgkJY291dCA8PCBncmFkZSA8PCB0OwoJCWNvdXQgPDwgcmFuayA8PCAiXG4iOwoJfQp9Owp2b2lkIHBhc3RTZW0oZmxvYXQmIG5vbWVyYXRvciwgaW50JiBUY3JlZGl0cykgewoJY2hhciBhbnM7Cgljb3V0IDw8ICJEbyB5b3Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIHRvdGFsIEdQQSBvciBhIHNlbWVzdGVyIEdQQT9cbmEpWWVzXHRiKU5vXG4iOyBjaW4gPj4gYW5zOwoJaWYgKGFucyA9PSAnYScgfHwgYW5zID09ICd5JyB8fCBhbnMgPT0gJ1knKQoJewoJCWZsb2F0IGdwYTsgaW50IGNyZWRpdHM7CgkJY291dCA8PCAiSW5zZXJ0IHRoZSB0b3RhbCBHUEEgZm9yIHRoZSBwYXN0IHNlbWVzdGVycyA6ICI7IGNpbiA+PiBncGE7CgkJY291dCA8PCAiSW5zZXJ0IHRoZSB0b3RhbCBjcmVkaXQgaG91cnMgZm9yIHRoZSBwYXN0IHNlbWVzdGVycyA6ICI7IGNpbiA+PiBjcmVkaXRzOwoJCW5vbWVyYXRvciArPSBncGEgKiBjcmVkaXRzOwoJCVRjcmVkaXRzICs9IGNyZWRpdHM7Cgl9CgllbHNlIGlmIChhbnMgPT0gJ2InIHx8IGFucyA9PSAnbicgfHwgYW5zID09ICdOJykKCQlyZXR1cm47CgllbHNlCgl7CgkJY291dCA8PCAiSW52YWxpZCBpbnNlcnQhXG5QbGVhc2UgaW5zZXJ0IGEgdmFsaWQgY2hhcmFjdGVyXG5cbiI7IHBhc3RTZW0obm9tZXJhdG9yLFRjcmVkaXRzKTsKCX0KfQpzdHJpbmcgbWVzc2FnZShmbG9hdCBncGEpIHsKCWludCBpOwoJc3JhbmQoKGludClncGEpOwoJaSA9IHJhbmQoKSAlIDEwOwoJc3RyaW5nIHF1b3RlWzRdWzEwXSA9Cgl7CgkJIllvdSByb2NrISIsIlRvcCB0aWVyISIsIk9uIGZpcmUhIiwiU28gc21hcnQhIiwiQWNlIG1vZGUiLCJUb28gZWFzeSIsIldvdywgQSEiLCJOYWlsZWQgaXQiLCJCcmFpbnkhIiwiU2xheWVkISIsCgkJIktlZXAgaXQgdXAhIiwiTmljZSB0cnkhIiwiWW91IGdvdCBpdCEiLCJTbyBjbG9zZSEiLCJOb3QgYmFkISIsIlB1c2ggbW9yZSIsIlN0YXkgY29vbCIsIktlZXAgZ3JpbmQiLCJIYWxmd2F5ISIsIlRyeSBoYXJkISIsCgkJIlUgZ290IHRoaXMiLCJOZXh0IHRpbWUhIiwiRG9u4oCZdCBxdWl0IiwiVHJ5IGFnYWluIiwiSGVhZCB1cCEiLCJHbyBoYXJkZXIiLCJGaXggdGhpcyIsIkJlIGJyYXZlIiwiWW91IGNhbiEiLCJPbmUgc2hvdCEiLAoJCSJXYWtlIHVwISIsIllpa2VzISIsIkRvIHdvcmshIiwiS1lTIiwiTG93IGJhdHQiLCJHUEEgd2hvPyIsIkhlbHA/IiwiT29mLi4uIiwiRml4IGl0ISIsIkNvbWUgb24hIiAKCX07CglpZiAoZ3BhID49IDMuNSkgcmV0dXJuIHF1b3RlWzBdW2ldOwoJZWxzZSBpZiAoZ3BhID49IDIuNSkgcmV0dXJuIHF1b3RlWzFdW2ldOwoJZWxzZSBpZiAoZ3BhID49IDEuMCkgcmV0dXJuIHF1b3RlWzJdW2ldOwoJZWxzZSByZXR1cm4gcXVvdGVbM11baV07Cn0KaW50IG1haW4oKSB7CglpbnQgbnVtLCBjcmVkaXRzOwoJZmxvYXQgZ3JhZGUsbm9tZXJhdG9yID0gMDsKCWludCB0b3RhbGNyZWRpdHMgPSAwOwoJaW50IHRvdGFscGFzc2VkIDsKCXN0cmluZyBuYW1lOwoJdmVjdG9yPGNvdXJzZT4gQzsKCXBhc3RTZW0obm9tZXJhdG9yLCB0b3RhbGNyZWRpdHMpOwoJdG90YWxwYXNzZWQgPSB0b3RhbGNyZWRpdHM7Cgljb3V0IDw8ICJJbnNldHJ0IHRoZSBudW1iZXIgb2YgY291cnNlcyBmb3IgdGhlIHNlbXN0ZXIgOiAiOyBjaW4gPj4gbnVtOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgewoJCWNvdXQgPDwgIkNvdXJzZSAiIDw8IGkgKyAxIDw8IGVuZGw7CgkJY291dCA8PCAiICBJbnNlcnQgdGhlIGNvdXJzZSdzIG5hbWUgOiAiOwljaW4gPj4gbmFtZTsKCQljb3V0IDw8ICIgIEluc2VydCB0aGUgY291cnNlJ3MgY3JlZGl0IGhvdXJzIDogIjsJY2luID4+IGNyZWRpdHM7CgkJY291dCA8PCAiICBJbnNlcnQgdGhlIGNvdXJzZSdzIGRlZ3JlZSA6ICI7CWNpbiA+PiBncmFkZTsKCQlDLnB1c2hfYmFjayh7IG5hbWUsY3JlZGl0cyxncmFkZSB9KTsKCQl0b3RhbGNyZWRpdHMgKz0gY3JlZGl0czsKCX0KCWNvdXQgPDwgIk5hbWUiIDw8IHQ7Cgljb3V0IDw8ICJDcmVkaXRzIiA8PCB0OwoJY291dCA8PCAiRGVncmVlIiA8PCB0OwoJY291dCA8PCAiR3JhZGUiIDw8ICJcbiI7CgoJZm9yIChhdXRvIGl0IDogQykgewoJCW5vbWVyYXRvciArPSBpdC5jcmVkaXRzICogaXQuZ3BhOwoJCWlmIChpdC5ncGEgIT0gMCkgdG90YWxwYXNzZWQgKz0gaXQuY3JlZGl0czsKCQlpdC5kaXNwbGF5KCk7Cgl9CglDLnB1c2hfYmFjayh7ICJGaW5hbFxuR3JhZGUiLCB0b3RhbGNyZWRpdHMsbm9tZXJhdG9yLzIgfSk7Cgljb3V0IDw8ICJcbiI7Cgljb3V0IDw8IEMuYmFjaygpLm5hbWUgPDwgdDsKCWNvdXQgPDwgdG90YWxwYXNzZWQgPDwgdDsKCWNvdXQgPDwgbm9tZXJhdG9yL3RvdGFsY3JlZGl0cyA8PCB0OwoJQy5iYWNrKCkuZ3BhMnJhbmsoKTsKCWNvdXQgPDwgQy5iYWNrKCkucmFuayA8PCB0OwoJY291dCA8PCBtZXNzYWdlKEMuYmFjaygpLmdwYSkgPDwgIlxuIjsKCXJldHVybiAwOwp9