BeppeCSharpNauter Geschrieben vor 20 Stunden Geschrieben vor 20 Stunden 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 vor 20 Stunden Autor Geschrieben vor 20 Stunden Getestet habe ich und funktioniert... ich weiß nicht ob ich etwas ausgelassen habe 😥
user2001 Geschrieben vor 16 Stunden Geschrieben vor 16 Stunden 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 vor 16 Stunden Autor Geschrieben vor 16 Stunden deine ist kürzer und leichtgewichtiger aber dass sollte kein einfluss haben
user2001 Geschrieben vor 13 Stunden Geschrieben vor 13 Stunden Ich habe allerdings bis <= endDatum iteriert in der äußeren Schleife. Ich hoffe, dass das nicht falsch ist 😕
tuxifan Geschrieben vor 12 Stunden Geschrieben vor 12 Stunden (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 vor 12 Stunden von tuxifan
BeppeCSharpNauter Geschrieben vor 12 Stunden Autor Geschrieben vor 12 Stunden (bearbeitet) Wenn dann kriegen ein paar Punkte Abzug 😅 Bearbeitet vor 12 Stunden von BeppeCSharpNauter
jonas.teich Geschrieben vor 3 Stunden Geschrieben vor 3 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 3 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