import java.util.Scanner ;
// Base class
class Person {
int age;
Person
( String name,
int age
) { this .name = name;
this .age = age;
}
void displayInfo( ) {
System .
out .
println ( "Name: " + name
+ ", Age: " + age
) ; }
}
// Derived class
class Student extends Person {
int numSubjects;
double [ ] grades;
Student
( String name,
int age,
int numSubjects
) { super ( name, age) ;
this .numSubjects = numSubjects;
this .grades = new double [ numSubjects] ;
}
void inputGrades( Scanner sc) {
for ( int i = 0 ; i < numSubjects; i++ ) {
double grade;
do {
System .
out .
print ( "Enter grade for subject " + ( i
+ 1 ) + ": " ) ; grade = sc.nextDouble ( ) ;
if ( grade < 0 || grade > 100 ) {
System .
out .
println ( "Invalid grade. Please enter between 0 and 100." ) ; }
} while ( grade < 0 || grade > 100 ) ;
grades[ i] = grade;
}
}
double calculateGPA( ) {
double total = 0 ;
for ( int i = 0 ; i < numSubjects; i++ ) {
total += grades[ i] ;
}
return total / numSubjects;
}
String getLetterGrade
( double gpa
) { if ( gpa >= 90 ) return "A" ;
else if ( gpa >= 80 ) return "B" ;
else if ( gpa >= 70 ) return "C" ;
else if ( gpa >= 60 ) return "D" ;
else return "F" ;
}
void displayGrades( ) {
for ( int i = 0 ; i < numSubjects; i++ ) {
System .
out .
println ( "Subject " + ( i
+ 1 ) + ": " + grades
[ i
] ) ; }
}
}
public class Main {
public static void main
( String [ ] args
) { Scanner sc
= new Scanner
( System .
in ) ; System .
out .
print ( "Enter number of students: " ) ; int numStudents = sc.nextInt ( ) ;
Student[ ] students = new Student[ numStudents] ;
for ( int i = 0 ; i < numStudents; i++ ) {
System .
out .
println ( "\n Enter details for Student " + ( i
+ 1 ) ) ; sc.nextLine ( ) ; // Clear buffer
int age = sc.nextInt ( ) ;
System .
out .
print ( "Number of subjects: " ) ; int numSubjects = sc.nextInt ( ) ;
students[ i] = new Student( name, age, numSubjects) ;
students[ i] .inputGrades ( sc) ;
}
System .
out .
println ( "\n --- GPA Report ---" ) ; for ( int i = 0 ; i < numStudents; i++ ) {
students[ i] .displayInfo ( ) ;
students[ i] .displayGrades ( ) ;
double gpa = students[ i] .calculateGPA ( ) ;
System .
out .
printf ( "GPA: %.2f\n " , gpa
) ; System .
out .
println ( "Letter Grade: " + students
[ i
] .
getLetterGrade ( gpa
) ) ; System .
out .
println ( "----------------------" ) ; }
sc.close ( ) ;
}
}
aW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwoKLy8gQmFzZSBjbGFzcwpjbGFzcyBQZXJzb24gewogICAgU3RyaW5nIG5hbWU7CiAgICBpbnQgYWdlOwoKICAgIFBlcnNvbihTdHJpbmcgbmFtZSwgaW50IGFnZSkgewogICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgdGhpcy5hZ2UgPSBhZ2U7CiAgICB9CgogICAgdm9pZCBkaXNwbGF5SW5mbygpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5hbWU6ICIgKyBuYW1lICsgIiwgQWdlOiAiICsgYWdlKTsKICAgIH0KfQoKLy8gRGVyaXZlZCBjbGFzcwpjbGFzcyBTdHVkZW50IGV4dGVuZHMgUGVyc29uIHsKICAgIGludCBudW1TdWJqZWN0czsKICAgIGRvdWJsZVtdIGdyYWRlczsKCiAgICBTdHVkZW50KFN0cmluZyBuYW1lLCBpbnQgYWdlLCBpbnQgbnVtU3ViamVjdHMpIHsKICAgICAgICBzdXBlcihuYW1lLCBhZ2UpOwogICAgICAgIHRoaXMubnVtU3ViamVjdHMgPSBudW1TdWJqZWN0czsKICAgICAgICB0aGlzLmdyYWRlcyA9IG5ldyBkb3VibGVbbnVtU3ViamVjdHNdOwogICAgfQoKICAgIHZvaWQgaW5wdXRHcmFkZXMoU2Nhbm5lciBzYykgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtU3ViamVjdHM7IGkrKykgewogICAgICAgICAgICBkb3VibGUgZ3JhZGU7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkVudGVyIGdyYWRlIGZvciBzdWJqZWN0ICIgKyAoaSArIDEpICsgIjogIik7CiAgICAgICAgICAgICAgICBncmFkZSA9IHNjLm5leHREb3VibGUoKTsKICAgICAgICAgICAgICAgIGlmIChncmFkZSA8IDAgfHwgZ3JhZGUgPiAxMDApIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludmFsaWQgZ3JhZGUuIFBsZWFzZSBlbnRlciBiZXR3ZWVuIDAgYW5kIDEwMC4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSB3aGlsZSAoZ3JhZGUgPCAwIHx8IGdyYWRlID4gMTAwKTsKICAgICAgICAgICAgZ3JhZGVzW2ldID0gZ3JhZGU7CiAgICAgICAgfQogICAgfQoKICAgIGRvdWJsZSBjYWxjdWxhdGVHUEEoKSB7CiAgICAgICAgZG91YmxlIHRvdGFsID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVN1YmplY3RzOyBpKyspIHsKICAgICAgICAgICAgdG90YWwgKz0gZ3JhZGVzW2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdG90YWwgLyBudW1TdWJqZWN0czsKICAgIH0KCiAgICBTdHJpbmcgZ2V0TGV0dGVyR3JhZGUoZG91YmxlIGdwYSkgewogICAgICAgIGlmIChncGEgPj0gOTApIHJldHVybiAiQSI7CiAgICAgICAgZWxzZSBpZiAoZ3BhID49IDgwKSByZXR1cm4gIkIiOwogICAgICAgIGVsc2UgaWYgKGdwYSA+PSA3MCkgcmV0dXJuICJDIjsKICAgICAgICBlbHNlIGlmIChncGEgPj0gNjApIHJldHVybiAiRCI7CiAgICAgICAgZWxzZSByZXR1cm4gIkYiOwogICAgfQoKICAgIHZvaWQgZGlzcGxheUdyYWRlcygpIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVN1YmplY3RzOyBpKyspIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWJqZWN0ICIgKyAoaSArIDEpICsgIjogIiArIGdyYWRlc1tpXSk7CiAgICAgICAgfQogICAgfQp9CgpwdWJsaWMgY2xhc3MgTWFpbiB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgU2Nhbm5lciBzYyA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRW50ZXIgbnVtYmVyIG9mIHN0dWRlbnRzOiAiKTsKICAgICAgICBpbnQgbnVtU3R1ZGVudHMgPSBzYy5uZXh0SW50KCk7CgogICAgICAgIFN0dWRlbnRbXSBzdHVkZW50cyA9IG5ldyBTdHVkZW50W251bVN0dWRlbnRzXTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1TdHVkZW50czsgaSsrKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5FbnRlciBkZXRhaWxzIGZvciBTdHVkZW50ICIgKyAoaSArIDEpKTsKICAgICAgICAgICAgc2MubmV4dExpbmUoKTsgLy8gQ2xlYXIgYnVmZmVyCiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIk5hbWU6ICIpOwogICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHNjLm5leHRMaW5lKCk7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkFnZTogIik7CiAgICAgICAgICAgIGludCBhZ2UgPSBzYy5uZXh0SW50KCk7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIk51bWJlciBvZiBzdWJqZWN0czogIik7CiAgICAgICAgICAgIGludCBudW1TdWJqZWN0cyA9IHNjLm5leHRJbnQoKTsKCiAgICAgICAgICAgIHN0dWRlbnRzW2ldID0gbmV3IFN0dWRlbnQobmFtZSwgYWdlLCBudW1TdWJqZWN0cyk7CiAgICAgICAgICAgIHN0dWRlbnRzW2ldLmlucHV0R3JhZGVzKHNjKTsKICAgICAgICB9CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4tLS0gR1BBIFJlcG9ydCAtLS0iKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVN0dWRlbnRzOyBpKyspIHsKICAgICAgICAgICAgc3R1ZGVudHNbaV0uZGlzcGxheUluZm8oKTsKICAgICAgICAgICAgc3R1ZGVudHNbaV0uZGlzcGxheUdyYWRlcygpOwogICAgICAgICAgICBkb3VibGUgZ3BhID0gc3R1ZGVudHNbaV0uY2FsY3VsYXRlR1BBKCk7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCJHUEE6ICUuMmZcbiIsIGdwYSk7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGV0dGVyIEdyYWRlOiAiICsgc3R1ZGVudHNbaV0uZ2V0TGV0dGVyR3JhZGUoZ3BhKSk7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgIH0KCiAgICAgICAgc2MuY2xvc2UoKTsKICAgIH0KfQo=