Question: C + + program to balance chemical equations from an input file producing bad output. BalChemEquations.cpp: #include #include #include #include using namespace std; const int
Cprogram to balance chemical equations from an input file producing bad output.
BalChemEquations.cpp:
#include
#include
#include
#include
using namespace std;
const int MAXELEM ;
string namesMAXELEM;
int nElem ;
long long linsysMAXELEMMAXELEM;
long long gcdlong long a long long b
if b return a;
return gcdb a b;
int getIndexstring ename
for int i ; i nElem; i
if namesi ename return i;
namesnElem ename;
return nElem ;
void processTermstring t int& i long long coeffs
while i tlength
if ti
i;
return;
if ti
long long tmpCoeffsMAXELEM;
i;
processTermt i tmpCoeffs;
long long factor ;
while i tlength && isdigitti
factor factor ti;
i;
for int j ; j MAXELEM; j
coeffsj tmpCoeffsj factor;
else
string elem ;
elem ti;
if i tlength && islowerti
elem ti;
int index getIndexelem;
int val ;
while i tlength && isdigitti
val val ti;
coeffsindexval val : ;
bool solvelong long aMAXELEMMAXELEM int n int m long long soln
if n m
return false;
for int i ; i m; i
int j i;
while j n && aji
j;
if j n
return false;
for int k ; k m ; k
long long tmp aik;
aik ajk;
ajk tmp;
long long div aii;
for int k i ; k m ; k
if aik
div gcddiv absaik;
for int k i; k m ; k
aik div;
for int j i ; j n; j
if aji aii aii aji
for int k i; k m ; k
ajk aii;
long long mult aji aii;
for int k i; k m ; k
ajk aik mult;
for int i m; i n; i
if aim
return false;
for int i m ; i ; i
long long val aim;
for int j i ; j m; j
val aij solnj;
if val aii aii val
long long factor aii gcdval aii;
for int k ; k m; k Ensure this loop does not exceed bounds
if k MAXELEM
solnk factor; Modified line with a boundary check
if k n Check added to prevent buffer overrun
akm factor;
val factor;
if i MAXELEM
solni val aii; Ensure writing within bounds
return true;
bool badSolutionlong long soln int size
if soln
for int i ; i size; i
solni;
for int i ; i size; i
if solni
return true;
return false;
int main
string filename;
char runAgain;
do
cout "Enter filename: ;
cin filename;
ifstream filefilename;
if file
cerr "Error opening file." endl;
return ;
int numCases;
file numCases;
for int caseNum ; caseNum numCases; caseNum
int r p;
file r p;
nElem ;
for int i ; i MAXELEM; i
for int j ; j MAXELEM; j
linsysij;
for int i ; i r; i
string term;
file term;
for int j ; j MAXELEM; j
linsysji;
int index ;
long long coeffsMAXELEM;
processTermterm index, coeffs;
for int j ; j nElem; j
linsysji coeffsj;
for int i ; i p; i
string term;
file term;
for int j ; j
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
