# Stored Formulae

Discussion in 'C++' started by Tazsweet19, Nov 11, 2009.

1. ### Tazsweet19Banned

Joined:
Nov 11, 2009
Messages:
1
0
Trophy Points:
0
I tried to understand about A calculate function which causes all of the stored formulae to be executed and the result stored in the cell that contains the formula while retaining the formula for reuse.

There is code

Code:
```
#include "stdafx.h"
#include <stdlib.h>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <exception>
#include <string>
#include <cstring>
#include <math.h>
using namespace std;

// The Calculator will take +,*,-,/ with the cell for A-F and numbers.
class Calculator {

private:

float result; //The result is total

public:
//bool flag; // Printed cannot divide by zero message flag
//The calcResult will figure out with +,-,*, or / then result where is cell with A-F and number.
// but The divide can't take zero and order the follow.
float calcResult(char oper, float num1, float num2) {
if (oper == '+') {
result = (num1 + num2);
} else if (oper == '-') {
result = (num1 - num2);
} else if (oper == '*') {
result = (num1 * num2);
} else if (oper == '/') {
if (num2 == 0) {
//if (!flag) {
cout << "cannot divide by zero.\a\n\n";
//    }
} else {
result = (num1 / num2);
}
} else {
result = 0;
}
return result;
}
};

//The spreadsheet will take where is rows and cols with max 10.

int x,y;
private:

static const int nRows = 10; //y number of rows (max 10)
static const int nCols = 6; //x letter of columns (max 10)
float sheet[nRows][nCols]; //Sheet nRows & nCols
char* sheetFunction[nRows][nCols]; //sheetFunction nRows & nCols*****
string usrDef[10];
Calculator cal;

// The initArray will loop with Rows and cols for numbers.
public:

ofstream toFile;
ifstream fromFile;

void initArray() {
x=65; y=48;
float k = 0;
for (int i = 0; i < nRows; i++) {
for (int j = 0; j < nCols; j++) {
sheet[i][j] = k;
sheetFunction[i][j] =0;// (char *)malloc(80); //max chars
// replace x with x++ to enumerate cells
}
}
for (int i = 0; i < 10; i++) {
usrDef[i] = "";
}
}

//The line is set up A-F and number with rows and cols.
void displayHdr() {
//system("clear");
cout << "\n|" << setw(4) << "" << "\t";
for (int i = 0; i < nCols; i++) {
cout << "|" << setw(9) << static_cast<char> (i + 65) << "\t";
}
cout << "|\n" << "        ";
for (int x = 0; x < nCols; x++) {
cout << "----------------";
}
cout << "\n";
}

// The displayRows will show output for line and help.
void displayRows() {
for (int i = 0; i < nRows; i++) {
cout << "|" << setw(4) << i << "\t";
for (int j = 0; j < nCols; j++) {
if (sheetFunction[i][j]!=0) processInput(sheetFunction[i][j]);
cout << "| " << setw(8) << sheet[i][j] << "\t";
}
cout << "|\n" << "        ";
for (int x = 0; x < nCols; x++) {
cout << "----------------";
}
cout << "\n";
}
cout << "\t**enter H to display the help screen**";
}

//The DisplayUrsDef will loop with i then set/get will
//call usrDef.
void displayUsrDef() {
for (int i = 0; i < 10; i++) {
if (usrDef[i] != "") {
cout << setw(4) << i << ") " << usrDef[i] << "\n";
}
}
cout << "\n";
}

// SetUsrDef with string X and int i.
void setUsrDef(int i, string x) {
usrDef[i] = x;
}

//string getUsrDef will call i.
string getUsrDef(int i) {
return usrDef[i];
}

// setCell will call the int with row and col
void setCell(int r1, int c1, float x) {
sheet[r1][c1] = x;
}

// float getcell with row and col
float getCell(int r1, int c1) {
return sheet[r1][c1];
}
bool processInput(string input){
if (toupper(input[0]) == 'Q') {
cout << "\nGoodbye\n";
exit(0);
}

else if (toupper(input[0]) == 'H') {
//system("clear");
cout << "\n**Welcome to the Help Screen**\n\n";
cout << "  Enter a value:          = A0 12.34\n";
cout << "  Perform operation:      + A0 A1 A2\n";
cout << "    +  -  *  /  \n\n";
cout << "  User Defined Functions:  \n";
displayUsrDef();
cout << "  Quit program:            Q\n";
cout << "\n\n**press any key to continue**\n";
}
else if (input[0] == '=') {
cout << "entered '=' sign\n";
char temp[10] = {};
for (int i = 5; i < input.length(); i++) {
temp[i - 5] = input[i];
}
setCell((input[3] - y), (toupper(input[2]) - x), atof(temp));
} else if (input[0] == '?') {
cout << "entered new function\n";
char* in=&input[0];
sheetFunction[input[3] - y][toupper(input[2]-x)]=(char *)malloc(80);
strcpy(sheetFunction[input[3] - y][toupper(input[2]) - x],in);
//then when redrawing you need to execute stored code
char temp[10] = {};
for (int i = 0; i < input.length(); i++) {
temp[i] = input[i];
}
// no input[2] if just ? poorly coded you assume things trying to read 3rd char but there is none
setUsrDef((input[2] - y), temp);
} else if (input[0] >= 0 && input[0] <= 9) {

string temp = getUsrDef(input[0]);
//printf("debug %s\n",sheetFunction[input[3] - y][toupper(input[2]) - x]);
} else if (input[0] == '+') {
//cout << "entered '+' sign.\n";
char* in=&input[0];
sheetFunction[input[3] - y][toupper(input[2]-x)]=(char *)malloc(80);
strcpy(sheetFunction[input[3] - y][toupper(input[2]) - x],in);
float temp = cal.calcResult('+',
getCell((input[3] - y), (toupper(input[2]) - x)),
getCell((input[6] - y), (toupper(input[5]) - x)));

setCell((input[9] - y), (toupper(input[8]) - x), temp);
} else if (input[0] == '-') {
//cout << "entered '-' sign.\n";
char* in=&input[0];
sheetFunction[input[3] - y][toupper(input[2]-x)]=(char *)malloc(80);
strcpy(sheetFunction[input[3] - y][toupper(input[2]) - x],in);
float temp = cal.calcResult('-',
getCell((input[3] - y), (toupper(input[2]) - x)),
getCell((input[6] - y), (toupper(input[5]) - x)));
setCell((input[9] - y), (toupper(input[8]) - x), temp);
} else if (input[0] == '*') {
//cout << "entered '*' sign.\n";
char* in=&input[0];
sheetFunction[input[3] - y][toupper(input[2]-x)]=(char *)malloc(80);
strcpy(sheetFunction[input[3] - y][toupper(input[2]) - x],in);
float temp = cal.calcResult('*',
getCell((input[3] - y), (toupper(input[2]) - x)),
getCell((input[6] - y), (toupper(input[5]) - x)));
setCell((input[9] - y), (toupper(input[8]) - x), temp);
} else if (input[0] == '/') {
//cout << "entered '/' sign.\n";
char* in=&input[0];
sheetFunction[input[3] - y][toupper(input[2]-x)]=(char *)malloc(80);
strcpy(sheetFunction[input[3] - y][toupper(input[2]) - x],in);
float temp = cal.calcResult('/',
getCell((input[3] - y), (toupper(input[2]) - x)),
getCell((input[6] - y), (toupper(input[5]) - x)));
setCell((input[9] - y), (toupper(input[8]) - x), temp);
} else {
cout << "Invalid entry." << endl;
}
// Clear printed divide by zero flag.
//cal.flag = false;
}
};

//UserInput will take the string. It will call input where
// in the cell with alpha and number.
class UserInput {
private:

string input;

public:

string getInput(string s) {
cout << "\n\n\t[" << s << "]: ";
getline(cin, input);
return input;
}
};

// The main will output where is cell with number and aphla for *,-,/ or +,
// The welcome to help screen and type the word where is the cell. The help call
// the example "= A0 12.34" and "+ A0 A1 A2".
int main() {

UserInput ui;
Calculator cal;
bool b = false;
static int x = 65;
static int y = 48;

cout << "\n\n";
ss.initArray();
//system("clear");

while (!b) {
while (!b) {
ss.displayHdr();
ss.displayRows();
b = true;
}

while (b) {
string input = ui.getInput("entry");
b=ss.processInput(input);
//     b = false;
}
}
cout << "\n\n";

return (0);
}
```

Joined:
Aug 6, 2004
Messages:
3,012