This is a revision of a previous exercise, here is the question: Perform exercis
ID: 3677814 • Letter: T
Question
This is a revision of a previous exercise, here is the question:
Perform exercise 4 at the end chapter 8 of your textbook using dynamic arrays. (This time the program must use dynamic arrays). I have regular array version posted below.
C++: Write a program that reads a file consisting of students’ test scores in the range 0-200. It should then determine the number of students having scores in each of the following ranges: 0-24, 25-49, 50-74, 75-99, 100-124, 125-149, 150-174, and 175-200. Output the score ranges and the number of students. (Run your program with the following input data: 76, 89, 150, 135, 200, 76, 12, 100, 150, 28, 178, 189, 167, 200, 175, 150, 87, 99, 129, 149, 176, 200, 87, 35, 157, 189.)
Here is the data file: grades.txt
76
89
150
135
200
76
12
100
150
28
178
189
167
200
175
150
87
99
129
149
176
200
87
35
157
189
Special Note: The program needs to be run on dynamic arrays. This must be on C++ format and it needs to be a working code with Comments (I would appreciate it even if the comments are in the dynamic array parts only). I have the regular array version posted below, it just needs to be turned into dynamic array. Please check first if the program has compiling errors before posting it. I really dont wish to waste a question again because of compiling errors, so please check it first. I would really appreciate it if this becomes a working program. Please help, thanks.
using namespace std;
const int maxCategory = 8; //You have 8 categories (0-24, 25-49, 50-74, 75-99, 100-124, 125-149, 150-174, and 175-200) so why did you put 7?
int getCategory(int);
void initialize(int student[]);
void getStudent(int category, int student[]);
void printArray(int category, int student[]);
int main()
{
int category;
int score;
int student[maxCategory]; //should be array of 8 ints instead of 7 as you defined maxCategory...
ifstream infile;
infile.open("grades.txt");
if(!infile)
{
cout << "Cannot open input file." << endl;
system("pause");
return 0;
}
initialize(student);
infile>>score;
while (!infile.eof())
{
category = getCategory(score);
getStudent(category, student);
infile>>score;
}
infile.close();
printArray(category, student);
return 0;
}
void initialize(int student[])
{
int j;
for(j = 0; j < maxCategory; j++) //for array index range from 0 to (elements - 1), so j should be run from 0 to 7 and does not have to equal maxCategory, just put j < maxCategory
{
student[j] = 0;
}
}
void getStudent(int c, int s[])
{
if (c < maxCategory) //same here does not need c <=
{
s[c]++;
}
}
void printArray(int category, int student[])
{
string scoreRange;
cout << "Score Range" << " ";
cout << "Number of Students" << endl;
for (category = 0; category < maxCategory; category++) //here too
{
switch(category)
{
case 0:
scoreRange="0-24";
break;
case 1:
scoreRange="25-49";
break;
case 2:
scoreRange="50-74";
break;
case 3:
scoreRange="75-99";
break;
case 4:
scoreRange="100-124";
break;
case 5:
scoreRange="125-149";
break;
case 6:
scoreRange="150-174";
break;
case 7:
scoreRange="175-200";
break;
}
cout << scoreRange << " ";
cout << student[category] << endl;
}
}
int getCategory(int score)
{
int scoreRange;
if (score>=0 && score<25)
scoreRange=0;
else if (score>=25 && score<50)
scoreRange=1;
else if (score>=50 && score<75)
scoreRange=2;
else if (score>=75 && score<100)
scoreRange=3;
else if (score>=100 && score<125)
scoreRange=4;
else if (score>=125 && score<150)
scoreRange=5;
else if (score>=150 && score<175)
scoreRange=6;
else if (score>=175 && score<=200)
scoreRange=7;
else
cout << "Out of range 0-200 ";
return scoreRange;
}
Explanation / Answer
Hi, I have created array student dynamically. Please let me know if any change needs.
#include <iostream>
#include <fstream>
#include <string>
#include<stdlib.h>
using namespace std;
const int maxCategory = 8; //You have 8 categories (0-24, 25-49, 50-74, 75-99, 100-124, 125-149, 150-174, and 175-200) so why did you put 7?
int getCategory(int);
void initialize(int student[]);
void getStudent(int category, int student[]);
void printArray(int category, int student[]);
int main()
{
int category;
int score;
/********* ceating aray dynamically *************/
int *student = new int[maxCategory]; // using new operator to create an array of size 8
ifstream infile;
infile.open("grades.txt");
if(!infile)
{
cout << "Cannot open input file." << endl;
system("pause");
return 0;
}
initialize(student);
infile>>score;
while (!infile.eof())
{
category = getCategory(score);
getStudent(category, student);
infile>>score;
}
infile.close();
printArray(category, student);
// deleting dynamically created array
delete [] student;
return 0;
}
void initialize(int student[])
{
int j;
for(j = 0; j < maxCategory; j++) //for array index range from 0 to (elements - 1), so j should be run from 0 to 7 and does not have to equal maxCategory, just put j < maxCategory
{
student[j] = 0;
}
}
void getStudent(int c, int s[])
{
if (c < maxCategory) //same here does not need c <=
{
s[c]++;
}
}
void printArray(int category, int student[])
{
string scoreRange;
cout << "Score Range" << " ";
cout << "Number of Students" << endl;
for (category = 0; category < maxCategory; category++) //here too
{
switch(category)
{
case 0:
scoreRange="0-24";
break;
case 1:
scoreRange="25-49";
break;
case 2:
scoreRange="50-74";
break;
case 3:
scoreRange="75-99";
break;
case 4:
scoreRange="100-124";
break;
case 5:
scoreRange="125-149";
break;
case 6:
scoreRange="150-174";
break;
case 7:
scoreRange="175-200";
break;
}
cout << scoreRange << " ";
cout << student[category] << endl;
}
}
int getCategory(int score)
{
int scoreRange;
if (score>=0 && score<25)
scoreRange=0;
else if (score>=25 && score<50)
scoreRange=1;
else if (score>=50 && score<75)
scoreRange=2;
else if (score>=75 && score<100)
scoreRange=3;
else if (score>=100 && score<125)
scoreRange=4;
else if (score>=125 && score<150)
scoreRange=5;
else if (score>=150 && score<175)
scoreRange=6;
else if (score>=175 && score<=200)
scoreRange=7;
else
cout << "Out of range 0-200 ";
return scoreRange;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.