Apr 24, 2019 at 8:56pm UTC
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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
void sortArray(double *, string *, string *, int );
double getAverage(double *, int );
int main()
{
int numTests;
cout << "How many test scores will you enter? " ;
cin >> numTests;
double *testScores = new double [numTests];
string *FirstNames = new string[numTests];
string *LastNames = new string[numTests];
for (int i = 0; i < numTests; i++){
cout << "Student " << i + 1 << " First name: " ;
cin >> *(FirstNames + i);
cout << "Student " << i + 1 << " Last name: " ;
cin >> *(LastNames + i);
cout << "Test score: " ;
cin >> *(testScores + i);
while (*(testScores + i) < 0){
cout << "ERROR! Negative values not allowed!" ;
cout << " Enter again!\n" ;
cin >> *(testScores + i);
}
}
sortArray(testScores, FirstNames, LastNames, numTests);
cout << endl;
cout << "Student data you entered: " << endl;
cout << "FirstName\tLastName\tScore" << endl;
for (int i = 0; i < numTests; i++){
cout << *(FirstNames + i) << "\t\t" ;
cout << *(LastNames + i) << "\t\t" ;
cout << *(testScores + i) << endl;
}
cout << endl;
cout << "Average\t\t\t\t" << getAverage(testScores, numTests) << endl;
return 0;
}
void sortArray(double *ptr, string *namesPtr, string *namesPtr2, int arraySize){
double temp;
string tempName;
string tempName2;
bool swapped = true ;
while (swapped){
swapped = false ;
for (int i = 0; i < arraySize - 1; i++){
if (*(ptr+i) > *(ptr+i+1)){
temp = *(ptr+i+1);
tempName = *(namesPtr+i+1);
*(ptr+i+1) = *(ptr+i);
*(namesPtr+i+1) = *(namesPtr+i);
*(ptr+i) = temp;
*(namesPtr+i) = tempName;
swapped = true ;
}
}
}
}
double getAverage(double *ptr, int arraySize){
double total = 0.0;
for (int i = 0; i < arraySize; i++){
total += *(ptr + i);
}
return (double )total/arraySize;
}
Now I need the output to sort out the test scores in order starting from highest to lowest. Like this:
Obviously the names should be with the score too.
Last edited on Apr 24, 2019 at 9:01pm UTC
Apr 25, 2019 at 4:00pm UTC
To go from highest to lowest, simply check for < in line 77.
Your program is sorting scores and first names, but last names are not getting sorted. I ran your program (clicked the gear icon in your post), and saw this behavior.
Apr 25, 2019 at 6:21pm UTC
Thanks, however I need to display regular and highest to lowest scores.
Apr 25, 2019 at 8:33pm UTC
I'm not sure what you mean by "regular" scores.
However, given the code that you currently have, I would create another array containing indexes into the other arrays. You can sort the array of indexes any way you want to and never change the original array data.
So, create the array with values 0...numTests-1. Sort the indexes based on the test scores (
if ptr[myIndex[i]] > ptr[myIndex[i + 1]]
) or by names (
if namesPtr[myIndex[i]] < namesPtr[myIndex[i+1]]
) if you want. Then, you can print out the original data with:
1 2 3 4
for (int i = 0; i < numTests; i++){
cout << *(FirstNames + i) << "\t\t" ;
cout << *(LastNames + i) << "\t\t" ;
cout << *(testScores + i) << endl;
And for sorted data, you could print:
1 2 3 4
for (int i = 0; i < numTests; i++){
cout << *(FirstNames + myIndex[i]) << "\t\t" ;
cout << *(LastNames + myIndex[i]) << "\t\t" ;
cout << *(testScores + myIndex[i]) << endl;
Last edited on Apr 25, 2019 at 8:34pm UTC