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

C++program to balance chemical equations from an input file producing bad output.
BalChemEquations.cpp:
#include
#include
#include
#include
using namespace std;
const int MAXELEM =30;
string names[MAXELEM];
int nElem =0;
long long linsys[MAXELEM][MAXELEM];
long long gcd(long long a, long long b){
if (b ==0) return a;
return gcd(b, a % b);
}
int getIndex(string ename){
for (int i =0; i nElem; i++)
if (names[i]== ename) return i;
names[nElem++]= ename;
return nElem -1;
}
void processTerm(string t, int& i, long long coeffs[]){
while (i t.length()){
if (t[i]==')'){
i++;
return;
}
if (t[i]=='('){
long long tmpCoeffs[MAXELEM]={0};
i++;
processTerm(t, i, tmpCoeffs);
long long factor =1;
while (i t.length() && isdigit(t[i])){
factor =10* factor + t[i]-'0';
i++;
}
for (int j =0; j MAXELEM; j++){
coeffs[j]+= tmpCoeffs[j]* factor;
}
} else {
string elem ="";
elem += t[i++];
if (i t.length() && islower(t[i])){
elem += t[i++];
}
int index = getIndex(elem);
int val =0;
while (i t.length() && isdigit(t[i])){
val =10* val + t[i++]-'0';
}
coeffs[index]+=(val >0)? val : 1;
}
}
}
bool solve(long long a[MAXELEM][MAXELEM], int n, int m, long long soln[]){
if (n m)
return false;
for (int i =0; i m; i++)
{
int j = i;
while (j n && a[j][i]==0)
j++;
if (j == n)
return false;
for (int k =0; k m +1; k++)
{
long long tmp = a[i][k];
a[i][k]= a[j][k];
a[j][k]= tmp;
}
long long div = a[i][i];
for (int k = i +1; k m +1; k++)
if (a[i][k]!=0)
div = gcd(div, abs(a[i][k]));
for (int k = i; k m +1; k++)
a[i][k]/= div;
for (int j = i +1; j n; j++)
{
if ((a[j][i]/ a[i][i])* a[i][i]!= a[j][i])
{
for (int k = i; k m +1; k++)
a[j][k]*= a[i][i];
}
long long mult = a[j][i]/ a[i][i];
for (int k = i; k m +1; k++)
{
a[j][k]-= a[i][k]* mult;
}
}
}
for (int i = m; i n; i++)
{
if (a[i][m]!=0)
return false;
}
for (int i = m -1; i >=0; i--)
{
long long val = a[i][m];
for (int j = i +1; j m; j++)
val -= a[i][j]* soln[j];
if ((val / a[i][i])* a[i][i]!= val)
{
long long factor = a[i][i]/ gcd(val, a[i][i]);
for (int k =0; k = m; k++)// Ensure this loop does not exceed bounds
{
if (k MAXELEM){
soln[k]*= factor; // Modified line with a boundary check
}
if (k n){// Check added to prevent buffer overrun
a[k][m]*= factor;
}
}
val *= factor;
}
if (i MAXELEM){
soln[i]= val / a[i][i]; // Ensure writing within bounds
}
}
return true;
}
bool badSolution(long long soln[], int size)
{
if (soln[0]0)
{
for (int i =0; i size; i++)
soln[i]*=-1;
}
for (int i =0; i size; i++)
{
if (soln[i]=0)
return true;
}
return false;
}
int main()
{
string filename;
char runAgain;
do
{
cout "Enter filename: ";
cin >> filename;
ifstream file(filename);
if (!file)
{
cerr "Error opening file." endl;
return 1;
}
int numCases;
file >> numCases;
for (int caseNum =1; caseNum = numCases; ++caseNum)
{
int r, p;
file >> r >> p;
nElem =0;
for (int i =0; i MAXELEM; i++)
for (int j =0; j MAXELEM; j++)
linsys[i][j]=0;
for (int i =0; i r; ++i)
{
string term;
file >> term;
for (int j =0; j MAXELEM; j++)
linsys[j][i]=0;
int index =0;
long long coeffs[MAXELEM]={0};
processTerm(term, index, coeffs);
for (int j =0; j nElem; j++)
linsys[j][i]= coeffs[j];
}
for (int i =0; i p; ++i)
{
string term;
file >> term;
for (int j =0; j
 C++program to balance chemical equations from an input file producing bad

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!