int main() { // Bedien-Schalter: const int nS = 3; // Anzahl Bank-Schalter Queue<Event> bankSchalter[nS]; // Warteschlangen für Bank-Schalter // EreignisListe EventList eList; // kunden.dat ifstream fin("kunden.dat"); Event e; // Hole aus Datei erstes Ankunftsereignis // und füge es in Ereignisliste ein: e.type = 'i'; fin >> e.time; fin >> e.d; if (fin.eof()) return 0; eList.insert(e); // Daten fuer Statistik int numKunden = 0; float gesamtBedienzeit = 0.0; float minBedienzeit = 10000.0; float maxBedienzeit = 0.0; float gesamtWartezeit = 0.0; float minWartezeit = 10000.0; float maxWartezeit = 0.0; while (eList.next(e)) { // Verzoegern und Anzeige loeschen system("usleep 150000"); system("clear"); // Ausgabe des aktuellen Zeitpunktes cout << "Zeit:\t\t" << e.time << " Min" << endl; cout.flush(); if (e.type == 'i') { ////// // e ist Ankunftsereignis: ////// // füge e in kürzeste Warteschlange ein: // Kürzeste Schlange min bestimmen int min = 0; for (int i = 0; i < nS; ++i) { if (bankSchalter[i].length() < bankSchalter[min].length()) { min = i; } } bankSchalter[min].add(e); // Falls e einziger Kunder (d.h. Warteschlangenlänge == 1), // dann wird er gleich bedient. Erzeuge daher neues // Abgangsereignis und füge es in Ereignisliste ein: if (bankSchalter[min].length() == 1) { Event eo; eo.type = 'o'; eo.time = e.time + e.d; // Zeitpunkt des Abgangs = Bedien-Ende eo.nrSchalter = min; eList.insert(eo); // Statistik aktualisieren minWartezeit = 0.0; // minimal Wartezeit ist = 0, da Kunde allein am Schalter } // Hole aus Datei neues Ankunftsereignis // und füge es in Ereignisliste ein: Event ei; ei.type = 'i'; fin >> ei.time; fin >> ei.d; if (!fin.eof()) { eList.insert(ei); } cout << "Ereignis:\tKunde trifft ein und reiht sich an Schalter " << (min+1) << " ein." << endl; // Statistik aktualisieren if (maxBedienzeit < e.d) { maxBedienzeit = e.d; // e.d = Bedienzeit des akt. Events } if (minBedienzeit > e.d) { minBedienzeit = e.d; } gesamtBedienzeit += e.d; } else // e.type == 'o' {