ein paar bugs gefixt und auf Abnahme vorbereitet

This commit is contained in:
Steffen Vogel 2011-11-09 10:18:11 +01:00
parent c1f9fa1ac6
commit 19f1e99deb
10 changed files with 65 additions and 57 deletions

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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<Weg *>::const_iterator it;
for (it = p_lWege.begin(); it != p_lWege.end(); it++) {

View file

@ -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);

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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<Fahrzeug *>::const_iterator it;
for (it = p_lFahrzeuge.begin(); it != p_lFahrzeuge.end(); it++) {

View file

@ -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;

View file

@ -67,13 +67,8 @@ void Welt::vEinlesen(istream &in) {
>> bUeberholverbot;
/* Kreuzungen suchen */
Kreuzung *pQuellKreuzung = static_cast<Kreuzung *>(AktivesVO::pObjekt(sQuellKreuzung));
Kreuzung *pZielKreuzung = static_cast<Kreuzung *>(AktivesVO::pObjekt(sZielKreuzung));
eLimit--;
if (eLimit > 2 || eLimit < 0) {
throw string("Ungültige Geschwindikeitsbegrenzung (0-2)");
}
Kreuzung *pQuellKreuzung = dynamic_cast<Kreuzung *>(AktivesVO::pObjekt(sQuellKreuzung));
Kreuzung *pZielKreuzung = dynamic_cast<Kreuzung *>(AktivesVO::pObjekt(sZielKreuzung));
/* Kreuzungen verbinden & Wege erstellen */
pQuellKreuzung->vVerbinde(pZielKreuzung, sHinweg, sRueckweg, dLaenge, static_cast<Weg::Begrenzung >(eLimit), bUeberholverbot);
@ -87,7 +82,7 @@ void Welt::vEinlesen(istream &in) {
in >> *pPkw >> sStartKreuzung >> dStartZeit;
/* PKW einsetzen */
Kreuzung *pStartKreuzung = static_cast<Kreuzung *>(AktivesVO::pObjekt(sStartKreuzung));
Kreuzung *pStartKreuzung = dynamic_cast<Kreuzung *>(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<Kreuzung *>(AktivesVO::pObjekt(sStartKreuzung));
Kreuzung *pStartKreuzung = dynamic_cast<Kreuzung *>(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<Kreuzung *>(AktivesVO::pObjekt(sQuellKreuzung));
Kreuzung *pZielKreuzung = static_cast<Kreuzung *>(AktivesVO::pObjekt(sZielKreuzung));
Kreuzung *pQuellKreuzung = dynamic_cast<Kreuzung *>(AktivesVO::pObjekt(sQuellKreuzung));
Kreuzung *pZielKreuzung = dynamic_cast<Kreuzung *>(AktivesVO::pObjekt(sZielKreuzung));
/* Kreuzungen verbinden & Wege erstellen */
pQuellKreuzung->vVerbinde(pZielKreuzung, sHinweg, sRueckweg, dLaenge, static_cast<Weg::Begrenzung >(eLimit), bUeberholverbot);
/* Wege Zeichnen */
Weg *pHinweg = static_cast<Weg *>(AktivesVO::pObjekt(sHinweg));
Weg *pHinweg = dynamic_cast<Weg *>(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<Kreuzung *>(AktivesVO::pObjekt(sStartKreuzung));
Kreuzung *pStartKreuzung = dynamic_cast<Kreuzung *>(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<Kreuzung *>(AktivesVO::pObjekt(sStartKreuzung));
Kreuzung *pStartKreuzung = dynamic_cast<Kreuzung *>(AktivesVO::pObjekt(sStartKreuzung));
pStartKreuzung->vAnnahme(pRad, dStartZeit);
}
else if (sTyp != "") {

View file

@ -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();