Help me debugging this program

1 answer below »
Help me debugging this program
Answered Same DayFeb 24, 2021

Answer To: Help me debugging this program

Ria answered on Feb 25 2021
133 Votes
//
// main.cpp
// Assignment 1
//
// Created by Yaksh Arora on 2021-02-15.
//
#include
#include
#include
using namespace std;
class Integer
{
private: //Private member variables
char sign;
int length;
char* magnitude;
private: //Private member functions
//These member functions are utilities useful inside the class definition ONLY.
//We do not want them to be accessible outside the class definition.
void appendDigit(const char &digit);
void prependDigit(const char &digit);
void resize(const int &new_length);
void trim();
static int compare_magnitudes(const Integer &A, const Integer &B);
static Integer add_magnitudes(const Integer &A, const Integer &B);
static Integer subtract_magnitudes(const Integer &A, const Integer &B);
public: //Public member functions
Integer();
Integer(const int &);
Integer(const Integer &);
~Integer();
Integer& operator = (const Integer &);
Integer abs() const;
Integer opera
tor - () const;
Integer& operator ++ ();
Integer& operator -- ();
Integer operator ++ (int);
Integer operator -- (int);
Integer operator + (const Integer &) const;
Integer operator - (const Integer &) const;
Integer operator * (const Integer &) const;
Integer operator / (const Integer &) const;
Integer operator % (const Integer &) const;
Integer operator += (const Integer &);
Integer operator -= (const Integer &);
Integer operator *= (const Integer &);
Integer operator /= (const Integer &);
Integer operator %= (const Integer &);
bool operator == (const Integer &) const;
bool operator != (const Integer &) const;
bool operator > (const Integer &) const;
bool operator < (const Integer &) const;
bool operator >= (const Integer &) const;
bool operator <= (const Integer &) const;
friend Integer operator + (const int &, const Integer &);
friend Integer operator - (const int &, const Integer &);
friend Integer operator * (const int &, const Integer &);
friend Integer operator / (const int &, const Integer &);
friend Integer operator % (const int &, const Integer &);
friend bool operator == (const int &, const Integer &);
friend bool operator != (const int &, const Integer &);
friend bool operator > (const int &, const Integer &);
friend bool operator < (const int &, const Integer &);
friend bool operator >= (const int &, const Integer &);
friend bool operator <= (const int &, const Integer &);
friend ostream& operator << (ostream &, const Integer &);
};
void Integer::appendDigit(const char &digit)
{
char *temp = new char [this->length + 1];
for(int i=0;ilength;i++)
temp[i] = this->magnitude[i];
temp[length] = digit;
delete [] this->magnitude;
this->magnitude = new char [this->length + 1];
this->magnitude = temp;
this->length +=1;
}
void Integer::prependDigit(const char &digit)
{
char *temp = new char [this->length + 1];
temp[0] = digit;
for(int i=1;ilength;i++)
temp[i] = this->magnitude[i];
delete [] this->magnitude;
this->magnitude = new char [this->length + 1];
this->magnitude = temp;
this->length +=1;
}
void Integer::resize(const int &new_length)
{
if(new_length>this->length)
{
char *temp = new char [new_length];
for(int i=0;ilength;i++)
temp[i] = '0';
for(int i=new_length-this->length;i temp[i] = this->magnitude[i-(new_length-this->length)];
delete[] this->magnitude;
this->magnitude = new char [new_length];
this->magnitude = temp;
this->length = new_length;
}
}
void Integer::trim()
{
if(this->length > 1)
{
int count = 0, i = 0;
while(this->magnitude[i] == '0' && i < this->length)
{
i++;
count++;
}
if(count == this->length)
{
delete [] this->magnitude;
this->magnitude = new char [1];
this->magnitude[0] = '0';
this->length = 1;
}
else if(count > 0 && count < this->length)
{
char *temp = new char [this->length - count];
for(int i=count;ilength;i++)
temp[i-count] = this->magnitude[i];
delete [] this->magnitude;
this->magnitude = new char [this->length - count];
this->magnitude = temp;
this->length -=count;
}
}
}
int Integer::compare_magnitudes(const Integer &A, const Integer &B)
{
int m = A.length > B.length? A.length:B.length;
Integer temp1 = A, temp2 = B;
temp1.resize(m);
temp2.resize(m);
for(int i=0;i {
if(temp1.magnitude[i]>temp2.magnitude[i])
return 1;
else if(temp1.magnitude[i] return -1;
}
return 0;
}
Integer Integer::add_magnitudes(const Integer &A, const Integer &B)
{
Integer temp1 = A,temp2 = B;
int n1 = 0, n2 = 0, n3 = 0;
int m = A.length > B.length? A.length:B.length;
temp1.resize(m);
temp2.resize(m);
for(int i=0;i {
n1 = n1*10 + (temp1.magnitude[i] - '0');
n2 = n2*10 + (temp2.magnitude[i] - '0');
}
n3 = n1+n2;
Integer temp(n3);
temp.sign = '+';
return temp;
}
Integer Integer::subtract_magnitudes(const Integer &A, const Integer &B)
{
Integer temp1 = A,temp2 = B;
int n1 = 0, n2 = 0, n3 = 0;
int m = A.length > B.length? A.length:B.length;
temp1.resize(m);
temp2.resize(m);
for(int i=0;i {
n1 = n1*10 + (temp1.magnitude[i] - '0');
n2 = n2*10 + (temp2.magnitude[i] - '0');
}
n3 = n1 - n2;
Integer temp(n3);
temp.sign = '+';
return temp;
}
/////The following function definitions are provided for you. Use them without any modification./////
Integer :: Integer()
{
sign = '+';
length = 0;
//No other initialization. Do not change this function definition.
}
Integer::Integer(const int & j)
{
int d;
if(j<0)
d = -j;
else
d = j;
while(d > 0)
{
d/=10;
length++;
}
if(j<0)
d = -j;
else
d = j;
this->magnitude = new char [length];
for(int i=length-1;i>=0;i--)
{
this->magnitude[i] = '0' + d%10;
d/=10;
}
if(j<0)
this->sign = '-';
else
this->sign = '+';
}
Integer::Integer(const Integer & e)
{
this->~Integer();
this->sign = e.sign;
this->length = e.length;
this->magnitude = new char [length];
for(int i=0;i {
this->magnitude[i] = e.magnitude[i];
}
}
Integer::~Integer()
{
if(this->length > 0)
{
delete[] this->magnitude;
this->length = 0;
this->sign = '+';
}
}
Integer& Integer::operator = (const Integer & e)
{
this->~Integer();
this->sign = e.sign;
this->length = e.length;
this->magnitude = new char [length];
for (int i=0;i this->magnitude[i] = e.magnitude[i];
return *this;
// magnitude= new char[e.length];
// for (int i=0;i// this->magnitude[i] = e.magnitude[i];
// this->sign = e.sign;
// this->trim();
// return *this;
}
Integer Integer::abs() const
{
Integer temp = *this;
if(this->sign == '-')
temp.sign = '+';
return temp;
}
Integer Integer::operator - () const
{
Integer temp = *this;
if(temp.sign == '+')
temp.sign = '-';
else
temp.sign = '+';
return temp;
}
Integer& Integer::operator ++ ()
{
*this = *this + 1;
return *this;
}
Integer& Integer::operator -- ()
{
*this = *this - 1;
return *this;
}
Integer Integer::operator ++ (int)
{
Integer temp = *this;
++(*this);
return temp;
}
Integer Integer::operator -- (int)
{
Integer temp = *this;
++(*this);
return temp;
}
Integer Integer::operator + (const Integer & A) const
{
Integer temp;
if(this->sign == '-' && A.sign == '-')
{
temp = add_magnitudes(*this, A);
temp.sign = '-';
}
else if(this->sign == '-' && A.sign == '+')
{
if(compare_magnitudes(*this, A)==1)
{
temp = subtract_magnitudes(*this, A);
temp.sign = '-';
}
else if(compare_magnitudes(*this, A) == -1)
{
temp = subtract_magnitudes(A, *this);
temp.sign = '+';
}
else if(compare_magnitudes(*this, A) == 0)
{
temp = subtract_magnitudes(*this, A);
temp.sign = '+';
}
}
else if(this->sign == '+' && A.sign == '-')
{
if(compare_magnitudes(*this, A)==1)
{
temp = subtract_magnitudes(*this, A);
temp.sign = '+';
}
else if(compare_magnitudes(*this, A) == -1)
{
temp = subtract_magnitudes(A, *this);
temp.sign = '-';
}
else if(compare_magnitudes(*this, A) == 0)
{
temp = subtract_magnitudes(*this, A);
temp.sign = '+';
}
}
else if(this->sign == '+' && A.sign == '+')
{
temp = add_magnitudes(*this, A);
temp.sign = '+';
}
return temp;
}
Integer Integer::operator - (const Integer & A) const
{
Integer temp;
if(this->sign == '-' && A.sign == '-')
{
if(compare_magnitudes(*this, A)==1)
{
temp = subtract_magnitudes(*this, A);
temp.sign = '-';
}
else if(compare_magnitudes(*this, A) == -1)
{
temp = subtract_magnitudes(A, *this);
temp.sign = '+';
}
else if(compare_magnitudes(*this, A) == 0)
{
temp = subtract_magnitudes(*this, A);
temp.sign = '+';
}
}
else if(this->sign == '+' && A.sign == '-')
{
temp = add_magnitudes(*this, A);
temp.sign = '+';
}
else if(this->sign == '-' && A.sign == '+')
{
temp = add_magnitudes(*this,A);
...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here