apc_002.cpp (4182B)
1 /* Write a C++ program to add two polynomial equations and display the resultant polynomial. */ 2 3 #include<iostream> 4 using namespace std; 5 6 typedef struct Node { 7 double coeff; 8 int expo; 9 Node *next; 10 } node; 11 12 class mains { 13 private: 14 node *head1 = nullptr, *head2 = nullptr, *rear = nullptr; 15 public: 16 void input() { 17 int n1; 18 cout << "Enter the degree of first polynomial equation: "; 19 cin >> n1; 20 for(int i = 0; i <= n1; i++) { 21 node *newNode = new node; 22 cout << "Enter the coefficient for n^" << i << ": "; 23 cin >> newNode -> coeff; 24 newNode -> expo = i; 25 newNode -> next = nullptr; 26 27 if(head1 == nullptr) { 28 head1 = newNode; 29 rear = newNode; 30 } else { 31 rear -> next = newNode; 32 rear = newNode; 33 } 34 } 35 cout << "You entered: "; 36 display(head1); 37 cout << endl; 38 39 int n2; 40 cout << "\nEnter the degree of second polynomial equation: "; 41 cin >> n2; 42 for(int i = 0; i <= n2; i++) { 43 node *newNode = new node; 44 cout << "Enter the coefficient for n^" << i << ": "; 45 cin >> newNode -> coeff; 46 newNode -> expo = i; 47 newNode -> next = nullptr; 48 49 if(head2 == nullptr) { 50 head2 = newNode; 51 rear = newNode; 52 } else { 53 rear -> next = newNode; 54 rear = newNode; 55 } 56 } 57 cout << "You entered: "; 58 display(head2); 59 cout << endl; 60 } 61 62 void display(node *head) { 63 node *temp = head; 64 bool first = true; 65 bool second = true; 66 while(temp != nullptr) { 67 if(first) { 68 cout << temp -> coeff; 69 first = false; 70 temp = temp -> next; 71 } 72 if(second) { 73 if(temp -> coeff >= 0) 74 cout << " + " << temp -> coeff << "x"; 75 else 76 cout << " - " << (-temp -> coeff) << "x"; 77 second = false; 78 } else { 79 if(temp -> coeff >= 0) 80 cout << " + " << temp -> coeff << "x^" << temp -> expo; 81 else 82 cout << " - " << (-temp -> coeff) << "x^" << temp -> expo; 83 } 84 temp = temp -> next; 85 } 86 } 87 88 void calc() { 89 node *head = nullptr, *temp1 = head1, *temp2 = head2, *rear = nullptr; 90 while(temp1 != nullptr && temp2 != nullptr) { 91 node *newNode = new node; 92 newNode -> coeff = (temp1 -> coeff + temp2 -> coeff); 93 newNode -> expo = temp1 -> expo; 94 newNode -> next = nullptr; 95 96 if(head == nullptr) { 97 head = newNode; 98 rear = newNode; 99 } else { 100 rear -> next = newNode; 101 rear = newNode; 102 } 103 104 temp1 = temp1 -> next; 105 temp2 = temp2 -> next; 106 } 107 108 while(temp1 != nullptr) { 109 node *newNode = new node; 110 newNode -> coeff = temp1 -> coeff; 111 newNode -> expo = temp1 -> expo; 112 newNode -> next = nullptr; 113 114 rear -> next = newNode; 115 rear = newNode; 116 117 temp1 = temp1 -> next; 118 } 119 120 while(temp2 != nullptr) { 121 node *newNode = new node; 122 newNode -> coeff = temp2 -> coeff; 123 newNode -> expo = temp2 -> expo; 124 newNode -> next = nullptr; 125 126 rear -> next = newNode; 127 rear = newNode; 128 129 temp2 = temp2 -> next; 130 } 131 132 cout << "\nSum: "; 133 display(head); 134 freeList(head); 135 } 136 137 void freeList(node *head) { 138 node *temp; 139 while(head != nullptr) { 140 temp = head; 141 head = head -> next; 142 delete temp; 143 } 144 } 145 void doAll() { 146 input(); 147 calc(); 148 freeList(head1); 149 freeList(head2); 150 } 151 }; 152 153 int main() { 154 mains obj; 155 obj.doAll(); 156 return 0; 157 }