Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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;
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote