Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

PART 2: The implementation of the class LargeInt (same idea as project 2) will u

ID: 3556926 • Letter: P

Question

PART 2:

The implementation of the class LargeInt (same idea as project 2) will use a dynamic physical structure to store the individual digits of an integer, and will provide some basic I/O and arithmetic operations that can be performed on integers.

In particular, the class should include:

Note 1: since the LargeInt class does not contain pointers, there is no need for a copy constructor or a destructor.

Note 2: huge integers may be positive or negative (or zero);

Note 3: your implementation of the huge integer type must be encapsulated as a C++ class, aggregating a list object for the internal representation of the huge integer value. The huge integer type is not a list, nor does it make sense for it to be derived from a list using inheritance.

Note 4: Aside from list nodes used only within an encapsulating list template, all data members of classes and templates must be private or protected. Friend operators are permissible, but the huge integer type should absolutely not be declared a friend of the list.

Your submitted program will be assigned a score based upon:

This is the main given:

#include "LargeInt.h"


using namespace std;

int main ()
{
LargeInt x, y, z;

cout << "Enter an integer of your choice : ";
cin >> x;
  
cout<< "Enter another integer of your choice: ";
cin >> y;



if ( x == y )
cout<<" The two numbers entered are equal";
else
cout<<" The two numbers entered are different";
  
z = x + y;
  
cout<<" The sum of "<<x<<" and "<<y<< " is : "<<z<<endl;

system("pause");


}

Design and implement a class representing a doubly linked list. The class must have the following requirements: The linked list and the nodes must be implemented as C++ templates The list must be generic - it should not implement arithmetic/logic functions. It must include a destructor and a copy constructor It must include methods to insert at the front and at the back to the list It must include a method to return the length of the list It must provide an iterator-based interface for the user from front to back It must include an iterator-based interface for the user from back to front

Explanation / Answer

#include<iostream>
#include<cstdio>
#include<cstdlib>
/*
* Node Declaration
*/
using namespace std;
struct node
{
int info;
struct node *next;
struct node *prev;
}*start;

/*
Class Declaration
*/
class double_llist
{
public:
void create_list(int value);
void add_begin(int value);
void add_after(int value, int position);
void delete_element(int value);
void search_element(int value);
void display_dlist();
void count();
void reverse();
double_llist()
{
start = NULL;
}
};

/*
* Main: Conatins Menu
*/
int main()
{
int choice, element, position;
double_llist dl;
while (1)
{
cout<<endl<<"----------------------------"<<endl;
cout<<endl<<"Operations on Doubly linked list"<<endl;
cout<<endl<<"----------------------------"<<endl;   
cout<<"1.Create Node"<<endl;
cout<<"2.Add at begining"<<endl;
cout<<"3.Add after position"<<endl;
cout<<"4.Delete"<<endl;
cout<<"5.Display"<<endl;
cout<<"6.Count"<<endl;
cout<<"7.Reverse"<<endl;
cout<<"8.Quit"<<endl;
cout<<"Enter your choice : ";
cin>>choice;
switch ( choice )
{
case 1:
cout<<"Enter the element: ";
cin>>element;
dl.create_list(element);
cout<<endl;
break;
case 2:
cout<<"Enter the element: ";
cin>>element;
dl.add_begin(element);
cout<<endl;
break;
case 3:
cout<<"Enter the element: ";
cin>>element;
cout<<"Insert Element after postion: ";
cin>>position;
dl.add_after(element, position);
cout<<endl;
break;
case 4:
if (start == NULL)
{
cout<<"List empty,nothing to delete"<<endl;   
break;
}
cout<<"Enter the element for deletion: ";
cin>>element;
dl.delete_element(element);
cout<<endl;
break;
case 5:
dl.display_dlist();
cout<<endl;
break;
case 6:
dl.count();
break;
case 7:
if (start == NULL)
{
cout<<"List empty,nothing to reverse"<<endl;
break;
}
dl.reverse();
cout<<endl;
break;
case 8:
exit(1);
default:
cout<<"Wrong choice"<<endl;
}
}
return 0;
}

