Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

I need help figuring out what's wrong with this C++ code! Please let me know asap. // // main.cpp // A1 // // Created by

I need help figuring out what's wrong with this C++ code! Please let me know asap.

// // main.cpp // A1 // // Created by unknown // ONLY 4 STEPS

#include #include #include #include #include #include using namespace std;

/* Char class */

class Char //define complex data type, Char...models the primitive type char { char value; //declare a char under value (private is assumed) public: Char() { this->value = '\0'; } //Default constructor that sets the data section of the class to null (binary 0) Char(char c) { this->value = c; } //Overloaded constructor that takes a primitive char as an argument and sets data section of the class to the argument Char(int c) { this->value = (char)c; } //Overloaded constructor that takes a primitive int as parameter and sets data sect of class as character from argument Char(const Char &c) { this->value = c.value; } //Overloaded constructor that takes complex Char type as a parameter and sets data sect of class with that of argument Char(string s) { this->value = s[0]; } //Overloaded Constructor that takes string type as a parameter and sets data sect of class to first char in the string char getValue() { return this->value;} //returns data sect of class void equals(const Char &c) { this->value = c.value; } //mutator sets the data section to the data section of the argument void equals(char c) { this->value = c; } //mutator sets the data section to the primitive argument void equals(int); //mutator prototype char toChar() const { return this->value; } //accessor returns the data section of the class as a char int toInt() const { return (int)this->value; } //accessor returns the data section of the class as an int string toString() { return to_string(this->value); } //accessor returns the data section of the class as a string string toHexString(); //accessor prototype string operator+(char c); //accessor prototype string operator + (const Char &c); //accessor prototype };

void Char::equals(int c) { if (c<32 || c>127) { cout<<"Invalid Character"; } this->value = (char)c; } //Concatenates data section of the class with the data section of the parameter and returns the two characters as a string

string Char::toHexString() { stringstream output; //create local object of string stream output< return output.str(); //finally return string } //Returns the data section of the class as a hexadecimal valued string

string Char::operator+(char c) { value + to_string(c); string s; s=(char)c; return value + s; } //Concatenates data section of the class with the parameter and returns the two characters as a string

string Char::operator + (const Char &c) { value + to_string(c.value); string s; s=(char)c.value; return value + s; } //Concatenates data section of the class with data section of the parameter and returns the two characters as a string

/* BigDecimal class */

class BigDecimal //define complex data type, BigDecimal { vector chars; //declare a vector public: BigDecimal(); //default constructor prototype BigDecimal(string value); //overloaded constructor prototype BigDecimal(const BigDecimal &value) { vectorvalList = value.chars; for (int i=0; i { chars.push_back(valList.at(i)); } } //overloaded constructor adds chars to container void equals(char ch); //mutator prototype void equals(string value); //mutator prototype vectorgetValue() {return this->chars;} //returns from data section BigDecimal add(BigDecimal) { double num1 = this->wholeNumber()+this->fraction(); double num2 = wholeNumber()+fraction(); return to_string(num1+num2); } //mutator adds the values together and returns the result as a Big Decimal BigDecimal sub(BigDecimal) { double num1 = this->wholeNumber()+this->fraction(); double num2 = wholeNumber()+fraction(); return to_string(num1-num2); } //mutator subtracts the two values and returns the result as a BigDecimal int wholeNumber(); //method proto double fraction(); //method proto double toDouble() { return this->wholeNumber()+this->fraction(); } //accessor returns the value stored in the container as a double string toString() { return to_string(toDouble()); } //accessor returns the value store in the container as a string Char at(int index) { return chars.at(index); } //accessor returns the value at the particular index as a Char private: bool isNumber(Char ch) { char c = ch.toChar(); return (c>='0' && c<='9'); } //check if the number has a decimal point bool containsDecimal() { bool contains = false; for (Char c : this->chars) { if('.'==c.toChar()) { contains = true; } } return contains; } //validate if the string contains a valid number bool validateString(string value) { bool flag = false; for(int i=0;value[i]!='\0';i++) //check each character from beginning till the end { if(value[i] == ' ') //if the space is found, just continue the process { continue; } else { if((value[i] >= 'A' && value[i] <= 'Z') || (value[i] >= 'a' && value[i] <= 'z')) //if any character is found in string, it will check whether the character is alphabet or not flag = true; //accepts the alphabet in lower case and upper case else { flag = false; //if number is found or any special character is found, it will break the loop by sending false break; } } } return flag; }

};

