From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- Bachelor/Prog2/person-tree/Person.cpp | 31 ++++++++ Bachelor/Prog2/person-tree/Person.h | 27 +++++++ Bachelor/Prog2/person-tree/Prs_test.cpp | 68 +++++++++++++++++ Bachelor/Prog2/person-tree/Tree.h | 130 ++++++++++++++++++++++++++++++++ Bachelor/Prog2/person-tree/Treenode.h | 24 ++++++ Bachelor/Prog2/person-tree/main.cpp | 47 ++++++++++++ Bachelor/Prog2/person-tree/max.txt | 67 ++++++++++++++++ 7 files changed, 394 insertions(+) create mode 100644 Bachelor/Prog2/person-tree/Person.cpp create mode 100644 Bachelor/Prog2/person-tree/Person.h create mode 100644 Bachelor/Prog2/person-tree/Prs_test.cpp create mode 100644 Bachelor/Prog2/person-tree/Tree.h create mode 100644 Bachelor/Prog2/person-tree/Treenode.h create mode 100644 Bachelor/Prog2/person-tree/main.cpp create mode 100644 Bachelor/Prog2/person-tree/max.txt (limited to 'Bachelor/Prog2/person-tree') 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 +using std::cout; +using std::endl; +using std::ostream; + +#include +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 +#include + +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 +using std::cout; +using std::cerr; +using std::cin; +using std::endl; + +#include +using std::ofstream; +using std::ifstream; +using std::ios; + +#include +using std::string; + +#include + +#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 +using std::cout; +using std::endl; +using std::ostream; +#include + +#include + +#include +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 +int Tree::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 +using std::cout; +using std::cerr; +using std::cin; +using std::endl; + +#include +using std::ofstream; +using std::ifstream; +using std::ios; + +#include +using std::string; + +#include +#include + +#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 -- cgit v1.2.3