/*
* Create Double Link List
*/
void double_llist::create_list(int value)
{
struct node *s, *temp;
temp = new(struct node);
temp->info = value;
temp->next = NULL;
if (start == NULL)
{
temp->prev = NULL;
start = temp;
}
else
{
s = start;
while (s->next != NULL)
s = s->next;
s->next = temp;
temp->prev = s;
}
}

/*
* Insertion at the beginning
*/
void double_llist::add_begin(int value)
{
if (start == NULL)
{
cout<<"First Create the list."<<endl;
return;
}
struct node *temp;
temp = new(struct node);
temp->prev = NULL;
temp->info = value;
temp->next = start;
start->prev = temp;
start = temp;
cout<<"Element Inserted"<<endl;
}

/*
* Insertion of element at a particular position
*/
void double_llist::add_after(int value, int pos)
{
if (start == NULL)
{
cout<<"First Create the list."<<endl;
return;
}
struct node *tmp, *q;
int i;
q = start;
for (i = 0;i < pos - 1;i++)
{
q = q->next;
if (q == NULL)
{
cout<<"There are less than ";
cout<<pos<<" elements."<<endl;
return;
}
}
tmp = new(struct node);
tmp->info = value;
if (q->next == NULL)
{
q->next = tmp;
tmp->next = NULL;
tmp->prev = q;
}
else
{
tmp->next = q->next;
tmp->next->prev = tmp;
q->next = tmp;
tmp->prev = q;
}
cout<<"Element Inserted"<<endl;
}

/*
* Deletion of element from the list
*/
void double_llist::delete_element(int value)
{
struct node *tmp, *q;
/*first element deletion*/
if (start->info == value)
{
tmp = start;
start = start->next;
start->prev = NULL;
cout<<"Element Deleted"<<endl;
free(tmp);
return;
}
q = start;
while (q->next->next != NULL)
{   
/*Element deleted in between*/
if (q->next->info == value)
{
tmp = q->next;
q->next = tmp->next;
tmp->next->prev = q;
cout<<"Element Deleted"<<endl;
free(tmp);
return;
}
q = q->next;
}
/*last element deleted*/
if (q->next->info == value)
{   
tmp = q->next;
free(tmp);
q->next = NULL;
cout<<"Element Deleted"<<endl;
return;
}
cout<<"Element "<<value<<" not found"<<endl;
}

/*
* Display elements of Doubly Link List
*/
void double_llist::display_dlist()
{
struct node *q;
if (start == NULL)
{
cout<<"List empty,nothing to display"<<endl;
return;
}
q = start;
cout<<"The Doubly Link List is :"<<endl;
while (q != NULL)
{
cout<<q->info<<" <-> ";
q = q->next;
}
cout<<"NULL"<<endl;
}

void double_llist::count()
{   
struct node *q = start;
int cnt = 0;
while (q != NULL)
{
q = q->next;
cnt++;
}
cout<<"Number of elements are: "<<cnt<<endl;
}

/*
* Reverse Doubly Link List
*/
void double_llist::reverse()
{
struct node *p1, *p2;
p1 = start;
p2 = p1->next;
p1->next = NULL;
p1->prev = p2;
while (p2 != NULL)
{
p2->prev = p2->next;
p2->next = p1;
p1 = p2;
p2 = p2->prev;
}
start = p1;
cout<<"List Reversed"<<endl;
}

#include<iostream.h>
#include<conio.h>

class complex
{
int a,b;
public:
void getvalue()
{
cout<<"Enter the value of Complex Numbers a,b:";
cin>>a>>b;
}
complex operator+(complex ob)
{
complex t;
t.a=a+ob.a;
t.b=b+ob.b;
return(t);
}
complex operator-(complex ob)
{
complex t;
t.a=a-ob.a;
t.b=b-ob.b;
return(t);
}
void display()
{
cout<<a<<"+"<<b<<"i"<<" ";
}
};

