From 19f1e99deb99c0ca22707b3958d069d7f12db29a Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Wed, 9 Nov 2011 10:18:11 +0100 Subject: [PATCH] ein paar bugs gefixt und auf Abnahme vorbereitet --- Aufgabenblock_3/AktivesVO.cpp | 8 +++--- Aufgabenblock_3/Fahrzeug.cpp | 6 ++--- Aufgabenblock_3/Kreuzung.cpp | 5 ++-- Aufgabenblock_3/Losfahren.cpp | 2 +- Aufgabenblock_3/PKW.cpp | 4 +-- Aufgabenblock_3/Streckenende.cpp | 20 ++++++++++----- Aufgabenblock_3/Weg.cpp | 8 +++--- Aufgabenblock_3/Weg.h | 2 +- Aufgabenblock_3/Welt.cpp | 23 +++++++---------- Aufgabenblock_3/main.cpp | 44 ++++++++++++++++++-------------- 10 files changed, 65 insertions(+), 57 deletions(-) diff --git a/Aufgabenblock_3/AktivesVO.cpp b/Aufgabenblock_3/AktivesVO.cpp index d353405..47393b9 100644 --- a/Aufgabenblock_3/AktivesVO.cpp +++ b/Aufgabenblock_3/AktivesVO.cpp @@ -55,8 +55,8 @@ void AktivesVO::vInitialisierung() { } void AktivesVO::vAusgabeHeader() { - cout << "ID Zeit Name : Kmh GesamtStrecke Verbrauch Tankinhalt" << endl; - cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" + cout << "ID Zeit Name : Kmh Strecke Abschnitt Verbrauch Tankinhalt" << endl; + cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl; } @@ -64,8 +64,8 @@ ostream& AktivesVO::ostreamAusgabe(ostream &stream) const { stream << setprecision(1) << setiosflags(ios::fixed) << resetiosflags(ios::right) << setiosflags(ios::left) << setw(3) << p_iID - << setw(5) << p_dZeit - << setw(7) << p_sName << ":"; + << setw(6) << p_dZeit + << setw(9) << p_sName << ":"; return stream; } diff --git a/Aufgabenblock_3/Fahrzeug.cpp b/Aufgabenblock_3/Fahrzeug.cpp index ffeb48e..aa2f346 100644 --- a/Aufgabenblock_3/Fahrzeug.cpp +++ b/Aufgabenblock_3/Fahrzeug.cpp @@ -48,9 +48,9 @@ void Fahrzeug::vInitialisierung() { ostream& Fahrzeug::ostreamAusgabe(ostream &stream) const { AktivesVO::ostreamAusgabe(stream) << setprecision(2) << resetiosflags(ios::left) << setiosflags(ios::right) - << setw(8) << dGeschwindigkeit() - << setw(7) << p_dGesamtStrecke << " (" - << setw(6) << p_dAbschnittStrecke << ")"; + << setw(10) << dGeschwindigkeit() + << setw(9) << p_dGesamtStrecke + << setw(11) << p_dAbschnittStrecke; return stream; } diff --git a/Aufgabenblock_3/Kreuzung.cpp b/Aufgabenblock_3/Kreuzung.cpp index 6267e7d..2061c20 100644 --- a/Aufgabenblock_3/Kreuzung.cpp +++ b/Aufgabenblock_3/Kreuzung.cpp @@ -36,7 +36,8 @@ void Kreuzung::vTanken(Fahrzeug *pFz) { if (p_dTankstelle > 0) { p_dTankstelle -= pFz->dTanken(); /* immmer volltanken */ } - else { + + if (p_dTankstelle < 0) { p_dTankstelle = 0; } } @@ -79,7 +80,7 @@ void Kreuzung::vZeichnen(Koordinaten iKoordinaten) const { ostream& Kreuzung::ostreamAusgabe(ostream &stream) const { AktivesVO::ostreamAusgabe(stream) << setprecision(2) << resetiosflags(ios::left) << setiosflags(ios::right) - << setw(8) << p_dTankstelle << " ( "; + << setw(10) << p_dTankstelle << " ( "; list::const_iterator it; for (it = p_lWege.begin(); it != p_lWege.end(); it++) { diff --git a/Aufgabenblock_3/Losfahren.cpp b/Aufgabenblock_3/Losfahren.cpp index 1855497..fbc87fe 100644 --- a/Aufgabenblock_3/Losfahren.cpp +++ b/Aufgabenblock_3/Losfahren.cpp @@ -11,7 +11,7 @@ Losfahren::~Losfahren() { } void Losfahren::vBearbeiten() { - cerr << "Fahrausnahme: Losfahren (Fzg: " << *p_pFahrzeug << ", Weg: " << *p_pWeg << ")" << endl; + cerr << "Fahrausnahme: Losfahren (Fzg: " << p_pFahrzeug->getName() << ", Weg: " << p_pWeg->getName() << ")" << endl; p_pWeg->vAbgabe(p_pFahrzeug); p_pWeg->vAnnahme(p_pFahrzeug); diff --git a/Aufgabenblock_3/PKW.cpp b/Aufgabenblock_3/PKW.cpp index 2b774d5..d46d738 100644 --- a/Aufgabenblock_3/PKW.cpp +++ b/Aufgabenblock_3/PKW.cpp @@ -75,8 +75,8 @@ void PKW::vAbfertigung() { 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; + << setw(11) << dVerbrauch() + << setw(12) << p_dTankinhalt; return stream; } diff --git a/Aufgabenblock_3/Streckenende.cpp b/Aufgabenblock_3/Streckenende.cpp index 06e3da4..64269a7 100644 --- a/Aufgabenblock_3/Streckenende.cpp +++ b/Aufgabenblock_3/Streckenende.cpp @@ -13,15 +13,21 @@ Streckenende::~Streckenende() void Streckenende::vBearbeiten() { Kreuzung *pZielKreuzung = p_pWeg->getZielKreuzung(); - Weg *pNeuerWeg = pZielKreuzung->pZufaelligerWeg(p_pWeg); /* wähle zufälligen Weg */ p_pWeg->vAbgabe(p_pFahrzeug); - pZielKreuzung->vTanken(p_pFahrzeug); - pZielKreuzung->vAnnahme(p_pFahrzeug, 0, pNeuerWeg); cerr << "Fahrausnahme: Fahrzeug wird umgesetzt (" - << "Fzg: " << p_pFahrzeug->getName() - << ", Weg: " << p_pWeg->getName() << " => " << pNeuerWeg->getName() - << ", Kreuz.: " << pZielKreuzung->getName() << " (Tank: " << pZielKreuzung->getTankinhalt() << ")" - << ")" << endl; + << "Fzg: " << p_pFahrzeug->getName() + << ", Weg: " << p_pWeg->getName(); + + if (pZielKreuzung != NULL) { + Weg *pNeuerWeg = pZielKreuzung->pZufaelligerWeg(p_pWeg); /* wähle zufälligen Weg */ + + pZielKreuzung->vTanken(p_pFahrzeug); + pZielKreuzung->vAnnahme(p_pFahrzeug, 0, pNeuerWeg); + + cerr << " => " << pNeuerWeg->getName() << ", Kreuz.: " << pZielKreuzung->getName() << " (Tank: " << pZielKreuzung->getTankinhalt() << ")"; + } + + cerr << ")" << endl; } diff --git a/Aufgabenblock_3/Weg.cpp b/Aufgabenblock_3/Weg.cpp index 4dd9eb1..cd5833b 100644 --- a/Aufgabenblock_3/Weg.cpp +++ b/Aufgabenblock_3/Weg.cpp @@ -108,10 +108,10 @@ Kreuzung * Weg::getZielKreuzung() { double Weg::getMaxGeschwindigkeit() const { switch (p_eLimit) { - case Weg::Innerorts: return 50; + case Weg::Innerorts: return 50; case Weg::Landstrasse: return 100; case Weg::Autobahn: return DBL_MAX; /* unbegrenzt */ - default: return 0; + default: throw string("ungültige Begrenzung!"); } } @@ -121,7 +121,7 @@ ostream& Weg::ostreamAusgabe(ostream &stream) const { AktivesVO::ostreamAusgabe(stream) << setprecision(2) << resetiosflags(ios::left) << setiosflags(ios::right) - << setw(8); + << setw(10); if (dMaxGeschwindigkeit == DBL_MAX) { stream << "(inf)"; @@ -130,7 +130,7 @@ ostream& Weg::ostreamAusgabe(ostream &stream) const { stream << dMaxGeschwindigkeit; } - stream << setw(16) << p_dLaenge << " ( "; + stream << setw(9) << p_dLaenge << " ( "; LazyListe::const_iterator it; for (it = p_lFahrzeuge.begin(); it != p_lFahrzeuge.end(); it++) { diff --git a/Aufgabenblock_3/Weg.h b/Aufgabenblock_3/Weg.h index 55061fd..dc9eab2 100644 --- a/Aufgabenblock_3/Weg.h +++ b/Aufgabenblock_3/Weg.h @@ -17,7 +17,7 @@ class Kreuzung; class Weg : public AktivesVO { public: typedef enum { - Innerorts, /* 50 km/h */ + Innerorts = 1, /* 50 km/h */ Landstrasse, /* 100 km/h */ Autobahn /* unbegrenzt */ } Begrenzung; diff --git a/Aufgabenblock_3/Welt.cpp b/Aufgabenblock_3/Welt.cpp index cc1e34f..c8f8da9 100644 --- a/Aufgabenblock_3/Welt.cpp +++ b/Aufgabenblock_3/Welt.cpp @@ -67,13 +67,8 @@ void Welt::vEinlesen(istream &in) { >> bUeberholverbot; /* Kreuzungen suchen */ - Kreuzung *pQuellKreuzung = static_cast(AktivesVO::pObjekt(sQuellKreuzung)); - Kreuzung *pZielKreuzung = static_cast(AktivesVO::pObjekt(sZielKreuzung)); - - eLimit--; - if (eLimit > 2 || eLimit < 0) { - throw string("Ungültige Geschwindikeitsbegrenzung (0-2)"); - } + Kreuzung *pQuellKreuzung = dynamic_cast(AktivesVO::pObjekt(sQuellKreuzung)); + Kreuzung *pZielKreuzung = dynamic_cast(AktivesVO::pObjekt(sZielKreuzung)); /* Kreuzungen verbinden & Wege erstellen */ pQuellKreuzung->vVerbinde(pZielKreuzung, sHinweg, sRueckweg, dLaenge, static_cast(eLimit), bUeberholverbot); @@ -87,7 +82,7 @@ void Welt::vEinlesen(istream &in) { in >> *pPkw >> sStartKreuzung >> dStartZeit; /* PKW einsetzen */ - Kreuzung *pStartKreuzung = static_cast(AktivesVO::pObjekt(sStartKreuzung)); + Kreuzung *pStartKreuzung = dynamic_cast(AktivesVO::pObjekt(sStartKreuzung)); pStartKreuzung->vAnnahme(pPkw, dStartZeit); } else if (sTyp == "FAHRRAD") { @@ -99,7 +94,7 @@ void Welt::vEinlesen(istream &in) { in >> *pRad >> sStartKreuzung >> dStartZeit; /* PKW einsetzen */ - Kreuzung *pStartKreuzung = static_cast(AktivesVO::pObjekt(sStartKreuzung)); + Kreuzung *pStartKreuzung = dynamic_cast(AktivesVO::pObjekt(sStartKreuzung)); pStartKreuzung->vAnnahme(pRad, dStartZeit); } else if (sTyp != "") { @@ -144,14 +139,14 @@ void Welt::vEinlesenMitGrafik(istream &in) { } /* Kreuzungen suchen */ - Kreuzung *pQuellKreuzung = static_cast(AktivesVO::pObjekt(sQuellKreuzung)); - Kreuzung *pZielKreuzung = static_cast(AktivesVO::pObjekt(sZielKreuzung)); + Kreuzung *pQuellKreuzung = dynamic_cast(AktivesVO::pObjekt(sQuellKreuzung)); + Kreuzung *pZielKreuzung = dynamic_cast(AktivesVO::pObjekt(sZielKreuzung)); /* Kreuzungen verbinden & Wege erstellen */ pQuellKreuzung->vVerbinde(pZielKreuzung, sHinweg, sRueckweg, dLaenge, static_cast(eLimit), bUeberholverbot); /* Wege Zeichnen */ - Weg *pHinweg = static_cast(AktivesVO::pObjekt(sHinweg)); + Weg *pHinweg = dynamic_cast(AktivesVO::pObjekt(sHinweg)); pHinweg->vZeichnen(iAnzahlKoordinaten, iPoly); } else if (sTyp == "PKW") { @@ -163,7 +158,7 @@ void Welt::vEinlesenMitGrafik(istream &in) { in >> *pPkw >> sStartKreuzung >> dStartZeit; /* PKW einsetzen */ - Kreuzung *pStartKreuzung = static_cast(AktivesVO::pObjekt(sStartKreuzung)); + Kreuzung *pStartKreuzung = dynamic_cast(AktivesVO::pObjekt(sStartKreuzung)); pStartKreuzung->vAnnahme(pPkw, dStartZeit); } else if (sTyp == "FAHRRAD") { @@ -175,7 +170,7 @@ void Welt::vEinlesenMitGrafik(istream &in) { in >> *pRad >> sStartKreuzung >> dStartZeit; /* PKW einsetzen */ - Kreuzung *pStartKreuzung = static_cast(AktivesVO::pObjekt(sStartKreuzung)); + Kreuzung *pStartKreuzung = dynamic_cast(AktivesVO::pObjekt(sStartKreuzung)); pStartKreuzung->vAnnahme(pRad, dStartZeit); } else if (sTyp != "") { diff --git a/Aufgabenblock_3/main.cpp b/Aufgabenblock_3/main.cpp index 67c7266..689fe76 100644 --- a/Aufgabenblock_3/main.cpp +++ b/Aufgabenblock_3/main.cpp @@ -279,14 +279,16 @@ void vAufgabe6a(int argc, char *argv[]) { void vAufgabe7(int argc, char *argv[]) { PKW vw("Golf", 120, 10, 90); + PKW vw2("Auto", 55, 12, 80); Fahrrad velo("Haibike", 42); - Weg hin("Hinweg", 500.0, Weg::Landstrasse); - Weg rueck("Rueckweg", 500.0, Weg::Landstrasse); + Weg hin("Hinweg", 200.0, Weg::Landstrasse); + Weg rueck("Rueckweg", 200.0, Weg::Landstrasse); hin.setRueckweg(&rueck); rueck.setRueckweg(&hin); + bool bAngenommen = false; bool bStarted = bInitialisiereGrafik(800, 600); if (!bStarted) { cerr << "Konnte Simulationsserver nicht starten!" << endl; @@ -295,20 +297,26 @@ void vAufgabe7(int argc, char *argv[]) { Koordinaten iPoly[] = {{100, 100}, {700, 500} }; hin.vZeichnen(2, iPoly); - hin.vAnnahme(&vw, 8); + hin.vAnnahme(&vw, 4); hin.vAnnahme(&velo, 1); Fahrzeug::vAusgabeHeader(); - for (dGlobaleZeit = 0; dGlobaleZeit <= 30; dGlobaleZeit += 0.5) { + for (dGlobaleZeit = 0; dGlobaleZeit < 9.4; dGlobaleZeit += 0.1) { hin.vAbfertigung(); hin.vZeichnen(); rueck.vZeichnen(); - cout << vw << endl << velo << endl << hin << endl << "--" << endl; + if (dGlobaleZeit > 4 && !bAngenommen) { + hin.vAnnahme(&vw2, dGlobaleZeit + 1); + bAngenommen = true; + } + + Fahrzeug::vAusgabeHeader(); + cout << hin << endl << "--" << endl; vSetzeZeit(dGlobaleZeit); - Sleep(500); + Sleep(100); } vBeendeGrafik(); @@ -318,7 +326,7 @@ void vAufgabe8(int argc, char *argv[]) { bInitialisiereGrafik(1000, 700); PKW vw("Golf", 120, 10, 90); - PKW ferrari("Ferrari", 320, 15, 210); + PKW ferrari("Ferrari", 120, 15, 210); Fahrrad velo("Haibike", 42); Kreuzung kr1("K1"); @@ -357,9 +365,9 @@ void vAufgabe8(int argc, char *argv[]) { bZeichneStrasse("W34", "W43", 85, 5, (int *) iW34); bZeichneStrasse("W44a", "W44b", 130, 7, (int *) iW44); - kr1.vAnnahme(&vw); - kr1.vAnnahme(&velo); - kr2.vAnnahme(&ferrari, 5); + kr1.vAnnahme(&vw, 1); + kr1.vAnnahme(&velo, 2); + kr2.vAnnahme(&ferrari, 3); for (dGlobaleZeit = 0.3; dGlobaleZeit <= 24; dGlobaleZeit += 0.01) { kr1.vAbfertigung(); @@ -394,7 +402,6 @@ void vAufgabe9(int argc, char *argv[]) { ifstream File; File.open(argv[1]); - if(!File.good()) { throw string("Datei existiert nicht!"); } @@ -406,10 +413,7 @@ void vAufgabe9(int argc, char *argv[]) { File >> pkw >> rad >> krz; Fahrzeug::vAusgabeHeader(); - cout - << pkw << endl - << rad << endl - << krz << endl; + cout << pkw << endl << rad << endl << krz << endl; /* Teste map */ string sName; @@ -418,14 +422,15 @@ void vAufgabe9(int argc, char *argv[]) { cout << *AktivesVO::pObjekt(sName) << endl; cout << endl; - PKW pkw2("Porsche", 99); + cout << "Geben Sie einen Namen zum Erstellen ein: "; + cin >> sName; + PKW pkw2(sName, 99); } void vAufgabe9a(int argc, char *argv[]) { ifstream File; File.open(argv[1]); - if(!File.good()) { throw string("Datei existiert nicht!"); } @@ -435,14 +440,15 @@ void vAufgabe9a(int argc, char *argv[]) { Welt tErde; tErde.vEinlesenMitGrafik(File); - for (dGlobaleZeit = 0; dGlobaleZeit < 24*31; dGlobaleZeit += 0.1) { + for (dGlobaleZeit = 0; dGlobaleZeit < 24*31; dGlobaleZeit += 0.01) { tErde.vAbfertigung(); tErde.vZeichnen(); + Fahrzeug::vAusgabeHeader(); cout << tErde << "--" << endl; vSetzeZeit(dGlobaleZeit); - Sleep(500); + Sleep(30); } vBeendeGrafik();