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

You will create a C++ program that can evaluate arithmetic operators with intege

ID: 3788721 • Letter: Y

Question

You will create a C++ program that can evaluate arithmetic operators with integer numbers having any number of digits. These numbers are an alternative to xed size integers or oating point numbers that always have a maximum number of accurate digits (dependent on size of CPU register).

The input is a regular text le, where each line is terminated with an end-of-line character(s). Each line will containanarithmeticoperationbetweentwonumbers. Theprogramshoulddisplaytheinputexpressionand the results, separated with =.

The main program should be called ”innitearithmetic”.
infinitearithmetic "input=<file name>;digitsPerNode=<number>".

The following is the pseudocode

// DoubleLinkedList.h
struct Node {
   long long num;
   Node* prev;
   Node* next;
};

class DoubleLinkedList {
public:
DoubleLinkedList(); // default construct
   ~DoubleLinkedList(); // deconstruct
   DoubleLinkedList(const std::string& num, int digitsPerNode); // user defined construct
   DoubleLinkedList(const DoubleLinkedList& list); // copy construct
   DoubleLinkedList& operator = (const DoubleLinkedList& list); // assignment consturct
public:
DoubleLinkedList operator + (const DoubleLinkedList& list) const;
   DoubleLinkedList operator * (const DoubleLinkedList& list) const;
   // optional
   DoubleLinkedList operator - (const DoubleLinkedList& list) const;
   // 10% extra
   DoubleLinkedList operator / (const DoubleLinkedList& list) const;
   // 20% extra
   DoubleLinkedList Sqrt(const DoubleLinkedList& list) const;
public:
const Node* GetHead() const;
   const Node* GetTail() const;
   void Append(Node* node);
   void Print() const;
private:
Node* head;
Node* tail;
int m_digitsPerNode;
   long long remainder; // for / operator
   float decimal; // for sqrt() 7 valid digits.
}

// main.cpp
#include "ArgumentManager.h"
int main(int argc, char* argv[])
{
   if (argc < 2) {
       std::cerr("Usage: infinitearithmetic "filename=xyz.txt;digitsPerNode=<number>" ");
   }
   ArgumentManager am(argc, argv);
   std::string filename = am.get("filename");
   int digitsPerNode = std::stoi(am.get("digitsPerNode"));
   std::ifstream ifs(filename.c_str());
   std::string line;
   while (getline(ifs, line)){
       std::string num1;
       std::string num2;
       std::string op;
       // get num1 num2 and operator in line
// ...
       DoubleLinkedList l1(num1, digitsPerNode); // DoubleLinkedList(const std::string& num, int digitsPerNode)
       DoubleLinkedList l2(num2, digitsPerNode);
       DoubleLinkedList l(); // DoubleLinkedList();
       if (/* plus */)
       {l = l1 + l2;} // DoubleLinkedList operator + (const DoubleLinkedList& list) const; DoubleLinkedList& operator = (const DoubleLinkedList& list);
       else if (/* mult */) // DoubleLinkedList operator * (const DoubleLinkedList& list) const;
       {l = l1 * l2;}
       else if (/* div */)
       {l = l1 / l2;} // DoubleLinkedList operator / (const DoubleLinkedList& list) const;
       else if (...)
       {//...}
       else {
           // ...
       }
      
       // output result
   }
      
   return 0;
}

Explanation / Answer

// DoubleLinkedList.h
struct Node {
   long long num;
   Node* prev;
   Node* next;
};

class DoubleLinkedList {
public:
DoubleLinkedList(); // default construct
   ~DoubleLinkedList(); // deconstruct
   DoubleLinkedList(const std::string& num, int digitsPerNode); // user defined construct
   DoubleLinkedList(const DoubleLinkedList& list); // copy construct
   DoubleLinkedList& operator = (const DoubleLinkedList& list); // assignment consturct
public:
DoubleLinkedList operator + (const DoubleLinkedList& list) const;
   DoubleLinkedList operator * (const DoubleLinkedList& list) const;
   // optional
   DoubleLinkedList operator - (const DoubleLinkedList& list) const;
   // 10% extra
   DoubleLinkedList operator / (const DoubleLinkedList& list) const;
   // 20% extra
   DoubleLinkedList Sqrt(const DoubleLinkedList& list) const;
public:
const Node* GetHead() const;
   const Node* GetTail() const;
   void Append(Node* node);
   void Print() const;
private:
Node* head;
Node* tail;
int m_digitsPerNode;
   long long remainder; // for / operator
   float decimal; // for sqrt() 7 valid digits.
}

// main.cpp

#include<iostream.h>
#include "ArgumentManager.h"
int main(int argc, char* argv[])
{
   if (argc < 2) {
       std::cerr("Usage: infinitearithmetic "filename=xyz.txt;digitsPerNode=<number>" ");
   }
   ArgumentManager am(argc, argv);
   std::string filename = am.get("filename");
   int digitsPerNode = std::stoi(am.get("digitsPerNode"));
   std::ifstream ifs(filename.c_str());
   std::string line;
   while (getline(ifs, line)){
       std::string num1;
       std::string num2;
       std::string op;
cout<<"enter num1 and num2 "

cin>>num1>>num2
       DoubleLinkedList l1(num1, digitsPerNode); // DoubleLinkedList(const std::string& num, int digitsPerNode)
       DoubleLinkedList l2(num2, digitsPerNode);
       DoubleLinkedList l(); // DoubleLinkedList();
       if (+)
       {l = l1 + l2;} // DoubleLinkedList operator + (const DoubleLinkedList& list) const; DoubleLinkedList& operator = (const DoubleLinkedList& list);
       else if (*) // DoubleLinkedList operator * (const DoubleLinkedList& list) const;
       {l = l1 * l2;}
       else if (/)
       {l = l1 / l2;} // DoubleLinkedList operator / (const DoubleLinkedList& list) const;
       else if (-)
       {l=l1-l2;}

       else {
l=sqrt(l1)
       }
      
cout<<l;
   }
      
   return 0;
}

Explanation

sample input

2+3

5*5

1000+5

sample output

2+3=5

5*5=25

1000+5=1005

Advanced operation

sqrt(49)=7

22/3=7, remainder=1

Assumptios:

Example of numbers stored as a list of nodes of 2 digits:

182 stored as {1,82} or {18,2}

232496 stored as {23,24,96}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote