From a24126cf993e43e382e2b0fa7afbbb07a7558106 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Sun, 6 Nov 2011 12:46:23 +0100 Subject: [PATCH] =?UTF-8?q?Anpassungen=20f=C3=BCr=20VS2010=20nach=20dem=20?= =?UTF-8?q?2.=20Testat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Aufgabenblock_2/Fahrzeug.cpp | 3 +- Aufgabenblock_2/FzgFahren.cpp | 2 +- Aufgabenblock_2/FzgParken.cpp | 2 +- Aufgabenblock_2/LazyAktion.h | 10 ++- Aufgabenblock_2/LazyListe.h | 7 +- Aufgabenblock_2/SimuClient.h | 114 ++++++++++++--------------------- Aufgabenblock_2/SimuServer.jar | Bin 11466 -> 14186 bytes Aufgabenblock_2/Weg.cpp | 14 +++- Aufgabenblock_2/Weg.h | 3 +- Aufgabenblock_2/main.cpp | 27 ++++---- 10 files changed, 78 insertions(+), 104 deletions(-) diff --git a/Aufgabenblock_2/Fahrzeug.cpp b/Aufgabenblock_2/Fahrzeug.cpp index 7e30020..975af7f 100644 --- a/Aufgabenblock_2/Fahrzeug.cpp +++ b/Aufgabenblock_2/Fahrzeug.cpp @@ -88,7 +88,8 @@ void Fahrzeug::vNeueStrecke(Weg *pWeg, double dStartZeit) { if (p_pVerhalten != NULL) { /* alter Weg vorhanden? */ delete p_pVerhalten; /* Speicherleck vermeiden! */ } - else if (dStartZeit > 0) { + + if (dStartZeit > 0) { p_pVerhalten = new FzgParken(pWeg, dStartZeit); } else { diff --git a/Aufgabenblock_2/FzgFahren.cpp b/Aufgabenblock_2/FzgFahren.cpp index f0c1528..3376d29 100644 --- a/Aufgabenblock_2/FzgFahren.cpp +++ b/Aufgabenblock_2/FzgFahren.cpp @@ -13,7 +13,7 @@ FzgFahren::~FzgFahren() double FzgFahren::dStrecke(Fahrzeug *pFz, double dDelta) { double dStrecke = pFz->dGeschwindigkeit() * dDelta; - if (pFz->getAbschnittStrecke() >= p_pWeg->getLaenge()) { /* bereits zuweit gefahren */ + if (pFz->getAbschnittStrecke() >= p_pWeg->getLaenge() - 1e-5) { /* bereits zuweit gefahren */ throw Streckenende(pFz, p_pWeg); } else if (pFz->getAbschnittStrecke() + dStrecke > p_pWeg->getLaenge()) { /* fahre nur bis zum Streckenende */ diff --git a/Aufgabenblock_2/FzgParken.cpp b/Aufgabenblock_2/FzgParken.cpp index 77dedb0..ed9594d 100644 --- a/Aufgabenblock_2/FzgParken.cpp +++ b/Aufgabenblock_2/FzgParken.cpp @@ -14,7 +14,7 @@ FzgParken::~FzgParken() { } double FzgParken::dStrecke(Fahrzeug *pFz, double dDelta) { - if (p_dStartZeit > dGlobaleZeit) { + if (p_dStartZeit >= dGlobaleZeit - 1e-5) { return 0.0; } else { diff --git a/Aufgabenblock_2/LazyAktion.h b/Aufgabenblock_2/LazyAktion.h index 0f6860b..1bf954f 100644 --- a/Aufgabenblock_2/LazyAktion.h +++ b/Aufgabenblock_2/LazyAktion.h @@ -33,7 +33,7 @@ public: } private: - using LazyAktion::p_ptLazyListe; + //using LazyAktion::p_ptLazyListe; T p_tObjekt; }; @@ -53,7 +53,7 @@ public: } private: - using LazyAktion::p_ptLazyListe; // für gcc notwendig + //using LazyAktion::p_ptLazyListe; // für gcc notwendig T p_tObjekt; }; @@ -66,9 +66,7 @@ public: LazyErase(const iterator &itObjekt, list *eineListe) : LazyAktion (eineListe), p_itObjekt(itObjekt) - { - cout << "reihe " << *itObjekt << " zur löschung ein" << endl; - } + { } virtual ~LazyErase() { } @@ -77,7 +75,7 @@ public: } private: - using LazyAktion::p_ptLazyListe; // für gcc notwendig + //using LazyAktion::p_ptLazyListe; // für gcc notwendig iterator p_itObjekt; // bei erase Iterator speichern }; diff --git a/Aufgabenblock_2/LazyListe.h b/Aufgabenblock_2/LazyListe.h index d6a73c9..90d974d 100644 --- a/Aufgabenblock_2/LazyListe.h +++ b/Aufgabenblock_2/LazyListe.h @@ -71,12 +71,9 @@ public: // ausstehende Aktionen durchfuehren typename list *>::const_iterator it; // TODO warum typename?! for (it = p_ListeAktionen.begin(); it != p_ListeAktionen.end(); it++) { - cout << "führe aktion aus, noch " << p_ListeAktionen.size() << endl; // Aktion ausführen - //LazyAktion *pAktion = *it; - //pAktion->vAusfuehren(); - - (*it)->vAusfuehren(); + LazyAktion *pAktion = *it; + pAktion->vAusfuehren(); // Zeiger auf Action-Element löschen delete *it; diff --git a/Aufgabenblock_2/SimuClient.h b/Aufgabenblock_2/SimuClient.h index cfeadd8..80133d0 100644 --- a/Aufgabenblock_2/SimuClient.h +++ b/Aufgabenblock_2/SimuClient.h @@ -1,74 +1,40 @@ -/* - * SimuClient für MacOS/Linux (Praktikum Informatik 2, WS 2009/10 RWTH Aachen) - * Version 0.5 - * von Robert Uhl, 2009 - 2010 - * Vielen Dank an den Lehrstuhl EECS, RWTH Aachen, für den Zugang zum Quellcode - * des SimuClient für Windows. - * Datei: SimuClient.h - * Inhalt: SimuClient sendet Daten an den (erweiterten) Java-Grafik-Server - */ - -#ifndef SIMUCLIENT_H -#define SIMUCLIENT_H - -#include -using namespace std; - -/** - * Grafik-Server initialisieren - * Standard: bStarteServer = true, sServer = "localhost", iPort = 7654 - */ -bool bInitialisiereGrafik(int sizeX, int sizeY, bool bStarteServer = true, const string& sServer = "localhost", const unsigned short iPort = 7654); - -/** - * Zeichnet eine Kreuzung - */ -bool bZeichneKreuzung(int posX, int posY); - -/** - * Straße zeichnen - */ -bool bZeichneStrasse(const string& way_to_name, const string& way_back_name, int length, int numPoints, int* points_xy); - -/** - * PKW zeichnen - */ -bool bZeichnePKW(const string& carname, const string& streetname, double rel_position, double speed, double tank); - -/** - * Zeichne Fahrrad - */ -bool bZeichneFahrrad(const string& bikename, const string& streetname, double relposition, double speed); - -/** - * Sendet die aktuelle Simulationszeit an den erweiterten SimuServer - */ -void vSetzeZeit(const double dTime); - -/** - * Ersetzt die Sleep()-Funktion von Windows, die mSek übernimmt - */ -void Sleep(const int mSec); - -/** - * Grafikserver beenden - */ -void vBeendeGrafik(void); - -/* - * Zusätzliche Schnittstellen wegen eventueller Konvertierungsprobleme bei string/char* - */ - -bool bZeichneStrasse(const char* way_to_name, const char* way_back_name, int length, int numPoints, int* points_xy); -bool bZeichneStrasse(const string& way_to_name, const char* way_back_name, int length, int numPoints, int* points_xy); -bool bZeichneStrasse(const char* way_to_name, const string& way_back_name, int length, int numPoints, int* points_xy); - -bool bZeichnePKW(const char* carname, const char* streetname, double rel_position, double speed, double tank); -bool bZeichnePKW(const string& carname, const char* streetname, double rel_position, double speed, double tank); -bool bZeichnePKW(const char* carname, const string& streetname, double rel_position, double speed, double tank); - -bool bZeichneFahrrad(const char* bikename, const char* streetname, double rel_position, double speed); -bool bZeichneFahrrad(const string& bikename, const char* streetname, double rel_position, double speed); -bool bZeichneFahrrad(const char* bikename, const string& streetname, double rel_position, double speed); - -#endif // SIMUCLIENT_H +#pragma once +#pragma warning (disable:4786) +#include +using namespace std; + +// Folgender ifdef-Block ist die Standardmethode zum Erstellen von Makros, die das Exportieren +// aus einer DLL vereinfachen. Alle Dateien in dieser DLL werden mit dem SIMUCLIENT_EXPORTS-Symbol +// kompiliert, das in der Befehlszeile definiert wurde. Das Symbol darf nicht für ein Projekt definiert werden, +// das diese DLL verwendet. Alle anderen Projekte, deren Quelldateien diese Datei beinhalten, erkennen +// SIMUCLIENT_API-Funktionen als aus einer DLL importiert, während die DLL +// mit diesem Makro definierte Symbole als exportiert ansieht. +#ifdef SIMUCLIENT_EXPORTS +#define SIMUCLIENT_API __declspec(dllexport) +#else +#define SIMUCLIENT_API __declspec(dllimport) +#endif + +// NUTZBARE FUNKTIONEN (offizielle Schnittstelle) +SIMUCLIENT_API bool bInitialisiereGrafik(int sizeX, int sizeY, char* address = "127.0.0.1"); +SIMUCLIENT_API bool bZeichneKreuzung(int posX, int posY); +SIMUCLIENT_API bool bZeichneStrasse(const string& way_to_name, const string& way_back_name, int length, int numPoints, int* points_xy); +SIMUCLIENT_API bool bZeichnePKW(const string& carname, const string& streetname, double rel_position, double speed, double tank); +SIMUCLIENT_API bool bZeichneFahrrad(const string& bikename, const string& streetname, double relposition, double speed); +SIMUCLIENT_API void vBeendeGrafik(); +SIMUCLIENT_API void vSetzeZeit(const double dTime); + +// Zusätzliche Schnittstellen (wegen Konvertierungsproblemen bei string/char*) + +SIMUCLIENT_API bool bZeichneStrasse(const char* way_to_name, const char* way_back_name, int length, int numPoints, int* points_xy); +SIMUCLIENT_API bool bZeichneStrasse(const string& way_to_name, const char* way_back_name, int length, int numPoints, int* points_xy); +SIMUCLIENT_API bool bZeichneStrasse(const char* way_to_name, const string& way_back_name, int length, int numPoints, int* points_xy); +SIMUCLIENT_API bool bZeichnePKW(const string& carname, const char* streetname, double rel_position, double speed, double tank); +SIMUCLIENT_API bool bZeichneFahrrad(const string& bikename, const char* streetname, double rel_position, double speed); +SIMUCLIENT_API bool bZeichnePKW(const char* carname, const char* streetname, double rel_position, double speed, double tank); +SIMUCLIENT_API bool bZeichneFahrrad(const char* bikename, const char* streetname, double rel_position, double speed); +SIMUCLIENT_API bool bZeichnePKW(const char* carname, const string& streetname, double rel_position, double speed, double tank); +SIMUCLIENT_API bool bZeichneFahrrad(const char* bikename, const string& streetname, double rel_position, double speed); + +// Wrapperfunktion fuer Sleep +SIMUCLIENT_API void vSleep(int mSec); \ No newline at end of file diff --git a/Aufgabenblock_2/SimuServer.jar b/Aufgabenblock_2/SimuServer.jar index 496145c6fe0220e03ee75d08169a70bfb1e41e7c..e8c7e935475b1ca2c8449484c4f7d926ca05bebc 100644 GIT binary patch literal 14186 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 literal 11466 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::iterator it; + p_pFahrzeuge.vAktualisieren(); for (it = p_pFahrzeuge.begin(); it != p_pFahrzeuge.end(); it++) { - try { + try { (*it)->vAbfertigung(); } catch (FahrAusnahme &ausnahme) { ausnahme.vBearbeiten(); } } + p_pFahrzeuge.vAktualisieren(); p_dZeit = dGlobaleZeit; } void Weg::vAnnahme(Fahrzeug *pFz, double dStartZeit) { pFz->vNeueStrecke(this, dStartZeit); - p_pFahrzeuge.push_back(pFz); + + if (dStartZeit > 0) { /* parkende Fahrzeuge werden vorne eingefügt */ + p_pFahrzeuge.push_front(pFz); + } + else { /* fahrende hinten */ + p_pFahrzeuge.push_back(pFz); + } } void Weg::vAbgabe(Fahrzeug *pFz) { @@ -46,7 +54,7 @@ void Weg::vAbgabe(Fahrzeug *pFz) { result = find(p_pFahrzeuge.begin(), p_pFahrzeuge.end(), pFz); - if (result != p_pFahrzeuge.end()) { + if (result != p_pFahrzeuge.end()) { /* gefunden */ p_pFahrzeuge.erase(result); } } diff --git a/Aufgabenblock_2/Weg.h b/Aufgabenblock_2/Weg.h index 1a60da7..e44118c 100644 --- a/Aufgabenblock_2/Weg.h +++ b/Aufgabenblock_2/Weg.h @@ -5,6 +5,7 @@ #include #include "AktivesVO.h" +#include "LazyListe.h" using namespace std; @@ -34,7 +35,7 @@ public: private: double p_dLaenge; Begrenzung p_eLimit; - list p_pFahrzeuge; + LazyListe p_pFahrzeuge; }; #endif /* WEG_H_ */ diff --git a/Aufgabenblock_2/main.cpp b/Aufgabenblock_2/main.cpp index ec8508e..6c0f5e9 100644 --- a/Aufgabenblock_2/main.cpp +++ b/Aufgabenblock_2/main.cpp @@ -3,6 +3,8 @@ #include #include +#include + #include "SimuClient.h" #include "Fahrzeug.h" #include "Fahrrad.h" @@ -12,7 +14,7 @@ using namespace std; -double dGlobaleZeit = 0.0; +double dGlobaleZeit; void vAufgabe1() { /* 3. Initialisieren */ @@ -155,14 +157,14 @@ void vAufgabe3() { void vAufgabe4() { Weg weg("Allee", 150.0, Weg::Landstrasse); - PKW vw("Golf", 110, 6.7, 88); + PKW vw("Golf", 55, 6.7, 88); Fahrrad velo("Haibike", 22); - weg.vAnnahme(&vw); - weg.vAnnahme(&velo, 1.1); + weg.vAnnahme(&vw, 1.2); + weg.vAnnahme(&velo); Fahrzeug::vAusgabeHeader(); - while (dGlobaleZeit < 10) { + while (dGlobaleZeit < 3) { dGlobaleZeit += 0.1; weg.vAbfertigung(); cout << vw << endl << velo << endl << weg << endl; @@ -173,10 +175,10 @@ void vAufgabe5() { Weg hin("Hinweg", 500.0, Weg::Landstrasse); Weg rueck("Rueckweg", 500.0, Weg::Landstrasse); - PKW vw("Golf", 110, 6.7, 88); + PKW vw("Golf", 55, 10, 20); Fahrrad velo("Haibike", 22); - bool bStarted = bInitialisiereGrafik(800, 600, true); + bool bStarted = bInitialisiereGrafik(800, 600); if (!bStarted) { cerr << "Konnte Simulationsserver nicht starten!" << endl; } @@ -184,11 +186,11 @@ void vAufgabe5() { int iKoordinaten[] = {100, 100, 700, 500 }; bZeichneStrasse(hin.getName(), rueck.getName(), hin.getLaenge(), 2, iKoordinaten); - hin.vAnnahme(&vw); - rueck.vAnnahme(&velo); + hin.vAnnahme(&vw, 1.2); + rueck.vAnnahme(&velo); Fahrzeug::vAusgabeHeader(); - while (dGlobaleZeit < 10) { + while (dGlobaleZeit < 15) { dGlobaleZeit += 0.3; hin.vAbfertigung(); rueck.vAbfertigung(); @@ -208,7 +210,7 @@ void vAufgabe5() { void vAufgabe6() { Weg weg("Allee", 300.0, Weg::Landstrasse); - PKW vw("Golf", 110, 6.7, 88); + PKW vw("Golf", 55, 6.7, 88); weg.vAnnahme(&vw); @@ -220,7 +222,7 @@ void vAufgabe6() { } } -void vListeAusgeben(LazyListe tListe) { +void vListeAusgeben(LazyListe &tListe) { LazyListe::iterator it; for (it = tListe.begin(); it != tListe.end(); it++) { cout << *it << ", "; @@ -310,6 +312,7 @@ int main() { goto retry; } + dGlobaleZeit = 0; /* resette globale Uhr */ pAufgaben[iWahl](); /* Funktionspointer aufrufen */ cout << endl << endl << "Nochmal? (0/1): ";