void main()
{
clrscr();
complex obj1,obj2,result,result1;

obj1.getvalue();
obj2.getvalue();

result = obj1+obj2;
result1=obj1-obj2;

cout<<"Input Values: ";
obj1.display();
obj2.display();
  
cout<<"Result:";
result.display();
result1.display();
  
getch();
}


//Increment and decrement overloading

#include<iostream>
using namespace std;


class Inc {
   private:
       int count ;
   public:
       Inc() {
           //Default constructor
           count = 0 ;
       }
      
       Inc(int C) {
           // Constructor with Argument
           count = C ;
       }

       Inc operator ++ () {
           // Operator Function Definition
           // for prefix
           return Inc(++count);
       }

       Inc operator ++ (int) {
           // Operator Function Definition
           // with dummy argument for postfix
           return Inc(count++);
       }

       Inc operator -- () {
           // Operator Function Definition
           // for prefix
           return Inc(--count);
       }

       Inc operator -- (int) {
           // Operator Function Definition
           // with dummy argument for postfix
           return Inc(count--);
       }

       void display(void) {
           cout << count << endl ;
       }
};

int main() {
   Inc a, b(4), c, d, e(1), f(4);

   cout << "Before using the operator ++() ";
   cout << "a = ";
   a.display();
   cout << "b = ";
   b.display();

   ++a;
   b++;

   cout << "After using the operator ++() ";
   cout << "a = ";
   a.display();
   cout << "b = ";
   b.display();

   c = ++a;
   d = b++;

   cout << "Result prefix (on a) and postfix (on b) ";
   cout << "c = ";
   c.display();
   cout << "d = ";
   d.display();

   cout << "Before using the operator --() ";
   cout << "e = ";
   e.display();
   cout << "f = ";
   f.display();

   --e;
   f--;

   cout << "After using the operator --() ";
   cout << "e = ";
   e.display();
   cout << "f = ";
   f.display();
  
return 0;
}

Overloading operator - numerator and denominator

#include<iostream>
using namespace std;

class Rational
{
   private:
       int num; // numerator
       int den; // denominator
   public:
       void show();
       Rational(int=1,int=1);
       void setnumden(int,int);
       Rational add(Rational object);
       Rational operator+(Rational object);
       bool operator==(Rational object);
       bool operator!=(Rational object);
};

void Rational::show() {
   cout << num << "/" << den << " ";
}

Rational::Rational(int a,int b) {
   setnumden(a,b);
}

void Rational::setnumden(int x,int y) {
   int temp,a,b;
   a = x;
   b = y;
   if(b > a) {
       temp = b;
       b = a;
       a = temp;
   }
   while(a != 0 && b != 0) {
       if(a % b == 0)
           break;
       temp = a % b;
       a = b;
       b = temp;
   }
    num = x / b;
   den = y / b;
}

Rational Rational::add(Rational object) {
   int new_num = num * object.den + den * object.num;
   int new_den = den * object.den;
   return Rational(new_num, new_den);
}

Rational Rational::operator+(Rational object) {
   int new_num = num * object.den + den * object.num;
   int new_den = den * object.den;
   return Rational(new_num, new_den);
}

bool Rational::operator==(Rational object) {
   return (num == object.num && den == object.den);
}

bool Rational::operator!=(Rational object) {
   return (num != object.num || den != object.den);
}

int main() {
   Rational obj1(1,4), obj2(210,840), result1;
   result1 = obj1.add(obj2);
   result1.show();

   Rational obj3(1,3), obj4(33,99), result2;
   result2 = obj3 + obj4;
   result2.show();

   Rational obj5(10,14), obj6(25,35), obj7(2,3), obj8(1,2);

   if(obj5 == obj6) {
       cout << "The two fractions are equal." << endl;
   }
   if(obj7 != obj8) {
       cout << "The two fractions are not equal." << endl;
   }
   return 0;
}