PROGRAM 1
// FILENAME: PROGRAM1.CPP AUTHOR: ANTHONY F. ORTIZ
#include
#include
#include
// DECLARATION FOR A LINKED LIST CLASS CALLED LIST.
template
class LIST
{
protected:
// THE LIST IS A LINKED LIST WITH A HEADER NODE.
struct NODE
{
ETYPE ELEMENT;
NODE * NEXT;
// CONSTRUCTOR FOR NODE.
NODE (ETYPE E = 0, NODE * N = 0):
ELEMENT (E), NEXT (N) {}
};
NODE *LIST_HEAD;
NODE *CURRENT_POS;
void DELETE_LIST (); // THE CORRECT ROUTINE IN FIG. 3.16.
LIST (LIST & VALUE); // DISABLE CALL BY VALUE.
public:
// CONSTRUCTOR.
LIST () : LIST_HEAD (new NODE), CURRENT_POS (LIST_HEAD) {}
// DESTRUCTOR.
virtual ~LIST () {DELETE_LIST ();}
// OPERATORS.
const LIST & operator = (LIST & VALUE);
const LIST & operator ++ ();
int operator ! () const;
const ETYPE & operator () () const;
// MEMBER FUNCTIONS.
int IS_EMPTY () const {return LIST_HEAD -> NEXT == 0;}
virtual int FIND (const ETYPE & X);
virtual int FIND_PREVIOUS (const ETYPE & X);
int IN_LIST (const ETYPE & X); // NOT DEFINED;
void FIRST () {if (LIST_HEAD -> NEXT != 0) CURRENT_POS = LIST_HEAD -> NEXT;}
void HEADER () {CURRENT_POS = LIST_HEAD;}
int REMOVE (const ETYPE & X);
virtual void INSERT (const ETYPE & X);
virtual void INSERT_AS_FIRST_ELEMENT (const ETYPE & X);
};
// IMPLEMENTATION OF A LINKED LIST CALLED LIST.
// DELETE AN ENTIRE LIST.
// HEADER ASSUMED.
template
void
LIST ::
DELETE_LIST ()
{
NODE * P = LIST_HEAD -> NEXT, * TEMP;
while (P != 0)
{
TEMP = P -> NEXT;
delete P;
P = TEMP;
}
delete LIST_HEAD;
}
// DUPLICATE A LIST.
// CURRENT POSITION BECOMES FIRST ELEMENT IN BOTH LISTS.
template
const LIST &
LIST ::
operator = (LIST & VALUE)
{
if (this == & VALUE) // DON'T COPY TO YOURSELF!
return * this;
DELETE_LIST ();
CURRENT_POS = LIST_HEAD = new NODE;
for (VALUE.FIRST (); !VALUE; ++VALUE)
{
CURRENT_POS -> NEXT = new NODE (VALUE (), CURRENT_POS -> NEXT);
CURRENT_POS = CURRENT_POS -> NEXT;
}
CURRENT_POS -> NEXT = 0;
FIRST ();
VALUE.FIRST ();
return *this;
}
// ADVANCE THE CURRENT POSITION.
template
inline const LIST &
LIST ::
operator ++ ()
{
if (CURRENT_POS != 0)
CURRENT_POS = CURRENT_POS -> NEXT;
return * this;
}
// CHECK IF CURRENT POSITION IS NOT NULL.
template
inline int
LIST ::
operator ! () const
{
return CURRENT_POS != 0;
}
// RETRIEVE ELEMENT IN THE CURRENT POSITION.
// RETURN VALUE IS UNDEFINED IF CURRENT POSITION IS NULL.
template
inline const ETYPE &
LIST ::
operator () () const
{
if (CURRENT_POS != 0)
return CURRENT_POS -> ELEMENT;
else
return LIST_HEAD -> ELEMENT;
}
// ASSUMING USE OF HEADER NODE, FIND X.
// IF FOUND, RETURN TRUE AND SET THE CURRENT POSITION.
template
int
LIST ::
FIND (const ETYPE & X)
{
NODE * P;
for (P = LIST_HEAD -> NEXT; P != 0; P = P -> NEXT)
{
if (P -> ELEMENT == X)
{
CURRENT_POS = P;
return 1;
}
}
return 0;
}
// ASSUMING USE OF HEADER NODE, FIND X.
// IF FOUND, RETURN TRUE AND SET THE CURRENT POSITION TO BEFORE X.
template
int
LIST ::
FIND_PREVIOUS (const ETYPE & X)
{
NODE * P;
for (P = LIST_HEAD; P -> NEXT != 0; P = P -> NEXT)
if (P -> NEXT -> ELEMENT == X)
{
CURRENT_POS = P;
return 1;
}
return 0;
}
// REMOVE X FROM THE LIST.
// RETURN NONZERO IF DELETION WAS SUCCESSFUL.
// HEADER NODE IS ASSUMED.
template
int
LIST ::
REMOVE (const ETYPE & X)
{
NODE * CELL_TO_DELETE;
if (FIND_PREVIOUS (X))
{
CELL_TO_DELETE = CURRENT_POS -> NEXT;
CURRENT_POS -> NEXT = CELL_TO_DELETE -> NEXT;
delete CELL_TO_DELETE;
return 1;
}
return 0;
}
// INSERT X AFTER THE CURRENT POSITION.
// X BECOMES THE CURRENT ELEMENT.
// HEADER IMPLEMENTATION ASSUMED.
template
void
LIST ::
INSERT (const ETYPE & X)
{
NODE * P = new NODE (X, CURRENT_POS -> NEXT);
if (P == 0)
cout << "OUT OF SPACE." << endl;
else
{
CURRENT_POS -> NEXT = P;
CURRENT_POS = CURRENT_POS -> NEXT;
}
}
// INSERT X BEFORE THE CURRENT POSITION.
// HEADER IMPLEMENTATION ASSUMED.
template
void
LIST ::
INSERT_AS_FIRST_ELEMENT (const ETYPE & X)
{
HEADER ();
INSERT (X);
}
// DECLARATION FOR A ARBITRARY INTEGER PACKAGE CALLED INTEGER_PACKAGE.
class INTEGER_PACKAGE
{
public:
// CONSTRUCTOR.
INTEGER_PACKAGE () {};
// DESTRUCTOR.
~INTEGER_PACKAGE () {};
// GET TWO STRINGS FROM THE KEYBOARD.
// LATER, THEY WILL BE TURNED INTO INTEGER LINKED LISTS.
GET_NUMBERS (char * SNUMBER1, char * SNUMBER2);
// CONVERT THE STRINGS TO LINKED LISTS.
CONVERT_TO_LINKED_LIST (char * SNUMBER1, char * SNUMBER2);
// ADD THE LINKED LISTS AND PRINT THE RESULT.
ADD_NUMBERS ();
// EXACTLY THE SAME AS ADD_NUMBERS MEMBER FUNCTION.
ADD_NUMBERS_FOR_MULT ();
// SUBTRACT THE LINKED LISTS AND PRINT THE RESULT.
SUBTRACT_NUMBERS ();
// MULTIPLY THE LINKED LISTS AND PRINT THE RESULT.
MULTIPLY_NUMBERS ();
// DESTROY THE RESULT.
DESTROY_RESULT ();
private:
// THIS WILL HOLD A LINE FROM THE MULTIPLICATION OF
// TWO INTEGERS.
LIST MULT1;
// THIS WILL HOLD THE SUM OF ONE, TWO, OR SEVERAL LINES
// FROM MULTIPLYING TWO INTEGERS.
LIST MULT2;
// THIS WILL ADD UP THE LINES WHEN MULTIPLYING TWO
// INTEGERS.
LIST ADD;
// THE FIRST INTEGER.
LIST LNUMBER1;
// THE SECOND INTEGER.
LIST LNUMBER2;
// THE RESULT OF AN ADDITION OR SUBTRACTION OR
// MULTIPLICATION.
LIST RESULT;
// THIS WILL TELL WHICH OF THE TWO INTEGERS IS BIGGER.
// IT WILL BE USED FOR THE SUBTRACTION MEMBER FUNCTION.
int FLAG;
};
// ENTER TWO STRINGS FROM THE KEYBOARD. LATER, THEY WILL BE CONVERTED TO
// TWO LINKED LISTS.
INTEGER_PACKAGE :: GET_NUMBERS (char * SNUMBER1, char * SNUMBER2)
{
clrscr ();
cout << "ENTER FIRST POSITIVE INTEGER. ";
cin >> SNUMBER1;
cout << endl;
cout << "ENTER SECOND POSITIVE INTEGER. ";
cin >> SNUMBER2;
cout << endl;
return 0;
}
// CONVERT THE TWO STRINGS TO LINKED LISTS.
INTEGER_PACKAGE :: CONVERT_TO_LINKED_LIST (char * SNUMBER1, char * SNUMBER2)
{
// CONVERT FIRST STRING TO LINKED LIST.
for (int I = 0; I < strlen (SNUMBER1); I++)
{
LNUMBER1.INSERT_AS_FIRST_ELEMENT (int (SNUMBER1 [I]) - 48);
}
// CONVERT SECOND STRING TO LINKED LIST.
for (int J = 0; J < strlen (SNUMBER2); J++)
{
LNUMBER2.INSERT_AS_FIRST_ELEMENT (int (SNUMBER2 [J]) - 48);
}
// THIS WILL TELL WHICH OF THE TWO LINKED LISTS HOLDS THE
// BIGGER NUMBERS. IF THE LENGTH OF INTEGER 2 IS LONGER, THEN
// FLAG WILL BE EQUAL TO 1. THE LENGTH OF THE INTEGERS IS
// REPRESENTED BY I AND J. IF THEY HAVE SIMILAR LENGTHS AND THE
// SECOND NUMBER IS GREATED THEN THE FIRST NUMBER, THEN FLAG WILL BE
// EQUAL TO 1. SNUMBER [0] AND SNUMBER [1] REPRESENTED THE MOST
// SIGNIFICANT DIGIT.
if (J > I || (J == I && int (SNUMBER2 [0]) - 48 > int (SNUMBER1 [0]) - 48))
{
FLAG = 1;
}
else
{
FLAG = 0;
}
return 0;
}
// ADD TWO LINKED LISTS AND DISPLAY THE ANSWER.
INTEGER_PACKAGE :: ADD_NUMBERS ()
{
// THIS WILL BE THE REMAINDER FOR EACH ADDITION OF THE LINKED
// LIST.
int REMAINDER = 0;
// THIS WILL BE THE SUM OF EACH DIGIT WITH 10 BEING TAKEN OUT
// WHEN THE TWO INTEGERS SUM IS GREATER THAN 10.
int ANSWER;
// START AT THE FIRST INTEGER OF THE LINKED LIST.
LNUMBER1.FIRST ();
// START AT THE SECOND INTEGER OF THE LINKED LIST.
LNUMBER2.FIRST ();
// WHEN THEY ARE BOTH EQUAL TO THE HEADER, QUIT.
while (!LNUMBER1 || !LNUMBER2)
{
// IF THEY ARE BOTH NOT EQUAL TO THE HEADER, SUM
// THE CURRENT TWO INTEGERS IN THE LINKED LIST.
if (!LNUMBER1 && !LNUMBER2)
{
// EACH DIGIT WILL EQUAL REMAINDER + CURRENT
// INTEGER ONE + CURRENT INTEGER TWO.
ANSWER = REMAINDER + LNUMBER1 () + LNUMBER2 ();
// IF THE ANSWER IF GREATER THAN 10,
// TAKE AWAY 10 FROM THE ANSWER AND ADD 1 TO
// THE REMAINDER ELSE REMAINDER EQUALS 0.
if (ANSWER >= 10)
{
ANSWER = ANSWER - 10;
REMAINDER = 1;
}
else
{
REMAINDER = 0;
}
// INSERT THE ANSWER INTO THE CURRENT LINKED LIST
// ENTRY.
RESULT.INSERT_AS_FIRST_ELEMENT (ANSWER);
// GO TO NEXT NUMBERS IN THE LINKED LIST
++LNUMBER1;
++LNUMBER2;
++RESULT;
}
// WHEN THE SECOND NUMBER IS NOT EQUAL TO THE HEADER
// ADD THE SECOND NUMBER + THE REMAINDER.
else if (!LNUMBER2)
{
// EACH DIGIT WILL EQUAL REMAINDER + SECOND NUMBER.
ANSWER = REMAINDER + LNUMBER2 ();
// IF THE ANSWER IF GREATER THAN 10,
// TAKE AWAY 10 FROM THE ANSWER AND ADD 1 TO
// THE REMAINDER ELSE REMAINDER EQUALS 0.
if (ANSWER >= 10)
{
ANSWER = ANSWER - 10;
REMAINDER = 1;
}
else
{
REMAINDER = 0;
}
// INSERT THE ANSWER INTO THE CURRENT LINKED LIST
// ENTRY.
RESULT.INSERT_AS_FIRST_ELEMENT (ANSWER);
// GO TO NEXT NUMBERS IN THE LINKED LIST
++LNUMBER2;
++RESULT;
}
// WHEN THE FIRST NUMBER IS NOT EQUAL TO THE HEADER
// ADD THE FIRST NUMBER + THE REMAINDER.
else if (!LNUMBER1)
{
// EACH DIGIT WILL EQUAL REMAINDER + FIRST NUMBER.
ANSWER = REMAINDER + LNUMBER1 ();
// IF THE ANSWER IF GREATER THAN 10,
// TAKE AWAY 10 FROM THE ANSWER AND ADD 1 TO
// THE REMAINDER ELSE REMAINDER EQUALS 0.
if (ANSWER >= 10)
{
ANSWER = ANSWER - 10;
REMAINDER = 1;
}
else
{
REMAINDER = 0;
}
// INSERT THE ANSWER INTO THE CURRENT LINKED LIST
// ENTRY.
RESULT.INSERT_AS_FIRST_ELEMENT (ANSWER);
// GO TO NEXT NUMBERS IN THE LINKED LIST
++LNUMBER1;
++RESULT;
}
}
// IF REMAINDER IS EQUAL TO 1, THEN INSERT THE REMAINDER INTO
// LINKED LIST.
if (REMAINDER == 1)
{
ANSWER = REMAINDER;
RESULT.INSERT_AS_FIRST_ELEMENT (ANSWER);
}
// PRINT THE RESULT.
for (RESULT.FIRST (); !RESULT; ++RESULT)
{
cout << RESULT ();
}
cout << endl << endl;
return 0;
}
// EXACTLY THE SAME AS THE MEMBER FUNCTION ADD_NUMBERS () EXCEPT THIS WILL
// BE USED WITH ADDING MULTIPLICATION LINES.
INTEGER_PACKAGE :: ADD_NUMBERS_FOR_MULT ()
{
int REMAINDER = 0;
int ANSWER;
MULT1.FIRST ();
MULT2.FIRST ();
while (!MULT1 || !MULT2)
{
if (!MULT1 && !MULT2)
{
ANSWER = REMAINDER + MULT1 () + MULT2 ();
if (ANSWER >= 10)
{
ANSWER = ANSWER - 10;
REMAINDER = 1;
}
else
{
REMAINDER = 0;
}
ADD.INSERT_AS_FIRST_ELEMENT (ANSWER);
++MULT1;
++MULT2;
++ADD;
}
else if (!MULT2)
{
ANSWER = REMAINDER + MULT2 ();
if (ANSWER >= 10)
{
ANSWER = ANSWER - 10;
REMAINDER = 1;
}
else
{
REMAINDER = 0;
}
ADD.INSERT_AS_FIRST_ELEMENT (ANSWER);
++MULT2;
++ADD;
}
else if (!MULT1)
{
ANSWER = REMAINDER + MULT1 ();
if (ANSWER >= 10)
{
ANSWER = ANSWER - 10;
REMAINDER = 1;
}
else
{
REMAINDER = 0;
}
ADD.INSERT_AS_FIRST_ELEMENT (ANSWER);
++MULT1;
++ADD;
}
}
if (REMAINDER == 1)
{
ANSWER = REMAINDER;
ADD.INSERT_AS_FIRST_ELEMENT (ANSWER);
}
return 0;
}
// SUBTRACT TWO LINKED LISTS AND DISPLAY THE RESULT.
INTEGER_PACKAGE :: SUBTRACT_NUMBERS ()
{
// THIS WILL BE THE REMAINDER FOR EACH SUBTRACTION IN THE
// LINKED LIST.
int REMAINDER = 0;
// THIS WILL BE THE SUBTRACTION OF EACH DIGIT WITH 10 BEING ADDED
// WHEN THE TWO INTEGERS SUM IS LESS THAN 0.
int ANSWER;
// START AT THE FIRST INTEGER OF THE LINKED LIST.
LNUMBER1.FIRST ();
// START AT THE SECOND INTEGER OF THE LINKED LIST.
LNUMBER2.FIRST ();
// IF FLAG = 1, THEN MAKE LNUMBER1 = LNUMBER2 AND
// LNUMBER2 = LNUMBER1. LATER, WE WILL PUT A -
// ON THE END OF THE LINKED LIST'S RESULT.
if (FLAG == 1)
{
LIST TEMP1;
LIST TEMP2;
TEMP1 = LNUMBER1;
TEMP2 = LNUMBER2;
LNUMBER1 = TEMP2;
LNUMBER2 = TEMP1;
}
// QUIT WHEN THEY BOTH DON'T HEADER.
while (!LNUMBER1 || !LNUMBER2)
{
// WHEN THEY BOTH EQUAL HEADER, SUBTRACT THE CURRENT
// SECOND INTEGER AND CURRENT REMAINDER FROM THE
// CURRENT FIRST INTEGER.
if (!LNUMBER1 && !LNUMBER2)
{
ANSWER = LNUMBER1 () - LNUMBER2 () - REMAINDER;
// IF ANSWER < 0, THEN ADD 10 TO THE ANSWER
// AND 1 TO THE REMAINDER ELSE REMAINDER = 0.
if (ANSWER < 0)
{
ANSWER = ANSWER + 10;
REMAINDER = 1;
}
else
{
REMAINDER = 0;
}
// INSERT THE ANSWER INTO THE FIRST ELEMENT
// OF THE LINKED LIST RESULT.
RESULT.INSERT_AS_FIRST_ELEMENT (ANSWER);
// GO TO THE NEXT NUMBERS.
++LNUMBER1;
++LNUMBER2;
++RESULT;
}
// WHEN LINKED LIST NUMBER1 = HEADER, THEN SUBTRACT THE
// REMAINDER FROM THE CURRENT SECOND INTEGER.
else if (!LNUMBER2)
{
ANSWER = LNUMBER2 () - REMAINDER;
// IF ANSWER < 0, THEN ADD 10 TO THE ANSWER
// AND 1 TO THE REMAINDER ELSE REMAINDER = 0.
if (ANSWER < 0)
{
ANSWER = ANSWER + 10;
REMAINDER = 1;
}
else
{
REMAINDER = 0;
}
// INSERT THE ANSWER INTO THE FIRST ELEMENT
// OF THE LINKED LIST RESULT.
RESULT.INSERT_AS_FIRST_ELEMENT (ANSWER);
// GO TO THE NEXT NUMBERS.
++LNUMBER2;
++RESULT;
}
// WHEN LINKED LIST NUMBER2 = HEADER, THEN SUBTRACT THE
// REMAINDER FROM THE CURRENT FIRST INTEGER.
else if (!LNUMBER1)
{
ANSWER = LNUMBER1 () - REMAINDER;
// IF ANSWER < 0, THEN ADD 10 TO THE ANSWER
// AND 1 TO THE REMAINDER ELSE REMAINDER = 0.
if (ANSWER < 0)
{
ANSWER = ANSWER + 10;
REMAINDER = 1;
}
else
{
REMAINDER = 0;
}
// INSERT THE ANSWER INTO THE FIRST ELEMENT
// OF THE LINKED LIST RESULT.
RESULT.INSERT_AS_FIRST_ELEMENT (ANSWER);
// GO TO NEXT NUMBERS.
++LNUMBER1;
++RESULT;
}
}
// REMOVE THE 0'S FROM THE BEGINNING OF THE RESULT.
for (RESULT.FIRST (); RESULT () == 0; ++RESULT)
{
RESULT.REMOVE (0);
}
// IF FLAG = 1, THEN REMOVE THE FIRST ELEMENT AND INSERT
// THE NEGATIVE OF THIS ELEMENT.
if (FLAG == 1)
{
ANSWER = RESULT ();
RESULT.REMOVE (ANSWER);
RESULT.INSERT_AS_FIRST_ELEMENT (-ANSWER);
}
// PRINT THE RESULT.
for (RESULT.FIRST (); !RESULT; ++RESULT)
{
cout << RESULT ();
}
cout << endl << endl;
return 0;
}
// MULTIPLY TWO LINKED LISTS AND PRINT THE RESULT.
INTEGER_PACKAGE :: MULTIPLY_NUMBERS ()
{
// THIS WILL BE THE MULTIPLICATION OF EACH DIGIT WITH A NUMBER
// BEING SUBTRACTED IF THE ANSWER IS GREATER THEN 10.
int ANSWER;
// THIS WILL BE THE REMAINDER FOR EACH MULTIPLICATION IN THE
// LINKED LIST.
int REMAINDER = 0;
// THIS WILL BE TRACK OF HOW MANY 0'S YOU HAVE TO ADD TO
// THE VARIOUS MULTIPLICATION LINES.
int COUNT = 0;
LIST RESULT;
// GO TO THE FIRST INTEGER OF RESULT.
RESULT.FIRST ();
LNUMBER2.FIRST ();
// THE NEXT TWO FOR LOOPS WILL MULTIPLY THE TWO NUMBERS.
for (LNUMBER2.FIRST (); !LNUMBER2; ++LNUMBER2)
{
// UPDATE COUNT.
COUNT = COUNT + 1;
// ADD 0'S TO THE MULTIPLICATION LINE.
for (int I = 2; I <= COUNT; I++)
{
RESULT.INSERT_AS_FIRST_ELEMENT (0);
++RESULT;
}
for (LNUMBER1.FIRST (); !LNUMBER1; ++ LNUMBER1)
{
// ANSWER = THE CURRENT INTEGER OF
// LINKED LIST 1 * THE CURRENT INTEGER OF
// LINKED LIST 2 + REMAINDER.
ANSWER = LNUMBER1 () * LNUMBER2 () + REMAINDER;
// IF ANSWER >= 10 THEN REMAINDER WILL
// EQUAL THE FLOOR OF ANSWER / 10 AND
// THE ANSWER WILL ANSWER SUBTRACTED FROM
// REMAINDER * 10.
if (ANSWER >= 10)
{
REMAINDER = int (ANSWER / 10);
ANSWER = ANSWER - REMAINDER * 10;
}
else
{
REMAINDER = 0;
}
// INSERT THE ANSWER INTO THE FIRST ELEMENT
// OF THE LINKED LIST RESULT.
RESULT.INSERT_AS_FIRST_ELEMENT (ANSWER);
// GO TO NEXT NUMBER.
++RESULT;
}
// IF REMAINDER >= 0, THEN INSERT THE REMAINDER INTO
// THE ANSWER.
if (REMAINDER > 0)
{
ANSWER = REMAINDER;
RESULT.INSERT_AS_FIRST_ELEMENT (ANSWER);
REMAINDER = 0;
}
// COPY ADD TO MULT1. MULT1 WILL CONTAIN THE NEXT MULTIPLICATION
// LINE.
for (RESULT.FIRST (); !RESULT; ++RESULT)
{
MULT1.INSERT_AS_FIRST_ELEMENT (RESULT ());
}
// COPY ADD TO MULT2. MULT2 WILL CONTAIN THE ADDITION OF THE
// MULTIPLICATION LINES.
for (ADD.FIRST (); !ADD; ++ADD)
{
MULT2.INSERT_AS_FIRST_ELEMENT (ADD ());
}
// REMOVE ADD BECAUSE IT WILL EFFECT NEXT ADDITION.
for (RESULT.FIRST (); !RESULT; ++RESULT)
{
RESULT.REMOVE (RESULT ());
}
// REMOVE ADD BECAUSE IT WILL EFFECT NEXT ADDITION.
for (ADD.FIRST (); !ADD; ++ADD)
{
ADD.REMOVE (ADD ());
}
// ADD THE MULTIPLICATION LINES. STORE ANSWER IN THE LINKED
// LIST CALLED ADD.
ADD_NUMBERS_FOR_MULT ();
// DELETE MULT1 BECAUSE IT WILL EFFECT THE NEXT ADDITION.
for (MULT1.FIRST (); !MULT1; ++MULT1)
{
MULT1.REMOVE (MULT1 ());
}
// DELETE MULT2 BECAUSE IT WILL EFFECT THE NEXT ADDITION.
for (MULT2.FIRST (); !MULT2; ++MULT2)
{
MULT2.REMOVE (MULT2 ());
}
}
// RESULT SHOULD EQUAL THE LAST ADD.
RESULT = ADD;
// PRINT THE RESULT.
for (RESULT.FIRST (); !RESULT; ++RESULT)
{
cout << RESULT ();
}
return 0;
}
// DESTROY THE LINKED LIST RESULT.
INTEGER_PACKAGE :: DESTROY_RESULT ()
{
for (RESULT.FIRST (); !RESULT; ++RESULT)
{
RESULT.REMOVE (RESULT ());
}
return 0;
}
// THIS PROGRAM ADD, SUBTRACTS, AND MULTIPLIES ANY TWO ARBITRARY INTEGERS
// USING THE LIST CLASS AND THE INTEGER_PACKAGE CLASS.
main ()
{
// DECLARE TWO STRINGS WHICH WILL BE INPUT FROM THE KEYBOARD.
// LATER, THEY WILL BE CHANGED INTO TWO LINKED LISTS.
char SNUMBER1 [4001];
char SNUMBER2 [4001];
// AOPERATION WILL BE USED TO GET STRINGS FROM KEYBOARD,
// CONVERT THEM TO TWO INTEGER LINKED, AND THEN ADD
// SUBTRACT, AND MULTIPLY THEM.
INTEGER_PACKAGE AOPERATION;
// GET TWO STRINGS FROM THE KEYBOARD.
AOPERATION.GET_NUMBERS (SNUMBER1, SNUMBER2);
// CONVERT THEM TO A INTEGER LINKED LIST.
AOPERATION.CONVERT_TO_LINKED_LIST (SNUMBER1, SNUMBER2);
// ADD THE NUMBERS AND DISPLAY RESULT.
cout << "ADD RESULT: ";
AOPERATION.ADD_NUMBERS ();
// DESTROYS THE RESULT.
AOPERATION.DESTROY_RESULT ();
// SUBTRACT THE NUMBERS AND DISPLAY RESULT.
cout << "SUBTRACT RESULT: ";
AOPERATION.SUBTRACT_NUMBERS ();
// DESTROY RESULT.
AOPERATION.DESTROY_RESULT ();
// MULTIPY THE NUMBERS AND DISPLAY RESULT.
cout << "MULTIPLY RESULT: ";
AOPERATION.MULTIPLY_NUMBERS ();
return 0;
}
// OUTFILE: PROG1.OUT
ENTER FIRST POSITIVE INTEGER. 123456789012345678901234567890
ENTER SECOND POSITIVE INTEGER. 234567890123456789012345678901
ADD RESULT: 358024679135802467913580246791
SUBTRACT RESULT: -111111101111111110111111111011
MULTIPLY RESULT: 289589985200426886037189477354854446640313976776514250888
90
BACK TO CS3240 PAGE.