print students name in ascending according to marks

I had sort the mark for all tests, quizzes, assignments and final exam in ASCENDING order. But I don't know how to display all student's name in ascending order based on their mark for each tests, quizzes, assignments and final exam.

Below are my code to sort each mark for tests, quizzes, assignments and final exam in ascending order. How to change the code so that it will display the students name, not the marks for each tests, quizzes, assignments and final exam?

Please, help. Thank you in advance.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <string>
using namespace std;

//global constant
const int NUM_STUDENTS=5;//row
const int NUM_SCORES=4;//col
string name[5]={"Hani","Haziq","Aiman","Farah","Sabrina"};
string mark[4]={"test","quiz","assignment","final exam"};

//Function prototypes
void ascenDescen(double [ ][NUM_SCORES],int);

int main ( )
{
	cout<<"This program will help you keep track of your academic record!"<<endl;
	
	double scores[NUM_STUDENTS][NUM_SCORES]=
     {{9.0,2.7,16.0,78.0},
	  {7.4,2.7,19.0,88.0},
	  {8.9,3.5,17.5,93.7},
	  {10.0,3.0,19.5,64.8},
	  {6.3,3.0,16.0,74.2}};

	//function call
	ascenDescen(scores,NUM_STUDENTS);

	cout<<endl;
	cout<<"THANK YOU."<<endl;
 
	return 0;
}

void ascenDescen (double table[][NUM_SCORES],int rows)
{
	//for ascending 
	cout<<"Press ENTER to sort the mark for all tests, quizzes, assignments and final exam in ASCENDING order : \n\n"; 
	char ch;
	ch=cin.get();
	
	double ascen;
	for(int col=0;col<NUM_SCORES;col++)
	{
		for(int row=0;row<NUM_STUDENTS;row++)
		{
			 for(int j=row+1;j<NUM_STUDENTS;++j)
			 {
			 	if(table[row][col]>table[j][col])
                {
                	ascen=table[row][col];
                	table[row][col]=table[j][col];
                	table[j][col]=ascen;
                }
			 }
		}
		
		cout<<mark[col]<<" mark in ASCENDING order : \n";
    	for(int row=0;row<NUM_STUDENTS;row++)
    	{
        	cout<<"  ";
        	cout<<table[row][col];
        	cout<<endl;
    	}
	}
	 cout<<"________________________"<<endl;
	 
}
You could implement a simple selection sort algorithm in a seperate function and pass in your array in order to sort all the elements in ascending order:

https://www.geeksforgeeks.org/selection-sort/

Then you could print it out.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <string>
using namespace std;

//global constant
const int NUM_STUDENTS=5;//row
const int NUM_SCORES=4;//col
string name[5]={"Hani","Haziq","Aiman","Farah","Sabrina"};
string mark[4]={"test","quiz","assignment","final exam"};

struct student {
    
};

//Function prototypes
void ascenDescen(double [ ][NUM_SCORES],int);

int main ( )
{
	cout<<"This program will help you keep track of your academic record!"<<endl;
	
	double scores[NUM_STUDENTS][NUM_SCORES]=
     {{9.0,2.7,16.0,78.0},
	  {7.4,2.7,19.0,88.0},
	  {8.9,3.5,17.5,93.7},
	  {10.0,3.0,19.5,64.8},
	  {6.3,3.0,16.0,74.2}};

	//function call
	ascenDescen(scores,NUM_STUDENTS);

	cout<<endl;
	cout<<"THANK YOU."<<endl;
 
	return 0;
}

void ascenDescen (double table[][NUM_SCORES],int rows)
{
	//for ascending 
	cout<<"Press ENTER to sort the mark for all tests, quizzes, assignments and final exam in ASCENDING order : \n\n"; 
	cin.get();
	
	double ascen;
	string temp1[5] = name;
	string temp2;
	for(int col=0;col<NUM_SCORES;col++)
	{
		for(int row=0;row<NUM_STUDENTS;row++)
		{
			 for(int j=row+1;j<NUM_STUDENTS;++j)
			 {
			 	if(table[row][col]>table[j][col])
                {
                	ascen=table[row][col];
                	temp2 = temp1[row];
                	table[row][col]=table[j][col];
                	temp1[row] = temp1[j]; 
                	table[j][col]=ascen;
                	temp1[j] = temp2;
                	
                }
			 }
		}
		
		cout<<mark[col]<<" mark in ASCENDING order : \n";
    	for(int row=0;row<NUM_STUDENTS;row++)
    	{
        	cout<<"  ";
        	cout << temp1[row] << " " <<table[row][col];
        	cout<<endl;
    	}
    	for(int i = 0; i < NUM_STUDENTS; i++) 
    	{
    	temp1[i] = name[i];
    	}
	}
	 cout<<"________________________"<<endl;
	 
}
Thank you everyone. Really appreciate your replies.
Topic archived. No new replies allowed.