BigDecimal::BigDecimal() { chars.push_back('0'); chars.push_back('.'); chars.push_back('0'); } //default constructor sets contianer to three Char objects that contain the values '0' '.' '0'

BigDecimal::BigDecimal(string value) { // in case of #'s like .76 if (value[0]=='.') { chars.push_back('0'); } bool validateString(string value); for (int i=0; i { chars.push_back(value[i]); } } //overloaded constructor parses the string taking each digit, putting it into a new Char and adding the Char to the vector

void BigDecimal::equals(char ch) { BigDecimal number = to_string(ch); this->chars = number.chars; } //a char that contains a digit

void BigDecimal::equals(string value) { bool validateString(string value); BigDecimal number = value; this->chars = number.chars; } //does the same as the overloaded constructor that takes a string

int BigDecimal::wholeNumber() { vectorsubChars; if (containsDecimal()) { int index = 0; for (Char c : this->chars) { if ('.'==c.toChar()) { break; } index++; } vectorsubChars (chars.begin()+0, chars.begin()+index); } else { subChars = this->chars; } string s=""; for (Char c : subChars) { s += c.toString(); } return stoi(s); } //returns only the whole number portion of the decimal number as an int

double BigDecimal::fraction() { string fraction; vectorsubChars; if (containsDecimal()) { int index = 0; for (Char c : this->chars) { if ('.'==c.toChar()) { break; } index++; } vectorsubChars (chars.begin()+index+1, chars.begin()+this->chars.size()); fraction = "0."; for (Char c : subChars) { fraction += c.toString(); } } else { //If no fraction part, return default fraction = 0.0 fraction = "0.0"; } return stod(fraction); } //returns the fractional portion of the number as double

/* Exception Handling */

class CharException:public exception { private: static constexpr long long serialVersionUID = 1LL; public: CharException(string message) { } };

class BigDecimalException:public CharException { private: static constexpr long long serialVersionUID = 1LL; public: BigDecimalException(string message); };

BigDecimalException::BigDecimalException(string message):CharException(message) { }

/* Testing */

int main() { Char ch = 'A'; Char c = 'B'; cout << ch.operator +(c) << endl; cout << ch.toChar() << " In Hex: " << ch.toHexString() << endl; cout << ch.toChar() << " In Int: " << ch.toInt() << endl; try { ch.equals(140); cout << ch.toChar() << endl; } catch(CharException ce) { cout << ce.what() << endl; } Char x = 34; cout << x.toString() << endl;

/* - BigDecimal Test Class - Reads numbers from a file - Outputs 2 files - 1 file contains whole part and 2nd file contains fraction part */

vectornumbersList; string line; ifstream myfile ("file.txt"); while(getline(myfile,line)) { try { BigDecimal b; numbersList.push_back(b); } catch (BigDecimalException bde) { cout<< bde.what() << endl; } } vectorwholeList; vectorfracList; for (BigDecimal bd : numbersList) { wholeList.push_back(bd.wholeNumber()); fracList.push_back(bd.fraction()); } fstream file, file1; //opens the file if exist file.open("wholeNumber.txt", fstream::in | fstream::out | fstream::app); file1.open("fraction.txt", fstream::in | fstream::out | fstream::app); wholeList[20]; fracList[20]; //creates new file if the file does not exist if(!file.is_open()){ ifstream file("wholeNumber.txt"); } if(!file1.is_open()){ ifstream file("fraction.txt"); } //Write to the file ofstream os("wholeNumber.txt"); if (!os) { std::cerr<<"Error writing to ..."< } else { for(int i=0;i<20;i++) os << wholeList[i]<<" "; } ofstream os1("fraction.txt"); if (!os1) { std::cerr<<"Error writing to ..."< } else { for(int i=0;i<20;i++) os1 << fracList[i]<<" "; } return 0; }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Real Time Database Systems Architecture And Techniques

Authors: Kam-Yiu Lam ,Tei-Wei Kuo

1st Edition

1475784023, 978-1475784022

More Books

Students also viewed these Databases questions

Question

Discuss five types of employee training.

Answered: 1 week ago

Question

Identify the four federally mandated employee benefits.

Answered: 1 week ago