BeppeCSharpNauter Geschrieben Gestern um 14:08 Geschrieben Gestern um 14:08 static public int RechnelastTage(DateTime anfang , DateTime ende , Belegung[] belegen , Station station) { DateTime t_date = anfang; int arrayLength = 0; while (t_date < ende) { arrayLength++; t_date = t_date.AddDays(1); } int[] tage = new int[arrayLength]; t_date = anfang; int j = 0; while (t_date < ende) // ich kann eigentlich direkt auf tage iterieren , aber bei der prüfung ist mir nicht eingefallen { for( int i = 0; i < belegen.Length; i++) { if (belegen[i].GetStart() >= anfang && belegen[i].GetEnd() <= ende && belegen[i].IdStation() == station.ID()) { tage[j]++; } } j++; t_date = t_date.AddDays(1); } int lastTage = 0; foreach ( int i in tage) { double last = (double)i / (double)station.AnzahlBett(); if ( last > 0.8) { lastTage++; } } return lastTage; } user2001 reagierte darauf 1
BeppeCSharpNauter Geschrieben Gestern um 14:12 Autor Geschrieben Gestern um 14:12 Getestet habe ich und funktioniert... ich weiß nicht ob ich etwas ausgelassen habe 😥
user2001 Geschrieben Gestern um 17:40 Geschrieben Gestern um 17:40 Meine Definition der Funktion static public int RechnelastTage(DateTime anfang , DateTime ende , Belegung[] belegenungen, Station station) currentDate := anfang; countAusgelasteteTage := 0; While currentDate <= end countBelegteBetten := 0; for i := 0 to belegungen.length -1 if belegungen[i].getStationId() = station.getStationId() if belegungen[i].getDatumVon() <= currentDate and belegungen[i].getDatumBis() >= currentDate countBelegteBetten := countBelegteBetten + 1; end if end if end for if countBelegteBetten / station.getAnzahlBetten() > 0.8 countAusgelasteteTage := countAusgelasteteTage + 1; end if end while return countAusgelasteteTage; end RechnelastTage BeppeCSharpNauter reagierte darauf 1
BeppeCSharpNauter Geschrieben Gestern um 17:57 Autor Geschrieben Gestern um 17:57 deine ist kürzer und leichtgewichtiger aber dass sollte kein einfluss haben
user2001 Geschrieben Gestern um 20:16 Geschrieben Gestern um 20:16 Ich habe allerdings bis <= endDatum iteriert in der äußeren Schleife. Ich hoffe, dass das nicht falsch ist 😕
tuxifan Geschrieben Gestern um 21:43 Geschrieben Gestern um 21:43 (bearbeitet) Hier ist meine Loesung: func auslastungAusrechnen(belegung: Array<Belegung>, startDatum: Date, endDatum: Date, station: Station) -> Int { // Rechne wie viel Auslastung 80% der Gesamtverfuegbarkeit entspricht let auslastung80Prozent = Int(station.anzahlBetten * 0.8) // Rechne Auslastung pro Tag var tage: [Date: Int] = [:] // Dictionary bzw. Map! Z.B. std::map<Date, int> in C++ for datum in startDatum...endDatum { tage[datum] = 0 for b in belegung { if b.stationId == station.stationId && b.datumVon <= datum && b.datumBis > datum { tage[datum]! += 1 } } } // Rechne Anzahl Tage an denen Auslastung mehr als 80% war var ergebnis = 0 for (_, belegungen) in tage { if belegungen > auslastung80Prozent { ergebnis += 1 } } return ergebnis } In dem Pseudocode den ich in der Prüfung geschrieben hab, hatte ich die map so deklariert: tage := new Map<Date, Int> Wichtig zu bedenken ist, dass Belegung::datumBis EXKLUSIV war: Belegungen sollten nicht für den Tag gezählt werden an dem sie enden. Das sehe ich bei @user2001 und bei @BeppeCSharpNauter falsch gelöst. Bearbeitet Gestern um 21:45 von tuxifan
BeppeCSharpNauter Geschrieben Gestern um 22:10 Autor Geschrieben Gestern um 22:10 (bearbeitet) Wenn dann kriegen ein paar Punkte Abzug 😅 Bearbeitet Gestern um 22:11 von BeppeCSharpNauter
jonas.teich Geschrieben vor 16 Stunden Geschrieben vor 16 Stunden (bearbeitet) Das war meine Lösung in etwa: auslastungBette( belegung: Belegung[], startDatum: Date, endDatum: Date, station: Station ): ausgelastetZaehler = 0 aktuellesDatum = startDatum while aktuellesDatum <= endDatum: auslastungZaehler = 0 for i = 0 to belegung.length: aktuelleBelegung = belegung[i] if aktuelleBelegung.getDatumVon() <= aktuellesDatum and aktuelleBelegung.getEndDatum() >= aktuellesDatum: auslastungZaehler = auslastungZaehler + 1 endif endfor if auslatungZaehler > (station.getAnzahlBetten * 0.8) ausgelastetZaehler = ausgelastetZaehler + 1 endif aktuellesDatum = aktuellesDatum + 1 endwhile return ausgelastetZaehler Bearbeitet vor 16 Stunden von jonas.teich
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden