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