can someone help me change the program into a 2 dimensional
can someone help me change the program into a 2 dimensional array and without the ** please
#include <iostream>
#include<fstream>
#include<string>
using namespace std;
int number_of_crs = 0;
void input(char**, float**, char*);
void output(char**, float** , char* , float, char*);
int compute_gpa(float**, char*);
int main(){
char* name_of_student;
char* grades = new char[10];
char **course_name = new char*[10];
float **metrics = new float*[10];
float sem_gpa;
for(int i=0; i<10; i++)
{
metrics[i] = new float[3];
}
input(course_name, metrics, name_of_student);
sem_gpa = compute_gpa(metrics, grades);
return 0;
}
void input(char **course_name, float **metrics, char* name_of_student){
int i = 0;
ifstream infile;
infile.open(\"data.txt\");
name_of_student = new char[256];
infile.getline(name_of_student, 100);
course_name[i] = new char[256];
string line;
while(infile.getline(course_name[i], 1000)){
infile >> metrics[i][0] >> metrics[i][1];
course_name[++i] = new char[256];
infile.ignore();
}
number_of_crs = i;
}
int compute_gpa(float **metrics, char* grades){
float sum_of_gpa = 0;
float sum_of_cre = 0;
for(int i=0; i< number_of_crs; i++){
if(metrics[i][0] >= 90 && metrics[i][0] <= 100){
metrics[i][2] = metrics[i][1]*4;
grades[i] = \'A\';
}
else if(metrics[i][0] >= 80 && metrics[i][0] <= 89){
metrics[i][2] = metrics[i][1]*3;
grades[i] = \'B\';
}
else if(metrics[i][0] >= 70 && metrics[i][0] <= 79){
metrics[i][2] = metrics[i][1]*2;
grades[i] = \'C\';
}
else if(metrics[i][0] >= 60 && metrics[i][0] <= 69){
metrics[i][2] = metrics[i][1];
grades[i] = \'D\';
}
else if(metrics[i][0] >= 0 && metrics[i][0] <= 59){
metrics[i][2] = 0;
grades[i] = \'F\';
}
else{
cout << \"Wrong Input\";
}
sum_of_gpa = sum_of_gpa + metrics[i][2];
sum_of_cre = sum_of_cre + metrics[i][1];
}
return sum_of_gpa/sum_of_cre;
}
void output(char** course_name, float** metrics, char* name_of_student, float sem_gpa, char* grades){
ofstream output_file(\"output.txt\");
output_file << name_of_student << \"\ \";
output_file.setf(ios::left, ios::adjustfield);
output_file.width(10);
output_file << \"Course\";
output_file.setf(ios::left, ios::adjustfield);
output_file.width(7);
output_file << \"Grades\";
output_file.setf(ios::left, ios::adjustfield);
output_file.width(7);
output_file << \"GPA\";
output_file.setf(ios::left, ios::adjustfield);
output_file.width(7);
output_file << \"Credits\ \";
for(int i=0; i< number_of_crs; i++)
{
output_file.setf(ios::left, ios::adjustfield);
output_file.width(10);
output_file << course_name[i];
output_file.setf(ios::left, ios::adjustfield);
output_file.width(7);
output_file << grades[i];
output_file.setf(ios::left, ios::adjustfield);
output_file.width(7);
output_file << metrics[i][2];
output_file.setf(ios::left, ios::adjustfield);
output_file.width(7);
output_file << metrics[i][1] << \"\ \";
}
output_file.precision(4);
output_file << \"Semester GPA : \" << sem_gpa;
output_file.close();
return;
}
Solution
HI, Please find my code.
I have changed every thing in compile time memory allocation.
Please let me know in case of any issue.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int number_of_crs = 0;
// function declarations
void input(char course_name[][256], float metrics[][3], char name_of_student[]);
void output(char course_name[][256], float metrics[][3] , char name_of_student[] , float sem_gpa, char grades[]);
int compute_gpa(float metrics[][3], char grades[]);
int main(){
char name_of_student[256];
char grades[10];
char course_name[10][256];
float metrics[10][3];
float sem_gpa;
input(course_name, metrics, name_of_student);
sem_gpa = compute_gpa(metrics, grades);
return 0;
}
void input(char course_name[][256], float metrics[][3], char name_of_student[]){
int i = 0;
ifstream infile;
infile.open(\"data.txt\");
infile.getline(name_of_student, 100);
string line;
while(infile.getline(course_name[i], 1000)){
infile >> metrics[i][0] >> metrics[i][1];
i++;
infile.ignore();
}
number_of_crs = i;
}
int compute_gpa(float metrics[][3], char grades[]){
float sum_of_gpa = 0;
float sum_of_cre = 0;
for(int i=0; i< number_of_crs; i++){
if(metrics[i][0] >= 90 && metrics[i][0] <= 100){
metrics[i][2] = metrics[i][1]*4;
grades[i] = \'A\';
}
else if(metrics[i][0] >= 80 && metrics[i][0] <= 89){
metrics[i][2] = metrics[i][1]*3;
grades[i] = \'B\';
}
else if(metrics[i][0] >= 70 && metrics[i][0] <= 79){
metrics[i][2] = metrics[i][1]*2;
grades[i] = \'C\';
}
else if(metrics[i][0] >= 60 && metrics[i][0] <= 69){
metrics[i][2] = metrics[i][1];
grades[i] = \'D\';
}
else if(metrics[i][0] >= 0 && metrics[i][0] <= 59){
metrics[i][2] = 0;
grades[i] = \'F\';
}
else{
cout << \"Wrong Input\";
}
sum_of_gpa = sum_of_gpa + metrics[i][2];
sum_of_cre = sum_of_cre + metrics[i][1];
}
return sum_of_gpa/sum_of_cre;
}
void output(char course_name[][256], float metrics[][3] , char name_of_student[] , float sem_gpa, char grades[]){
ofstream output_file(\"output.txt\");
output_file << name_of_student << \"\ \";
output_file.setf(ios::left, ios::adjustfield);
output_file.width(10);
output_file << \"Course\";
output_file.setf(ios::left, ios::adjustfield);
output_file.width(7);
output_file << \"Grades\";
output_file.setf(ios::left, ios::adjustfield);
output_file.width(7);
output_file << \"GPA\";
output_file.setf(ios::left, ios::adjustfield);
output_file.width(7);
output_file << \"Credits\ \";
for(int i=0; i< number_of_crs; i++)
{
output_file.setf(ios::left, ios::adjustfield);
output_file.width(10);
output_file << course_name[i];
output_file.setf(ios::left, ios::adjustfield);
output_file.width(7);
output_file << grades[i];
output_file.setf(ios::left, ios::adjustfield);
output_file.width(7);
output_file << metrics[i][2];
output_file.setf(ios::left, ios::adjustfield);
output_file.width(7);
output_file << metrics[i][1] << \"\ \";
}
output_file.precision(4);
output_file << \"Semester GPA : \" << sem_gpa;
output_file.close();
return;
}



