diff --git a/Aufgabeblock_1/.cproject b/Aufgabeblock_1/.cproject deleted file mode 100644 index f8356ef..0000000 --- a/Aufgabeblock_1/.cproject +++ /dev/null @@ -1,1758 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Aufgabeblock_1/.settings/de.innot.avreclipse.core.prefs b/Aufgabeblock_1/.settings/de.innot.avreclipse.core.prefs deleted file mode 100644 index 107b324..0000000 --- a/Aufgabeblock_1/.settings/de.innot.avreclipse.core.prefs +++ /dev/null @@ -1,3 +0,0 @@ -#Thu Aug 18 14:08:19 CEST 2011 -avrtarget/perConfig=false -eclipse.preferences.version=1 diff --git a/Aufgabeblock_1/Fahrrad.cpp b/Aufgabeblock_1/Fahrrad.cpp deleted file mode 100644 index 0752f52..0000000 --- a/Aufgabeblock_1/Fahrrad.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Fahrrad.cpp - * - * Created on: 18.08.2011 - * Author: stv0g - */ - -#include "Fahrrad.h" - -Fahrrad::Fahrrad() { - // TODO Auto-generated constructor stub -} - -Fahrrad::~Fahrrad() { - // TODO Auto-generated destructor stub -} - -double Fahrrad::dGeschwindigkeit() { - double dFahrradGeschwindigkeit = p_dMaxGeschwindigkeit; - int iReduzierung = (int) p_dGesamtStrecke / 20; - - for (int i = 0; i < iReduzierung; i++) { - dFahrradGeschwindigkeit *= 0.9; - } - - if (dFahrradGeschwindigkeit < 12) { - dFahrradGeschwindigkeit = 12; - } - - return dFahrradGeschwindigkeit; -} - -static Fahrrad * Fahrrad::erzeuge(string sName, double dMaxGeschwindigkeit) { - Fahrrad *rad = new Fahrrad(sName); - - rad->p_dMaxGeschwindigkeit = dMaxGeschwindigkeit; - - return rad; -} - diff --git a/Aufgabeblock_1/Fahrrad.h b/Aufgabeblock_1/Fahrrad.h deleted file mode 100644 index a2beba1..0000000 --- a/Aufgabeblock_1/Fahrrad.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Fahrrad.h - * - * Created on: 18.08.2011 - * Author: stv0g - */ - -#ifndef FAHRRAD_H_ -#define FAHRRAD_H_ - -#include "Fahrzeug.h" - -using namespace std; - -class Fahrrad: public Fahrzeug { -public: - Fahrrad(); - virtual ~Fahrrad(); - - double dGeschwindigkeit(); - void vAusgabe(); - - static Fahrrad * erzeuge(string sName, double dMaxGeschwindigkeit); -}; - -#endif /* FAHRRAD_H_ */ diff --git a/Aufgabeblock_1/Fahrzeug.cpp b/Aufgabeblock_1/Fahrzeug.cpp deleted file mode 100644 index 0c4157b..0000000 --- a/Aufgabeblock_1/Fahrzeug.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Fahrzeug.cpp - * - * Created on: 18.08.2011 - * Author: stv0g - */ - -#include -#include -#include - -#include "Fahrzeug.h" - -extern double dGlobaleZeit; - -int Fahrzeug::p_iMaxID = 0; - -Fahrzeug::Fahrzeug() { - vInitialisierung(); - //cout << this->p_sName << ":" << this->p_iID << " wurde initialisiert" << endl; -} - -Fahrzeug::Fahrzeug(string sName) { - vInitialisierung(); - p_sName = sName; - - //cout << this->p_sName << ":" << this->p_iID << " wurde initialisiert" << endl; -} - -Fahrzeug::~Fahrzeug() { - //cout << this->p_sName << ":" << this->p_iID << " wurde gelöscht" << endl; -} - -void Fahrzeug::vInitialisierung() { - p_iID = ++p_iMaxID; - - p_sName = " "; - p_dMaxGeschwindigkeit = 0; - p_dGesamtStrecke = 0; - p_dGesamtZeit = 0; - p_dZeit = 0; -} - -void Fahrzeug::vAusgabe() { - cout << setprecision(2) << setiosflags(ios::fixed) - << resetiosflags(ios::right) << setiosflags(ios::left) - << setw(4) << this->p_iID - << setw(7) << this->p_sName << ": " - << resetiosflags(ios::left) << setiosflags(ios::right) - << setw(7) << p_dMaxGeschwindigkeit - << setw(12) << p_dGesamtStrecke - << endl; -} - -void Fahrzeug::vAbfertigung() { - if (fabs(p_dZeit - dGlobaleZeit) < 1e-10) return; - - double dDelta = dGlobaleZeit - p_dZeit; - - p_dGesamtZeit += dDelta; - p_dGesamtStrecke += dGeschwindigkeit() * dDelta; - p_dZeit = dGlobaleZeit; -} diff --git a/Aufgabeblock_1/PKW.cpp b/Aufgabeblock_1/PKW.cpp deleted file mode 100644 index 572c16e..0000000 --- a/Aufgabeblock_1/PKW.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * PKW.cpp - * - * Created on: 18.08.2011 - * Author: stv0g - */ - -#include -#include - -#include "PKW.h" - -using namespace std; - -extern double dGlobaleZeit; - -PKW::PKW(string sName, double dVerbrauch, double dTankvolumen = 55) : - Fahrzeug(sName), - p_dVerbrauch(dVerbrauch), - p_dTankvolumen(dTankvolumen), - p_dTankinhalt(dTankvolumen/2) { } - -PKW::PKW(double dVerbrauch, double dTankvolumen = 55) : - Fahrzeug(), - p_dVerbrauch(dVerbrauch), - p_dTankvolumen(dTankvolumen), - p_dTankinhalt(dTankvolumen/2) { } - -PKW::~PKW() { - // TODO Auto-generated destructor stub -} - -double PKW::dTanken(double dMenge = 0) { - double dAlterInhalt = p_dTankinhalt; - - if (dMenge == 0) { - p_dTankinhalt = p_dTankvolumen; - } - else { - p_dTankinhalt += dMenge; - if (p_dTankinhalt > p_dTankvolumen) { - p_dTankinhalt = p_dTankvolumen; /* Verhindere Überfüllung */ - } - } - - return p_dTankinhalt - dAlterInhalt; -} - -void PKW::vAbfertigung() { - if (p_dTankinhalt > 0) { /* prüfen, ob etwas im Tank ist */ - p_dTankinhalt -= (dGlobaleZeit - p_dZeit) * p_dMaxGeschwindigkeit * p_dVerbrauch / 100; - if (p_dTankinhalt < 0) { /* falls Tankinhalt negativ ist */ - p_dTankinhalt = 0; - } - Fahrzeug::vAbfertigung(); - } - else { - p_dTankinhalt = 0; - } -} - -void PKW::vAusgabe() { - Fahrzeug::vAusgabe(); - - cout << setprecision(2) << setiosflags(ios::fixed) - << resetiosflags(ios::left) << setiosflags(ios::right) - << setw(7) << dVerbrauch() - << setw(7) << p_dTankinhalt << endl; -} - -double PKW::dVerbrauch() { - return p_dGesamtStrecke * p_dVerbrauch / 100; -} - -static PKW * PKW::erzeuge(string sName, double dMaxGeschwindigkeit) { - Fahrrad *rad = new Fahrrad(sName); - - rad->p_dMaxGeschwindigkeit = dMaxGeschwindigkeit; - - return rad; -} diff --git a/Aufgabeblock_1/main.cpp b/Aufgabeblock_1/main.cpp deleted file mode 100644 index a118d65..0000000 --- a/Aufgabeblock_1/main.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - * main.cpp - * - * Created on: 18.08.2011 - * Author: stv0g - */ - -#include -#include - -#include "Fahrzeug.h" - -using namespace std; - -double dGlobaleZeit = 0.0; - -void vAufgabe1() { - /* 3. Initialisieren */ - Fahrzeug fz1("Porsche"); - Fahrzeug *fz2 = new Fahrzeug(); - - string name; - cout << "Bitte geben Sie einen Fahrzeugnamen ein: "; - cin >> name; - - Fahrzeug *fz3 = new Fahrzeug(name); - - /* 5. Ausgabe */ - cout << endl << "ID Name : MaxKmh GesamtStrecke" << endl; - cout << "++++++++++++++++++++++++++++++++++++++++++" << endl; - fz1.vAusgabe(); - fz2->vAusgabe(); - fz3->vAusgabe(); - - /* 9. Abfertigung */ - double dAbfertigungsIntervall; - cout << endl << "Bitte geben Sie ein Abfertigungsintervall ein: "; - cin >> dAbfertigungsIntervall; - - cout << endl << "ID Name : MaxKmh GesamtStrecke" << endl; - cout << "++++++++++++++++++++++++++++++++++++++++++" << endl; - for (; dGlobaleZeit < 24; dGlobaleZeit += dAbfertigungsIntervall) { /* simuliere für einen Tag */ - fz1.vAbfertigung(); - fz2->vAbfertigung(); - fz3->vAbfertigung(); - - cout << "globale Zeit: " << dGlobaleZeit << endl; - fz1.vAusgabe(); - fz2->vAusgabe(); - fz3->vAusgabe(); - } - - delete fz2; - delete fz3; -} - -void vAufgabe1_deb() { - Fahrzeug fz1("Opel"); - Fahrzeug fz2("Benz"); - Fahrzeug fz3("Ferrari"); - Fahrzeug fz4("Mini"); - - Fahrzeug *feld_name[4] = {&fz1, &fz2, &fz3, &fz4}; - - feld_name[2] = 0; - - for (int i = 0; i < 4; i++) { - feld_name[i]->vAusgabe(); - } -} - -void vAufgabe2() { - int iAnzahl; - vector fahrzeuge; - - cout << "Wie viele Fahrzeuge möchten Sie erstellen? "; - cin >> iAnzahl; - - for (int j = 0; j < i; j++) { - fahrzeuge.push(Fahrrad::erzeuge()); - } -} - -int main() { - //vAufgabe1(); - //vAufgabe1_deb(); - vAugabe2(); - - return 0; -} diff --git a/Aufgabenblock_1/.cproject b/Aufgabenblock_1/.cproject new file mode 100644 index 0000000..fdc8715 --- /dev/null +++ b/Aufgabenblock_1/.cproject @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Aufgabeblock_1/.project b/Aufgabenblock_1/.project similarity index 92% rename from Aufgabeblock_1/.project rename to Aufgabenblock_1/.project index 8a85022..aca6731 100644 --- a/Aufgabeblock_1/.project +++ b/Aufgabenblock_1/.project @@ -1,6 +1,6 @@ - Aufgabeblock_1 + Aufgabenblock_1 @@ -31,7 +31,7 @@ org.eclipse.cdt.make.core.buildLocation - ${workspace_loc:/Aufgabeblock_1/Debug} + ${workspace_loc:/Aufgabenblock_1/Debug} org.eclipse.cdt.make.core.cleanBuildTarget @@ -69,7 +69,6 @@ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, @@ -79,6 +78,5 @@ org.eclipse.cdt.core.ccnature org.eclipse.cdt.managedbuilder.core.managedBuildNature org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - de.innot.avreclipse.core.avrnature diff --git a/Aufgabenblock_1/Fahrrad.cpp b/Aufgabenblock_1/Fahrrad.cpp new file mode 100644 index 0000000..bffc89c --- /dev/null +++ b/Aufgabenblock_1/Fahrrad.cpp @@ -0,0 +1,22 @@ +#include + +#include "Fahrrad.h" + +Fahrrad::Fahrrad(string sName, double dMaxGeschwindigkeit) : + Fahrzeug(sName, dMaxGeschwindigkeit) { } + +Fahrrad::~Fahrrad() { } + +double Fahrrad::dGeschwindigkeit() const { + double dGeschwindigkeit; + int iReduzierung = p_dGesamtStrecke / 20; + + dGeschwindigkeit = p_dMaxGeschwindigkeit * powl(0.9, iReduzierung); + + if (dGeschwindigkeit < 12) { + dGeschwindigkeit = 12; + } + + return dGeschwindigkeit; +} + diff --git a/Aufgabenblock_1/Fahrrad.h b/Aufgabenblock_1/Fahrrad.h new file mode 100644 index 0000000..769c9a5 --- /dev/null +++ b/Aufgabenblock_1/Fahrrad.h @@ -0,0 +1,16 @@ +#ifndef FAHRRAD_H_ +#define FAHRRAD_H_ + +#include "Fahrzeug.h" + +using namespace std; + +class Fahrrad: public Fahrzeug { +public: + Fahrrad(string sName, double dMaxGeschwindigkeit); + virtual ~Fahrrad(); + + double dGeschwindigkeit() const; +}; + +#endif /* FAHRRAD_H_ */ diff --git a/Aufgabenblock_1/Fahrzeug.cpp b/Aufgabenblock_1/Fahrzeug.cpp new file mode 100644 index 0000000..17fcf5b --- /dev/null +++ b/Aufgabenblock_1/Fahrzeug.cpp @@ -0,0 +1,98 @@ +#include +#include +#include + +#include "Fahrzeug.h" + +extern double dGlobaleZeit; + +int Fahrzeug::p_iMaxID = 0; + +Fahrzeug::Fahrzeug() { + vInitialisierung(); + //cout << this->p_sName << ":" << this->p_iID << " wurde initialisiert" << endl; +} + +Fahrzeug::Fahrzeug(Fahrzeug &fz) { + vInitialisierung(); + + p_sName = fz.p_sName; + p_dMaxGeschwindigkeit = fz.p_dMaxGeschwindigkeit; + + /* p_dGesamtStrecke, p_dGesamtZeit, p_dZeit werden auf 0 gesetzt */ +} + +Fahrzeug::Fahrzeug(string sName) { + vInitialisierung(); + + p_sName = sName; + //cout << this->p_sName << ":" << this->p_iID << " wurde initialisiert" << endl; +} + +Fahrzeug::Fahrzeug(string sName, double dMaxGeschwindkeit) { + vInitialisierung(); + + p_sName = sName; + p_dMaxGeschwindigkeit = dMaxGeschwindkeit; +} + +Fahrzeug::~Fahrzeug() { + //cout << this->p_sName << ":" << this->p_iID << " wurde gelöscht" << endl; +} + +void Fahrzeug::vInitialisierung() { + p_iID = ++p_iMaxID; + + p_sName = " "; + p_dMaxGeschwindigkeit = 0; + p_dGesamtStrecke = 0; + p_dGesamtZeit = 0; + p_dZeit = 0; +} + +void Fahrzeug::vAusgabeHeader() { + cout << "ID Name : MaxKmh GesamtStrecke Verbrauch Tankinhalt" << endl; + cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl; +} + +void Fahrzeug::vAusgabe() const { + cout << endl + << setprecision(2) << setiosflags(ios::fixed) + << resetiosflags(ios::right) << setiosflags(ios::left) + << setw(4) << p_iID + << setw(7) << p_sName << ":" + << resetiosflags(ios::left) << setiosflags(ios::right) + << setw(8) << dGeschwindigkeit() + << setw(16) << p_dGesamtStrecke; +} + +ostream& Fahrzeug::ostreamAusgabe(ostream &stream) const { + stream << setprecision(2) << setiosflags(ios::fixed) + << resetiosflags(ios::right) << setiosflags(ios::left) + << setw(4) << p_iID + << setw(7) << p_sName << ":" + << resetiosflags(ios::left) << setiosflags(ios::right) + << setw(8) << dGeschwindigkeit() + << setw(16) << p_dGesamtStrecke; + + return stream; +} + +void Fahrzeug::vAbfertigung() { + /* nicht doppelt abfertigen */ + if (fabs(p_dZeit - dGlobaleZeit) < 1e-10) return; + + double dDelta = dGlobaleZeit - p_dZeit; + + p_dGesamtZeit += dDelta; + p_dGesamtStrecke += dGeschwindigkeit() * dDelta; + p_dZeit = dGlobaleZeit; +} + +bool Fahrzeug::operator<(Fahrzeug fz) { + return (p_dGesamtStrecke < fz.p_dGesamtStrecke); +} + +ostream& operator<<(ostream &stream, const Fahrzeug fz) { + return fz.ostreamAusgabe(stream); +} diff --git a/Aufgabeblock_1/Fahrzeug.h b/Aufgabenblock_1/Fahrzeug.h similarity index 54% rename from Aufgabeblock_1/Fahrzeug.h rename to Aufgabenblock_1/Fahrzeug.h index 440bc8b..472447a 100644 --- a/Aufgabeblock_1/Fahrzeug.h +++ b/Aufgabenblock_1/Fahrzeug.h @@ -15,13 +15,22 @@ using namespace std; class Fahrzeug { public: Fahrzeug(); + Fahrzeug(Fahrzeug &fz); Fahrzeug(string sName); + Fahrzeug(string sName, double dMaxGeschwindkeit); + virtual ~Fahrzeug(); - void vAusgabe(); + virtual void vAusgabe() const; + virtual ostream& ostreamAusgabe(ostream &stream) const; + virtual void vAbfertigung(); - virtual double dTanken(double dMenge) { return 0; }; /* Kraftfahrzeuge überladen dTanken() */ - virtual double dGeschwindigkeit() { return p_dMaxGeschwindigkeit; } + virtual double dTanken(double dMenge = 0.0) { return 0; }; + virtual double dGeschwindigkeit() const { return p_dMaxGeschwindigkeit; } + + bool operator<(Fahrzeug fz); + + static void vAusgabeHeader(); protected: int p_iID; @@ -37,4 +46,6 @@ private: void vInitialisierung(); }; +ostream& operator<<(ostream &out, const Fahrzeug fz); + #endif /* FAHRZEUG_H_ */ diff --git a/Aufgabenblock_1/PKW.cpp b/Aufgabenblock_1/PKW.cpp new file mode 100644 index 0000000..e0b80bc --- /dev/null +++ b/Aufgabenblock_1/PKW.cpp @@ -0,0 +1,69 @@ +#include +#include + +#include "PKW.h" + +using namespace std; + +extern double dGlobaleZeit; + +PKW::PKW(string sName, double dMaxGeschwindigkeit) : + Fahrzeug(sName, dMaxGeschwindigkeit) { }; + +PKW::PKW(string sName, double dMaxGeschwindigkeit, double dVerbrauch, double dTankvolumen) : + Fahrzeug(sName, dMaxGeschwindigkeit), + p_dVerbrauch(dVerbrauch), + p_dTankinhalt(dTankvolumen/2), + p_dTankvolumen(dTankvolumen) { }; + +PKW::~PKW() { } + +double PKW::dTanken(double dMenge) { + double dAlterInhalt = p_dTankinhalt; + + if (dMenge == 0) { + p_dTankinhalt = p_dTankvolumen; + } + else { + p_dTankinhalt += dMenge; + if (p_dTankinhalt > p_dTankvolumen) { + p_dTankinhalt = p_dTankvolumen; /* Verhindere Überfüllung */ + } + } + + return p_dTankinhalt - dAlterInhalt; +} + +void PKW::vAbfertigung() { + if (p_dTankinhalt > 0) { /* prüfen, ob etwas im Tank ist */ + p_dTankinhalt -= (dGlobaleZeit - p_dZeit) * p_dMaxGeschwindigkeit * p_dVerbrauch / 100; + + if (p_dTankinhalt < 0) { /* falls Tankinhalt negativ ist */ + p_dTankinhalt = 0; + } + + Fahrzeug::vAbfertigung(); + } +} + +void PKW::vAusgabe() const { + Fahrzeug::vAusgabe(); + + cout << setprecision(2) << setiosflags(ios::fixed) + << resetiosflags(ios::left) << setiosflags(ios::right) + << setw(12) << dVerbrauch() + << setw(13) << p_dTankinhalt; +} + +ostream& PKW::ostreamAusgabe(ostream &stream) const { + Fahrzeug::ostreamAusgabe(stream) << setprecision(2) << setiosflags(ios::fixed) + << resetiosflags(ios::left) << setiosflags(ios::right) + << setw(12) << dVerbrauch() + << setw(13) << p_dTankinhalt; + + return stream; +} + +double PKW::dVerbrauch() const { + return p_dGesamtStrecke * p_dVerbrauch / 100; +} diff --git a/Aufgabeblock_1/PKW.h b/Aufgabenblock_1/PKW.h similarity index 55% rename from Aufgabeblock_1/PKW.h rename to Aufgabenblock_1/PKW.h index c624a3e..9183135 100644 --- a/Aufgabeblock_1/PKW.h +++ b/Aufgabenblock_1/PKW.h @@ -15,20 +15,21 @@ using namespace std; class PKW: public Fahrzeug { +public: + PKW(string sName, double dMaxGeschwindigkeit); + PKW(string sName, double dMaxGeschwindigkeit, double dVerbrauch, double dTankvolumen = 55); + virtual ~PKW(); + + void vAbfertigung(); + void vAusgabe() const; + ostream& ostreamAusgabe(ostream &stream) const; + double dVerbrauch() const; + double dTanken(double dMenge = 0.0); + private: double p_dVerbrauch; double p_dTankinhalt; double p_dTankvolumen; - -public: - PKW(string sName, double dTankvolumen); - PKW(double dTankvolumen); - virtual ~PKW(); - - void vAbfertigung(); - void vAusgabe(); - double dVerbrauch(); - double dTanken(double dMenge); }; #endif /* PKW_H_ */ diff --git a/Aufgabenblock_1/main.cpp b/Aufgabenblock_1/main.cpp new file mode 100644 index 0000000..5f1bb1e --- /dev/null +++ b/Aufgabenblock_1/main.cpp @@ -0,0 +1,163 @@ +#include +#include +#include + +#include "Fahrzeug.h" +#include "Fahrrad.h" +#include "PKW.h" + +using namespace std; + +double dGlobaleZeit = 0.0; + +void vAufgabe1() { + /* 3. Initialisieren */ + Fahrzeug fz1("Porsche"); + Fahrzeug *fz2 = new Fahrzeug(); + + string name; + cout << "Bitte geben Sie einen Fahrzeugnamen ein: "; + cin >> name; + + Fahrzeug *fz3 = new Fahrzeug(name, 22.5); + + Fahrzeug::vAusgabeHeader(); + fz1.vAusgabe(); + fz2->vAusgabe(); + fz3->vAusgabe(); + + /* 9. Abfertigung */ + double dAbfertigungsIntervall; + cout << endl << "Bitte geben Sie ein Abfertigungsintervall ein: "; + cin >> dAbfertigungsIntervall; + + Fahrzeug::vAusgabeHeader(); + for ( ; dGlobaleZeit < 24; dGlobaleZeit += dAbfertigungsIntervall) { /* simuliere für einen Tag */ + fz1.vAbfertigung(); + fz2->vAbfertigung(); + fz3->vAbfertigung(); + + cout << endl << "globale Zeit: " << dGlobaleZeit; + fz1.vAusgabe(); + fz2->vAusgabe(); + fz3->vAusgabe(); + } + + delete fz2; + delete fz3; +} + +/** + * Testing debugger + */ +void vAufgabe1_deb() { + Fahrzeug fz1("Opel"); + Fahrzeug fz2("Benz"); + Fahrzeug fz3("Ferrari"); + Fahrzeug fz4("Mini"); + + Fahrzeug *feld_name[4] = {&fz1, &fz2, &fz3, &fz4}; + + feld_name[2] = 0; // NULL pointer => Segmention Fault + + for (int i = 0; i < 4; i++) { + feld_name[i]->vAusgabe(); + } +} + +void vAufgabe2() { + int iPKWs, iFahrraeder; + vector fahrzeuge; + + /* Erzeugen */ + + cout << "Wie viele PKWs möchten Sie erstellen? "; + cin >> iPKWs; + + cout << "Wie viele Fahrräder möchten Sie erstellen? "; + cin >> iFahrraeder; + + for (int i = 0; i < iPKWs + iFahrraeder; i++) { + Fahrzeug *fahrzeug; + string sName; + double dMaxGeschwindkeit; + + cout << "Bitte geben Sie den Namen des Fahrzeugs Nr. " << i+1 << " an: "; + cin >> sName; + cout << "Bitte geben Sie die maximale Geschwindkeit des Fahrzeugs Nr. " << i+1 << " an: "; + cin >> dMaxGeschwindkeit; + + if (i < iPKWs) { /* erzeuge PKW */ + double dVerbrauch; + cout << "Bitte geben Sie den Verbrauch des PKWs Nr. " << i+1 << " an: "; + cin >> dVerbrauch; + + fahrzeug = new PKW(sName, dMaxGeschwindkeit, dVerbrauch); + } + else { /* erzeuge Fahrrad */ + fahrzeug = new Fahrrad(sName, dMaxGeschwindkeit); + } + + fahrzeuge.push_back(fahrzeug); + } + + /* Abfertigen */ + + double dAbfertigungsIntervall; + size_t iNachgetankt = 0; + cout << "Bitte geben Sie ein Abfertigungsintervall ein: "; + cin >> dAbfertigungsIntervall; + cout << endl; + + Fahrzeug::vAusgabeHeader(); + + for ( ; dGlobaleZeit < 6; dGlobaleZeit += dAbfertigungsIntervall) { + vector::iterator it; + for (it = fahrzeuge.begin(); it != fahrzeuge.end(); it++) { + if (dGlobaleZeit > 3 && iNachgetankt < fahrzeuge.size()) { + (*it)->dTanken(); + iNachgetankt++; + } + + (*it)->vAbfertigung(); + (*it)->vAusgabe(); + } + } +} + +void vAufgabe3() { + PKW vw("Golf", 200, 6.7, 88); + Fahrrad velo("Haibike", 22); + Fahrzeug sch("Schiff", 22); + + PKW::vAusgabeHeader(); + + cout << vw << endl << velo << endl << sch; +} + +int main() { + int iWahl; + + retry: + + cout << "1: vAufgabe1()" << endl; + cout << "2: vAufgabe1_deb()" << endl; + cout << "3: vAufgabe2()" << endl; + cout << "4: vAufgabe3()" << endl; + cout << "Bitte wähen Sie eine Aufgabe: "; + cin >> iWahl; + cout << endl; + + switch (iWahl) { + case 1: vAufgabe1(); break; + case 2: vAufgabe1_deb(); break; + case 3: vAufgabe2(); break; + case 4: vAufgabe3(); break; + default: + cerr << "Ungültige Eingabe! Bitte versuchen Sie es erneut" << endl; + goto retry; + } + + cout << endl; + return 0; +}