BeppeCSharpNauter Geschrieben Mittwoch um 14:08 Geschrieben Mittwoch 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 Mittwoch um 14:12 Autor Geschrieben Mittwoch um 14:12 Getestet habe ich und funktioniert... ich weiß nicht ob ich etwas ausgelassen habe 😥
user2001 Geschrieben Mittwoch um 17:40 Geschrieben Mittwoch 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 Mittwoch um 17:57 Autor Geschrieben Mittwoch um 17:57 deine ist kürzer und leichtgewichtiger aber dass sollte kein einfluss haben
user2001 Geschrieben Mittwoch um 20:16 Geschrieben Mittwoch um 20:16 Ich habe allerdings bis <= endDatum iteriert in der äußeren Schleife. Ich hoffe, dass das nicht falsch ist 😕
tuxifan Geschrieben Mittwoch um 21:43 Geschrieben Mittwoch 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 Mittwoch um 21:45 von tuxifan
BeppeCSharpNauter Geschrieben Mittwoch um 22:10 Autor Geschrieben Mittwoch um 22:10 (bearbeitet) Wenn dann kriegen ein paar Punkte Abzug 😅 Bearbeitet Mittwoch um 22:11 von BeppeCSharpNauter
jonas.teich Geschrieben Donnerstag um 06:22 Geschrieben Donnerstag um 06:22 (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 Donnerstag um 06:25 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