summaryrefslogtreecommitdiffstats
path: root/Bachelor/Prog2/person-tree
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/Prog2/person-tree
downloadStudium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz
Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Bachelor/Prog2/person-tree')
-rw-r--r--Bachelor/Prog2/person-tree/Person.cpp31
-rw-r--r--Bachelor/Prog2/person-tree/Person.h27
-rw-r--r--Bachelor/Prog2/person-tree/Prs_test.cpp68
-rw-r--r--Bachelor/Prog2/person-tree/Tree.h130
-rw-r--r--Bachelor/Prog2/person-tree/Treenode.h24
-rw-r--r--Bachelor/Prog2/person-tree/main.cpp47
-rw-r--r--Bachelor/Prog2/person-tree/max.txt67
7 files changed, 394 insertions, 0 deletions
diff --git a/Bachelor/Prog2/person-tree/Person.cpp b/Bachelor/Prog2/person-tree/Person.cpp
new file mode 100644
index 0000000..f1e5206
--- /dev/null
+++ b/Bachelor/Prog2/person-tree/Person.cpp
@@ -0,0 +1,31 @@
+// Person.cpp: Implementation of class Person
+
+#include <iostream>
+using std::cout;
+using std::endl;
+using std::ostream;
+
+#include <string>
+using std::string;
+
+#include "Person.h"
+
+Person::Person( string last, string first )
+{
+ lastName = last;
+ firstName = first;
+}
+
+bool Person::operator<( const Person& p ) const
+{
+ return lastName < p.lastName ||
+ ( lastName == p.lastName &&
+ firstName < p.firstName );
+}
+
+ostream& operator<<( ostream& output, const Person& p )
+{
+ cout << p.lastName << ", " << p.firstName << endl;
+
+ return output;
+} \ No newline at end of file
diff --git a/Bachelor/Prog2/person-tree/Person.h b/Bachelor/Prog2/person-tree/Person.h
new file mode 100644
index 0000000..a840996
--- /dev/null
+++ b/Bachelor/Prog2/person-tree/Person.h
@@ -0,0 +1,27 @@
+// Person.h: Interface for class Person
+
+#if !defined PERSON_H
+#define PERSON_H
+
+#include <iostream>
+#include <string>
+
+class Person {
+
+ friend std::ostream& operator<<( std::ostream&, const Person& );
+
+public:
+ Person( std::string = "", std::string = "" ); // default constructor
+ bool operator<( const Person& ) const;
+ bool operator>( const Person& right ) const
+ {
+ return right < *this;
+ }
+
+private:
+ std::string firstName;
+ std::string lastName;
+
+};
+
+#endif // !defined PERSON_H
diff --git a/Bachelor/Prog2/person-tree/Prs_test.cpp b/Bachelor/Prog2/person-tree/Prs_test.cpp
new file mode 100644
index 0000000..91e6b70
--- /dev/null
+++ b/Bachelor/Prog2/person-tree/Prs_test.cpp
@@ -0,0 +1,68 @@
+// Tree with Person objects
+// Author: Hans-Peter Weber
+// Date: 08.05.04
+
+#include <iostream>
+using std::cout;
+using std::cerr;
+using std::cin;
+using std::endl;
+
+#include <fstream>
+using std::ofstream;
+using std::ifstream;
+using std::ios;
+
+#include <string>
+using std::string;
+
+#include <cstdlib>
+
+#include "tree.h"
+#include "person.h"
+
+int main()
+{
+ Tree< Person > personTree;
+ int fileOrConsole;
+ string lastName, firstName;
+
+ cout << "Neue Namen eingeben(1) oder vorhandene Datei nutzen(2): ";
+ cin >> fileOrConsole;;
+
+ if( fileOrConsole == 1 ) {
+ cout << "Name, Vorname eingeben" << endl
+ << "(Beenden mit 'Strg z'): ";
+
+ ofstream out( "Daten.txt", ios::app );
+
+ if( !out ) {
+ cerr << "Datei konnte nicht geoeffnet werden." << endl;
+ exit( 1 );
+ }
+
+ while( cin >> lastName >> firstName ) {
+ out << lastName << " " << firstName << endl;
+ personTree.insertNode( *( new Person( lastName, firstName ) ) );
+ cout << "Eingeben: ";
+ }
+ }
+ else {
+ ifstream in( "Daten.txt", ios::in );
+
+ if( !in ) {
+ cerr << "Datei konnte nicht geoeffnet werden." << endl;
+ exit( 1 );
+ }
+
+ while( in >> lastName >> firstName ) {
+ personTree.insertNode( *( new Person( lastName, firstName ) ) );
+ }
+ }
+
+ cout << "\nInorder traversal\n\n";
+ personTree.inOrderTraversal();
+ cout << endl << endl;
+
+ return 0;
+} \ No newline at end of file
diff --git a/Bachelor/Prog2/person-tree/Tree.h b/Bachelor/Prog2/person-tree/Tree.h
new file mode 100644
index 0000000..c1da451
--- /dev/null
+++ b/Bachelor/Prog2/person-tree/Tree.h
@@ -0,0 +1,130 @@
+// Fig. 15.16: tree.h
+// Definition of template class Tree
+
+#ifndef TREE_H
+#define TREE_H
+
+#include <iostream>
+using std::cout;
+using std::endl;
+using std::ostream;
+#include <iomanip>
+
+#include <cassert>
+
+#include <fstream>
+using std::ofstream;
+using std::ifstream;
+using std::ios;
+
+#include "Treenode.h"
+
+template< class NODETYPE >
+class Tree {
+public:
+ Tree();
+ void insertNode( const NODETYPE & );
+ void preOrderTraversal() const;
+ void inOrderTraversal() const;
+ void postOrderTraversal() const;
+ int gettreeElementCount();
+private:
+ TreeNode< NODETYPE > *rootPtr;
+ int treeElementCount;
+
+ // utility functions
+ void insertNodeHelper(
+ TreeNode< NODETYPE > **, const NODETYPE & );
+ void preOrderHelper( TreeNode< NODETYPE > * ) const;
+ void inOrderHelper( TreeNode< NODETYPE > * ) const;
+ void postOrderHelper( TreeNode< NODETYPE > * ) const;
+};
+
+template< class NODETYPE >
+Tree< NODETYPE >::Tree() { rootPtr = 0; treeElementCount=0; }
+
+template< class NODETYPE >
+void Tree< NODETYPE >::insertNode( const NODETYPE &value )
+ { insertNodeHelper( &rootPtr, value ); }
+
+// This function receives a pointer to a pointer so the
+// pointer can be modified.
+template< class NODETYPE >
+void Tree< NODETYPE >::insertNodeHelper(
+ TreeNode< NODETYPE > **ptr, const NODETYPE &value )
+{
+ if ( *ptr == 0 ) { // tree is empty
+ *ptr = new TreeNode< NODETYPE >( value );
+ (*ptr)->frequency++;
+ ++treeElementCount;
+ assert( *ptr != 0 );
+ }
+ else // tree is not empty
+ if ( value < ( *ptr )->data )
+ insertNodeHelper( &( ( *ptr )->leftPtr ), value );
+ else
+ if ( value > ( *ptr )->data )
+ insertNodeHelper( &( ( *ptr )->rightPtr ), value );
+ else
+ (*ptr)->frequency++;
+}
+
+template< class NODETYPE >
+void Tree< NODETYPE >::preOrderTraversal() const
+ { preOrderHelper( rootPtr ); }
+
+template< class NODETYPE >
+void Tree< NODETYPE >::preOrderHelper(
+ TreeNode< NODETYPE > *ptr ) const
+{
+ if ( ptr != 0 ) {
+ cout << ptr->data << ' ';
+ preOrderHelper( ptr->leftPtr );
+ preOrderHelper( ptr->rightPtr );
+ }
+}
+
+template< class NODETYPE >
+void Tree< NODETYPE >::inOrderTraversal() const
+ { inOrderHelper( rootPtr ); }
+
+template< class NODETYPE >
+void Tree< NODETYPE >::inOrderHelper(
+ TreeNode< NODETYPE > *ptr ) const
+{
+ ofstream outFile("output.txt",ios::app);
+ if( !outFile ) {
+ cerr << "Output-Datei konnte nicht geoeffnet werden." << endl;
+ exit( 1 );
+ }
+ if ( ptr != 0 ) {
+ inOrderHelper( ptr->leftPtr );
+ outFile << std::setw(30) << std::left << std::setfill('.') << ptr->data
+ << ptr->frequency << endl;
+ inOrderHelper( ptr->rightPtr );
+ }
+ outFile.close();
+}
+
+template< class NODETYPE >
+void Tree< NODETYPE >::postOrderTraversal() const
+ { postOrderHelper( rootPtr ); }
+
+template< class NODETYPE >
+void Tree< NODETYPE >::postOrderHelper(
+ TreeNode< NODETYPE > *ptr ) const
+{
+ if ( ptr != 0 ) {
+ postOrderHelper( ptr->leftPtr );
+ postOrderHelper( ptr->rightPtr );
+ cout << ptr->data << ' ';
+ }
+}
+
+template <class NODETYPE>
+int Tree<NODETYPE>::gettreeElementCount()
+{
+ return treeElementCount;
+}
+
+#endif
diff --git a/Bachelor/Prog2/person-tree/Treenode.h b/Bachelor/Prog2/person-tree/Treenode.h
new file mode 100644
index 0000000..4a2b1f1
--- /dev/null
+++ b/Bachelor/Prog2/person-tree/Treenode.h
@@ -0,0 +1,24 @@
+// Fig. 15.16: treenode.h
+// Definition of class TreeNode
+
+#ifndef TREENODE_H
+#define TREENODE_H
+
+template< class NODETYPE > class Tree; // forward declaration
+
+template< class NODETYPE >
+class TreeNode {
+ friend class Tree< NODETYPE >;
+public:
+ TreeNode( const NODETYPE &d )
+ : leftPtr( 0 ), data( d ), rightPtr( 0 ) { }
+ NODETYPE getData() const { return data; }
+ int getFreq() const { return frequency; }
+private:
+ TreeNode< NODETYPE > *leftPtr; // pointer to left subtree
+ NODETYPE data;
+ int frequency;
+ TreeNode< NODETYPE > *rightPtr; // pointer to right subtree
+};
+
+#endif
diff --git a/Bachelor/Prog2/person-tree/main.cpp b/Bachelor/Prog2/person-tree/main.cpp
new file mode 100644
index 0000000..c44a7ba
--- /dev/null
+++ b/Bachelor/Prog2/person-tree/main.cpp
@@ -0,0 +1,47 @@
+// Tree with string objects
+// Author: Sven Eisenhauer
+// Date: 05.06.05
+
+#include <iostream>
+using std::cout;
+using std::cerr;
+using std::cin;
+using std::endl;
+
+#include <fstream>
+using std::ofstream;
+using std::ifstream;
+using std::ios;
+
+#include <string>
+using std::string;
+
+#include <cstdlib>
+#include <new>
+
+#include "Tree.h"
+
+int main()
+{
+ int wordsInFile=0;
+ Tree< string > wordTree;
+ string word;
+
+ ifstream inFile( "max.txt", ios::in );
+
+ if( !inFile ) {
+ cerr << "Input-Datei konnte nicht geoeffnet werden." << endl;
+ exit( 1 );
+ }
+
+ while( inFile >> word) {
+ wordTree.insertNode( *( new string( word ) ) );
+ wordsInFile++;
+ }
+
+ wordTree.inOrderTraversal();
+ cout << "Words in input file: "<< wordsInFile << endl;
+ cout << "Different words: " << wordTree.gettreeElementCount() << endl;
+
+ return 0;
+}
diff --git a/Bachelor/Prog2/person-tree/max.txt b/Bachelor/Prog2/person-tree/max.txt
new file mode 100644
index 0000000..f6cd84a
--- /dev/null
+++ b/Bachelor/Prog2/person-tree/max.txt
@@ -0,0 +1,67 @@
+Maonche held im Stall sisch Hinggel,
+fittert se mit Waas un Dinggel
+un mit Kleie - dodewäije,
+dass se schaeine Aaije laeije.
+Sundaogs hot me daonn im Dippche,
+alsemol e Hinggelsippche,
+un die Färren, zaart un foi,
+stobbt me in die Pilwe noi,
+daonn im Winde leit me haolt
+liewe waarm im Bett wie kaolt
+Sou waar sellemols des aa
+bei dem Bolde soine Fraa:
+Hinggel hatt se Sticke drei
+un en Gickel noch debei.
+Säigt de Max zum Moritz kaolt:
+"Kumm, mer äijen jetz die Aolt!" -
+-Hordisch nemme se e Broud,
+schneires mirrem Messe noud
+in vier Sticke, gaar nit grouß,
+wie en klaone Finge blouß.
+
+Jede Mumbel werd vun unne
+iwwes Kreiz daonn feschdgebunne,
+un die läije se genaa
+in de Houf vun sellre Fraa. -
+Wie de Giggel guckt do druff,
+sperrt e glei de Schnawwel uff,
+kreeht un kreischt gickerigie,
+un die Hinggel renne hie.
+
+Jede schlickt soin Brogge nunne-
+äwwe daon, das is kao Wunne,
+henggt des ao aom aonnen drou
+un fengt glei ze ziehe ou.
+
+Riwwe, niwwe, hie un her
+renne se die Kreiz un Quer,
+gacken, fladden in die Häih -
+äwwe lous kimmt kaone mäih!
+
+Aome laonge derre Ascht
+hengge se, verstrumbt schun fascht;
+mirrem Hals sou laong wie Mosse
+misse se eer Läwe losse.
+E letscht Aig noch - des is alles,
+un daonn häwwe se de Dalles!
+
+De aold Bolden in de Stobb
+häijet waos un häibt de Kobb.
+Un schun sterzt se aus de Kaomme -
+ach, waos is des fer en Jaomme!
+
+
+"Ich arrm Witfraa bin geschlaoe -
+issch kaonn´s jao kaom Mensche saoe!
+Drowwe uffm Ebbelboam
+henggt moin alleschäinschte Draom!"
+Gaons vesteert un halwe kraonk
+helt se´s Messe aus em Schaonk
+schneid die Hinggel aob vum Ascht
+groint sisch aus die Aache fascht,
+dabbt ins Haus im diefschte Schmerz,
+drickt des Veehzeig aon eer Herz.
+Is de erschte Straasch vebei,
+kimmt de zwatte siche glei.
+
+Quelle: Elisabeth Kunz: De Ourewälle Max un Moritz Odenwald-Verlag 2. Auflage 1996 \ No newline at end of file