From ccdf8c692fbf6078dbbcaadee9bad9adba22dd14 Mon Sep 17 00:00:00 2001 From: thomasspaeth Date: Wed, 27 Jun 2012 09:15:29 +0200 Subject: [PATCH 1/3] Ringpuffer von Blatt2 uebernommen --- .gitignore | 22 ++++++ Ringpuffer/ringpuffer.cpp | 139 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 .gitignore create mode 100644 Ringpuffer/ringpuffer.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..be24859 --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +# Compiled Object files +*.slo +*.lo +*.o + +# Compiled Dynamic libraries +*.so + +# Compiled Static libraries +*.lai +*.la +*.a + +# Output files +*.exe +*.d + +#Eclipse Folder +.settings +Debug +.cproject +.project \ No newline at end of file diff --git a/Ringpuffer/ringpuffer.cpp b/Ringpuffer/ringpuffer.cpp new file mode 100644 index 0000000..1cba1da --- /dev/null +++ b/Ringpuffer/ringpuffer.cpp @@ -0,0 +1,139 @@ +#include + +using namespace std; + +class Ringpuffer { +public: + bool push(double newelement); + double pop(); + double element(int number); + Ringpuffer(int size); + ~Ringpuffer(); + +private: + int NumberOfElements; + int ElementsInUse; + double* ptr; + double* pushptr; + double* popptr; + double* lastptr; + +}; + + +Ringpuffer::Ringpuffer(int size):NumberOfElements(size) { + ptr=new double[NumberOfElements]; + pushptr=ptr; + popptr=ptr; + ElementsInUse=0; +} + +bool Ringpuffer::push(double newelement) +{ + if (ElementsInUse>=NumberOfElements) //Zu viele Elemente + { + return 0; + } + + *pushptr=newelement; //Element schreiben + + if (pushptr==ptr+NumberOfElements-1) //Überprüfen, ob letztes Element + { + pushptr=ptr; //Zurück zum 1. Element + } + else + { + pushptr++; //Weiterspringen falls nicht am Ende + } + + + + ElementsInUse++; //Erhöhe Zahl der Elemente + return 1; +} + +double Ringpuffer::pop() +{ + if (ElementsInUse==0) + { + return 0; + } + + double returnvalue=*popptr; + + if (popptr==ptr+NumberOfElements-1) //Überprüfen, ob letztes Element + { + popptr=ptr; //Zurück zum 1. Element + } + else + { + popptr++; //Weiterspringen falls nicht am Ende + } + + ElementsInUse--; //Senke Zahl der Elemente + return returnvalue; +} + + +double Ringpuffer::element(int number) +{ + if ((number<0)||(number>=NumberOfElements)) + { + return 0; + } + return *(ptr+number); +} + + +Ringpuffer::~Ringpuffer() { + delete[] ptr; +} + + +int main() +{ + int size; + cout << "Bitte Groesse des Puffers angeben: " << flush; + cin >> size; + Ringpuffer puffer(size); + + + int s=0; + while (s!=4) + { + cout << "push=>1 pop=>2 read=>3 quit=>4 " << flush; + cin >> s; + + if (s==1) //push + { + double add; + cout << "Zahl eingeben: " << flush; + cin >> add; + if (puffer.push(add)==1) + { + cout << "Zahl erfolgreich hinzugefuegt" << endl; + } + else + { + cout << "Zahl konnte nicht hinzugefuegt werden" << endl; + } + } + + if (s==2) // pop + { + cout << "Die Zahl ist " << puffer.pop() << " und wurde geloescht" << endl; + } + + if (s==3) //read + { + int n; + cout << "Element eingeben (zwischen 0 und " << size-1 << "): " << flush; + cin >> n; + cout << "Der Zahl ist " << puffer.element(n) << endl; + } + + cout << endl; + } + + return 0; +} From 044888d310ee4b4de08ce1aff579bb305569f5fb Mon Sep 17 00:00:00 2001 From: thomasspaeth Date: Wed, 27 Jun 2012 09:30:14 +0200 Subject: [PATCH 2/3] Verwendung von const implementiert --- Ringpuffer/ringpuffer.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Ringpuffer/ringpuffer.cpp b/Ringpuffer/ringpuffer.cpp index 1cba1da..d1615ed 100644 --- a/Ringpuffer/ringpuffer.cpp +++ b/Ringpuffer/ringpuffer.cpp @@ -5,19 +5,17 @@ using namespace std; class Ringpuffer { public: bool push(double newelement); - double pop(); - double element(int number); + double pop() const; + double element(int number) const; Ringpuffer(int size); ~Ringpuffer(); private: int NumberOfElements; - int ElementsInUse; + mutable int ElementsInUse; double* ptr; - double* pushptr; - double* popptr; - double* lastptr; - + mutable double* pushptr; + mutable double* popptr; }; @@ -46,13 +44,11 @@ bool Ringpuffer::push(double newelement) pushptr++; //Weiterspringen falls nicht am Ende } - - ElementsInUse++; //Erhöhe Zahl der Elemente return 1; } -double Ringpuffer::pop() +double Ringpuffer::pop() const { if (ElementsInUse==0) { @@ -75,7 +71,7 @@ double Ringpuffer::pop() } -double Ringpuffer::element(int number) +double Ringpuffer::element(int number) const { if ((number<0)||(number>=NumberOfElements)) { From 7b84d9e188b95463fc1f3a2829a238a068fac451 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 30 Jun 2012 10:25:36 +0200 Subject: [PATCH 3/3] const-Verbesserung --- Ringpuffer/ringpuffer.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Ringpuffer/ringpuffer.cpp b/Ringpuffer/ringpuffer.cpp index d1615ed..4bfc5d2 100644 --- a/Ringpuffer/ringpuffer.cpp +++ b/Ringpuffer/ringpuffer.cpp @@ -5,17 +5,17 @@ using namespace std; class Ringpuffer { public: bool push(double newelement); - double pop() const; + double pop(); double element(int number) const; Ringpuffer(int size); ~Ringpuffer(); private: int NumberOfElements; - mutable int ElementsInUse; + int ElementsInUse; double* ptr; - mutable double* pushptr; - mutable double* popptr; + double* pushptr; + double* popptr; }; @@ -48,7 +48,7 @@ bool Ringpuffer::push(double newelement) return 1; } -double Ringpuffer::pop() const +double Ringpuffer::pop() { if (ElementsInUse==0) {