Requisito previo: Estructuras en C
Nombre y calificaciones en diferentes materias (física, química y matemáticas) para todos los estudiantes. La tarea es calcular las calificaciones totales y los rangos de todos los estudiantes. Y finalmente mostrar todos los estudiantes ordenados por rango.
El rango del estudiante se calcula usando las siguientes reglas.
- Si las calificaciones totales son diferentes, los estudiantes con calificaciones más altas obtienen una mejor clasificación.
- Si las calificaciones totales son iguales, entonces los estudiantes con calificaciones más altas en Matemáticas obtienen una mejor clasificación.
- Si las calificaciones totales son las mismas y las calificaciones en Matemáticas también lo son, entonces los estudiantes con mejores calificaciones en Física obtienen una mejor clasificación.
- Si las calificaciones totales son las mismas y las calificaciones en Matemáticas y Física también son las mismas, entonces los estudiantes con mejores calificaciones en Química obtienen una mejor clasificación.
- Si todas las calificaciones (total, Matemáticas, Física y Química) son iguales, entonces se puede asignar un mejor rango a cualquier estudiante.
Usamos la siguiente estructura para almacenar detalles de los estudiantes.
struct Student { string name; // Given int math; // Marks in math (Given) int phy; // Marks in Physics (Given) int che; // Marks in Chemistry (Given) int total; // Total marks (To be filled) int rank; // Rank of student (To be filled) };
Usamos std::sort() para la clasificación de estructuras . En la clasificación de estructura, todas las propiedades respectivas que posee el objeto de estructura se clasifican en función de una (o más) propiedad del objeto.
En este ejemplo, las calificaciones de los estudiantes en diferentes materias son proporcionadas por el usuario. Estas calificaciones en materias individuales se suman para calcular las calificaciones totales del alumno, que luego se utilizan para clasificar a los diferentes alumnos en función de sus rangos (como se explicó anteriormente).
Implementación:
CPP
// C++ program to demonstrate structure sorting in C++ #include <bits/stdc++.h> using namespace std; struct Student { string name; // Given int math; // Marks in math (Given) int phy; // Marks in Physics (Given) int che; // Marks in Chemistry (Given) int total; // Total marks (To be filled) int rank; // Rank of student (To be filled) }; // Function for comparing two students according // to given rules bool compareTwoStudents(Student a, Student b) { // If total marks are not same then // returns true for higher total if (a.total != b.total) return a.total > b.total; // If marks in Maths are same then // returns true for higher marks if (a.math != b.math) return a.math > b.math; if (a.phy != b.phy) return a.phy > b.phy; return (a.che > b.che); } // Fills total marks and ranks of all Students void computeRanks(Student a[], int n) { // To calculate total marks for all Students for (int i = 0; i < n; i++) a[i].total = a[i].math + a[i].phy + a[i].che; // Sort structure array using user defined // function compareTwoStudents() sort(a, a + 5, compareTwoStudents); // Assigning ranks after sorting for (int i = 0; i < n; i++) a[i].rank = i + 1; } // Driver code int main() { int n = 5; // array of structure objects Student a[n]; // Details of Student 1 a[0].name = "Bryan"; a[0].math = 80; a[0].phy = 95; a[0].che = 85; // Details of Student 2 a[1].name = "Kevin"; a[1].math = 95; a[1].phy = 85; a[1].che = 99; // Details of Student 3 a[2].name = "Nicky"; a[2].math = 95; a[2].phy = 85; a[2].che = 80; // Details of Student 4 a[3].name = "Steve"; a[3].math = 80; a[3].phy = 70; a[3].che = 90; // Details of Student 5 a[4].name = "Rohan"; a[4].math = 80; a[4].phy = 80; a[4].che = 80; computeRanks(a, n); // Column names for displaying data cout << "Rank" << " " << "Name" << " "; cout << "Maths" << " " << "Physics" << " " << "Chemistry"; cout << " " << "Total\n"; // Display details of Students for (int i = 0; i < n; i++) { cout << a[i].rank << " "; cout << a[i].name << " "; cout << a[i].math << " " << a[i].phy << " " << a[i].che << " "; cout << a[i].total << " "; cout << "\n"; } return 0; }
Rank Name Maths Physics Chemistry Total 1 Kevin 95 85 99 279 2 Nicky 95 85 80 260 3 Bryan 80 95 85 260 4 Rohan 80 80 80 240 5 Steve 80 70 90 240
Artículos relacionados:
- ordenar() en C++ STL
- Función de comparación de qsort() en C
- C qsort() frente a C++ sort()
- Ordenar una array según el recuento de bits establecidos
Echa un vistazo al curso de autoaprendizaje de DSA
Este artículo es una contribución de Abhinav Tiwari . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA