summaryrefslogtreecommitdiffstats
path: root/Bachelor/Prog1/examples/ch08/Fig08_18_20
diff options
context:
space:
mode:
authorSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
committerSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
commit33613a85afc4b1481367fbe92a17ee59c240250b (patch)
tree670b842326116b376b505ec2263878912fca97e2 /Bachelor/Prog1/examples/ch08/Fig08_18_20
downloadStudium-master.tar.gz
Studium-master.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Bachelor/Prog1/examples/ch08/Fig08_18_20')
-rw-r--r--Bachelor/Prog1/examples/ch08/Fig08_18_20/Fig08_20.cpp51
-rw-r--r--Bachelor/Prog1/examples/ch08/Fig08_18_20/Hugeint1.cpp121
-rw-r--r--Bachelor/Prog1/examples/ch08/Fig08_18_20/Hugeint1.h47
3 files changed, 219 insertions, 0 deletions
diff --git a/Bachelor/Prog1/examples/ch08/Fig08_18_20/Fig08_20.cpp b/Bachelor/Prog1/examples/ch08/Fig08_18_20/Fig08_20.cpp
new file mode 100644
index 0000000..f73bde7
--- /dev/null
+++ b/Bachelor/Prog1/examples/ch08/Fig08_18_20/Fig08_20.cpp
@@ -0,0 +1,51 @@
+// Fig. 8.20: fig08_20.cpp
+// HugeInt test program.
+#include <iostream>
+
+using std::cout;
+using std::endl;
+
+#include "hugeint1.h"
+
+int main()
+{
+ HugeInt n1( 7654321 );
+ HugeInt n2( 7891234 );
+ HugeInt n3( "99999999999999999999999999999" );
+ HugeInt n4( "1" );
+ HugeInt n5;
+
+ cout << "n1 is " << n1 << "\nn2 is " << n2
+ << "\nn3 is " << n3 << "\nn4 is " << n4
+ << "\nn5 is " << n5 << "\n\n";
+
+ n5 = n1 + n2;
+ cout << n1 << " + " << n2 << " = " << n5 << "\n\n";
+
+ cout << n3 << " + " << n4 << "\n= " << ( n3 + n4 )
+ << "\n\n";
+
+ n5 = n1 + 9;
+ cout << n1 << " + " << 9 << " = " << n5 << "\n\n";
+
+ n5 = n2 + "10000";
+ cout << n2 << " + " << "10000" << " = " << n5 << endl;
+
+ return 0;
+
+} // end main
+
+/**************************************************************************
+ * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and Prentice *
+ * Hall. All Rights Reserved. *
+ * *
+ * DISCLAIMER: The authors and publisher of this book have used their *
+ * best efforts in preparing the book. These efforts include the *
+ * development, research, and testing of the theories and programs *
+ * to determine their effectiveness. The authors and publisher make *
+ * no warranty of any kind, expressed or implied, with regard to these *
+ * programs or to the documentation contained in these books. The authors *
+ * and publisher shall not be liable in any event for incidental or *
+ * consequential damages in connection with, or arising out of, the *
+ * furnishing, performance, or use of these programs. *
+ *************************************************************************/ \ No newline at end of file
diff --git a/Bachelor/Prog1/examples/ch08/Fig08_18_20/Hugeint1.cpp b/Bachelor/Prog1/examples/ch08/Fig08_18_20/Hugeint1.cpp
new file mode 100644
index 0000000..6e1aff7
--- /dev/null
+++ b/Bachelor/Prog1/examples/ch08/Fig08_18_20/Hugeint1.cpp
@@ -0,0 +1,121 @@
+// Fig. 8.19: hugeint1.cpp
+// HugeInt member-function and friend-function definitions.
+
+#include <cctype> // isdigit function prototype
+#include <cstring> // strlen function prototype
+
+#include "hugeint1.h" // HugeInt class definition
+
+// default constructor; conversion constructor that converts
+// a long integer into a HugeInt object
+HugeInt::HugeInt( long value )
+{
+ // initialize array to zero
+ for ( int i = 0; i <= 29; i++ )
+ integer[ i ] = 0;
+
+ // place digits of argument into array
+ for ( int j = 29; value != 0 && j >= 0; j-- ) {
+ integer[ j ] = value % 10;
+ value /= 10;
+
+ } // end for
+
+} // end HugeInt default/conversion constructor
+
+// conversion constructor that converts a character string
+// representing a large integer into a HugeInt object
+HugeInt::HugeInt( const char *string )
+{
+ // initialize array to zero
+ for ( int i = 0; i <= 29; i++ )
+ integer[ i ] = 0;
+
+ // place digits of argument into array
+ int length = strlen( string );
+
+ for ( int j = 30 - length, k = 0; j <= 29; j++, k++ )
+
+ if ( isdigit( string[ k ] ) )
+ integer[ j ] = string[ k ] - '0';
+
+} // end HugeInt conversion constructor
+
+// addition operator; HugeInt + HugeInt
+HugeInt HugeInt::operator+( const HugeInt &op2 )
+{
+ HugeInt temp; // temporary result
+ int carry = 0;
+
+ for ( int i = 29; i >= 0; i-- ) {
+ temp.integer[ i ] =
+ integer[ i ] + op2.integer[ i ] + carry;
+
+ // determine whether to carry a 1
+ if ( temp.integer[ i ] > 9 ) {
+ temp.integer[ i ] %= 10; // reduce to 0-9
+ carry = 1;
+
+ } // end if
+
+ // no carry
+ else
+ carry = 0;
+ }
+
+ return temp; // return copy of temporary object
+
+} // end function operator+
+
+// addition operator; HugeInt + int
+HugeInt HugeInt::operator+( int op2 )
+{
+ // convert op2 to a HugeInt, then invoke
+ // operator+ for two HugeInt objects
+ return *this + HugeInt( op2 );
+
+} // end function operator+
+
+// addition operator;
+// HugeInt + string that represents large integer value
+HugeInt HugeInt::operator+( const char *op2 )
+{
+ // convert op2 to a HugeInt, then invoke
+ // operator+ for two HugeInt objects
+ return *this + HugeInt( op2 );
+
+} // end operator+
+
+// overloaded output operator
+ostream& operator<<( ostream &output, const HugeInt &num )
+{
+ int i;
+
+ for ( i = 0; ( num.integer[ i ] == 0 ) && ( i <= 29 ); i++ )
+ ; // skip leading zeros
+
+ if ( i == 30 )
+ output << 0;
+ else
+
+ for ( ; i <= 29; i++ )
+ output << num.integer[ i ];
+
+ return output;
+
+} // end function operator<<
+
+/**************************************************************************
+ * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and Prentice *
+ * Hall. All Rights Reserved. *
+ * *
+ * DISCLAIMER: The authors and publisher of this book have used their *
+ * best efforts in preparing the book. These efforts include the *
+ * development, research, and testing of the theories and programs *
+ * to determine their effectiveness. The authors and publisher make *
+ * no warranty of any kind, expressed or implied, with regard to these *
+ * programs or to the documentation contained in these books. The authors *
+ * and publisher shall not be liable in any event for incidental or *
+ * consequential damages in connection with, or arising out of, the *
+ * furnishing, performance, or use of these programs. *
+ *************************************************************************/ \ No newline at end of file
diff --git a/Bachelor/Prog1/examples/ch08/Fig08_18_20/Hugeint1.h b/Bachelor/Prog1/examples/ch08/Fig08_18_20/Hugeint1.h
new file mode 100644
index 0000000..46dd1df
--- /dev/null
+++ b/Bachelor/Prog1/examples/ch08/Fig08_18_20/Hugeint1.h
@@ -0,0 +1,47 @@
+// Fig. 8.18: hugeint1.h
+// HugeInt class definition.
+#ifndef HUGEINT1_H
+#define HUGEINT1_H
+
+#include <iostream>
+
+using std::ostream;
+
+class HugeInt {
+ friend ostream &operator<<( ostream &, const HugeInt & );
+
+public:
+ HugeInt( long = 0 ); // conversion/default constructor
+ HugeInt( const char * ); // conversion constructor
+
+ // addition operator; HugeInt + HugeInt
+ HugeInt operator+( const HugeInt & );
+
+ // addition operator; HugeInt + int
+ HugeInt operator+( int );
+
+ // addition operator;
+ // HugeInt + string that represents large integer value
+ HugeInt operator+( const char * );
+
+private:
+ short integer[ 30 ];
+
+}; // end class HugeInt
+
+#endif
+
+/**************************************************************************
+ * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and Prentice *
+ * Hall. All Rights Reserved. *
+ * *
+ * DISCLAIMER: The authors and publisher of this book have used their *
+ * best efforts in preparing the book. These efforts include the *
+ * development, research, and testing of the theories and programs *
+ * to determine their effectiveness. The authors and publisher make *
+ * no warranty of any kind, expressed or implied, with regard to these *
+ * programs or to the documentation contained in these books. The authors *
+ * and publisher shall not be liable in any event for incidental or *
+ * consequential damages in connection with, or arising out of, the *
+ * furnishing, performance, or use of these programs. *
+ *************************************************************************/ \ No newline at end of file